From patchwork Wed Sep 28 12:49:23 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andi Kleen X-Patchwork-Id: 116784 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id B9A26B6F97 for ; Wed, 28 Sep 2011 22:50:08 +1000 (EST) Received: (qmail 4650 invoked by alias); 28 Sep 2011 12:49:55 -0000 Received: (qmail 4535 invoked by uid 22791); 28 Sep 2011 12:49:54 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from one.firstfloor.org (HELO one.firstfloor.org) (213.235.205.2) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 28 Sep 2011 12:49:27 +0000 Received: by one.firstfloor.org (Postfix, from userid 503) id 290251A9808E; Wed, 28 Sep 2011 14:49:26 +0200 (CEST) From: Andi Kleen To: gcc-patches@gcc.gnu.org Cc: Andi Kleen Subject: [PATCH 3/3] Use urandom in gcc.c too Date: Wed, 28 Sep 2011 14:49:23 +0200 Message-Id: <1317214163-26010-4-git-send-email-andi@firstfloor.org> In-Reply-To: <1317214163-26010-1-git-send-email-andi@firstfloor.org> References: <1317214163-26010-1-git-send-email-andi@firstfloor.org> Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org From: Andi Kleen gcc also takes generates a random number in some special circumstances, so teach it about /dev/urandom too. gcc/: 2011-09-27 Andi Kleen * gcc.c (get_local_tick). Rename to get_random_number. Read from /dev/urandom. Add getpid call. (compare_debug_dump_opt_spec_function): Drop getpid call. --- gcc/gcc.c | 22 ++++++++++++++++------ 1 files changed, 16 insertions(+), 6 deletions(-) diff --git a/gcc/gcc.c b/gcc/gcc.c index ddec8db..3bfdf77 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -8062,12 +8062,22 @@ print_asm_header_spec_function (int arg ATTRIBUTE_UNUSED, return NULL; } -/* Compute a timestamp to initialize flag_random_seed. */ +/* Get a random number for -frandom-seed */ -static unsigned -get_local_tick (void) +static unsigned HOST_WIDE_INT +get_random_number (void) { - unsigned ret = 0; + unsigned HOST_WIDE_INT ret = 0; + int fd; + + fd = open ("/dev/urandom", O_RDONLY); + if (fd >= 0) + { + read (fd, &ret, sizeof (HOST_WIDE_INT)); + close (fd); + if (ret) + return ret; + } /* Get some more or less random data. */ #ifdef HAVE_GETTIMEOFDAY @@ -8086,7 +8096,7 @@ get_local_tick (void) } #endif - return ret; + return ret ^ getpid(); } /* %:compare-debug-dump-opt spec function. Save the last argument, @@ -8145,7 +8155,7 @@ compare_debug_dump_opt_spec_function (int arg, if (!which) { - unsigned HOST_WIDE_INT value = get_local_tick () ^ getpid (); + unsigned HOST_WIDE_INT value = get_random_number (); sprintf (random_seed, HOST_WIDE_INT_PRINT_HEX, value); }