diff options
author | Andi Kleen <ak@linux.intel.com> | 2011-09-29 13:15:13 +0000 |
---|---|---|
committer | Andi Kleen <ak@gcc.gnu.org> | 2011-09-29 13:15:13 +0000 |
commit | 35f2a89d8ec65fe11c37f1c681f465229bc852e3 (patch) | |
tree | 036cb4380d2a3505ae1768b759e006e030596b0d /gcc | |
parent | dde8b3609b40a5e9073a7638d492b8c29af2e24c (diff) | |
download | gcc-35f2a89d8ec65fe11c37f1c681f465229bc852e3.zip gcc-35f2a89d8ec65fe11c37f1c681f465229bc852e3.tar.gz gcc-35f2a89d8ec65fe11c37f1c681f465229bc852e3.tar.bz2 |
Use urandom to get random seed
When available use /dev/urandom to get the random seem. This will lower the probability
of collisions.
On other systems it will fallback to the old methods.
Passes bootstrap + testsuite on x86_64. Ok?
gcc/:
2011-09-26 Andi Kleen <ak@linux.intel.com>
* toplev.c (init_local_tick): Try reading random seed from /dev/urandom
From-SVN: r179348
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/toplev.c | 12 |
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c0c963c..67afcd5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2011-09-26 Andi Kleen <ak@linux.intel.com> + * toplev.c (init_local_tick): Try reading random seed from /dev/urandom + +2011-09-26 Andi Kleen <ak@linux.intel.com> + * hwint.h (HOST_WIDE_INT_PRINT_HEX_PURE): Add. * lto-streamer.c (lto_get_section_name): Remove crc32_string. Handle numerical random seed. diff --git a/gcc/toplev.c b/gcc/toplev.c index 78583fc..ab6b5a4 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -262,7 +262,17 @@ init_local_tick (void) { if (!flag_random_seed) { - /* Get some more or less random data. */ + /* Try urandom first. Time of day is too likely to collide. + In case of any error we just use the local tick. */ + + int fd = open ("/dev/urandom", O_RDONLY); + if (fd >= 0) + { + read (fd, &random_seed, sizeof (random_seed)); + close (fd); + } + + /* Now get the tick anyways */ #ifdef HAVE_GETTIMEOFDAY { struct timeval tv; |