aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2011-09-29 13:15:13 +0000
committerAndi Kleen <ak@gcc.gnu.org>2011-09-29 13:15:13 +0000
commit35f2a89d8ec65fe11c37f1c681f465229bc852e3 (patch)
tree036cb4380d2a3505ae1768b759e006e030596b0d
parentdde8b3609b40a5e9073a7638d492b8c29af2e24c (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/toplev.c12
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;