summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2007-03-14 01:47:33 +0000
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2007-03-14 01:47:33 +0000
commitb6c1bd727a489a6b86c231d03211065cf877e01d (patch)
tree7bb58d1e7d3b351d0ff0600da13ca9d5dce8a865
parent3752d411e936f7ff076af47ab768c7aab1951908 (diff)
downloadgcc-b6c1bd727a489a6b86c231d03211065cf877e01d.tar.gz
gcc/ChangeLog:
* flags.h (flag_random_seed): Remove declaration, in favor of... * toplev.h (get_random_seed, set_random_seed): ... these. * tree.c (get_file_function_name): Use the former. * opts.c (common_handle_option): Use the latter. * toplev.c gcc/cp/ChangeLog: * cp/repo.c (init_repo): Initialize random_seed saved options. (finish_repo): Adjust. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122901 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/repo.c10
-rw-r--r--gcc/flags.h5
-rw-r--r--gcc/opts.c4
-rw-r--r--gcc/toplev.c64
-rw-r--r--gcc/toplev.h7
-rw-r--r--gcc/tree.c2
8 files changed, 76 insertions, 29 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9d2fc89953e..45d009db9e5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2007-03-13 Alexandre Oliva <aoliva@redhat.com>
+
+ * flags.h (flag_random_seed): Remove declaration, in favor of...
+ * toplev.h (get_random_seed, set_random_seed): ... these.
+ * tree.c (get_file_function_name): Use the former.
+ * opts.c (common_handle_option): Use the latter.
+ * toplev.c
+
2007-03-13 Steven Bosscher <steven@gcc.gnu.org>
PR middle-end/31127
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index b18286d5183..a56322b47f2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2007-03-13 Alexandre Oliva <aoliva@redhat.com>
+
+ * cp/repo.c (init_repo): Initialize random_seed saved options.
+ (finish_repo): Adjust.
+
2007-03-13 Mark Mitchell <mark@codesourcery.com>
PR bootstrap/30899
diff --git a/gcc/cp/repo.c b/gcc/cp/repo.c
index 2bf0303302f..a9b08520d6e 100644
--- a/gcc/cp/repo.c
+++ b/gcc/cp/repo.c
@@ -1,6 +1,6 @@
/* Code to maintain a C++ template repository.
- Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007 Free Software Foundation, Inc.
Contributed by Jason Merrill (jason@cygnus.com)
This file is part of GCC.
@@ -203,6 +203,10 @@ init_repo (void)
obstack_free (&temporary_obstack, buf);
}
fclose (repo_file);
+
+ if (old_args && !get_random_seed (true)
+ && (buf = strstr (old_args, "'-frandom-seed=")))
+ set_random_seed (extract_string (&buf) + strlen ("-frandom-seed="));
}
static FILE *
@@ -250,7 +254,7 @@ finish_repo (void)
anonymous namespaces will get the same mangling when this
file is recompiled. */
if (!strstr (args, "'-frandom-seed="))
- fprintf (repo_file, " '-frandom-seed=%s'", flag_random_seed);
+ fprintf (repo_file, " '-frandom-seed=%s'", get_random_seed (false));
fprintf (repo_file, "\n");
}
diff --git a/gcc/flags.h b/gcc/flags.h
index 2a5515f70c6..0b594ee48d3 100644
--- a/gcc/flags.h
+++ b/gcc/flags.h
@@ -251,11 +251,6 @@ extern int flag_var_tracking;
warning message in case flag was set by -fprofile-{generate,use}. */
extern bool flag_speculative_prefetching_set;
-/* A string that's used when a random name is required. NULL means
- to make it really random. */
-
-extern const char *flag_random_seed;
-
/* Returns TRUE if generated code should match ABI version N or
greater is in use. */
diff --git a/gcc/opts.c b/gcc/opts.c
index ecbc9a39cbb..f8eeb1a7db9 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -1268,11 +1268,11 @@ common_handle_option (size_t scode, const char *arg, int value,
/* The real switch is -fno-random-seed. */
if (value)
return 0;
- flag_random_seed = NULL;
+ set_random_seed (NULL);
break;
case OPT_frandom_seed_:
- flag_random_seed = arg;
+ set_random_seed (arg);
break;
case OPT_fsched_verbose_:
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 4ad6f1d983e..8a471d8f955 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1,6 +1,6 @@
/* Top level of GCC compilers (cc1, cc1plus, etc.)
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GCC.
@@ -239,7 +239,7 @@ int in_system_header = 0;
int flag_detailed_statistics = 0;
/* A random sequence of characters, unless overridden by user. */
-const char *flag_random_seed;
+static const char *flag_random_seed;
/* A local time stamp derived from the time of compilation. It will be
zero if the system cannot provide a time. It will be -1u, if the
@@ -451,23 +451,20 @@ announce_function (tree decl)
}
}
-/* Set up a default flag_random_seed and local_tick, unless the user
- already specified one. */
+/* Initialize local_tick with the time of day, or -1 if
+ flag_random_seed is set. */
static void
-randomize (void)
+init_local_tick (void)
{
if (!flag_random_seed)
{
- unsigned HOST_WIDE_INT value;
- static char random_seed[HOST_BITS_PER_WIDE_INT / 4 + 3];
-
/* Get some more or less random data. */
#ifdef HAVE_GETTIMEOFDAY
{
- struct timeval tv;
+ struct timeval tv;
- gettimeofday (&tv, NULL);
+ gettimeofday (&tv, NULL);
local_tick = tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
#else
@@ -478,15 +475,47 @@ randomize (void)
local_tick = (unsigned) now;
}
#endif
- value = local_tick ^ getpid ();
-
- sprintf (random_seed, HOST_WIDE_INT_PRINT_HEX, value);
- flag_random_seed = random_seed;
}
- else if (!local_tick)
+ else
local_tick = -1;
}
+/* Set up a default flag_random_seed and local_tick, unless the user
+ already specified one. Must be called after init_local_tick. */
+
+static void
+init_random_seed (void)
+{
+ unsigned HOST_WIDE_INT value;
+ static char random_seed[HOST_BITS_PER_WIDE_INT / 4 + 3];
+
+ value = local_tick ^ getpid ();
+
+ sprintf (random_seed, HOST_WIDE_INT_PRINT_HEX, value);
+ flag_random_seed = random_seed;
+}
+
+/* Obtain the random_seed string. Unless NOINIT, initialize it if
+ it's not provided in the command line. */
+
+const char *
+get_random_seed (bool noinit)
+{
+ if (!flag_random_seed && !noinit)
+ init_random_seed ();
+ return flag_random_seed;
+}
+
+/* Modify the random_seed string to VAL. Return its previous
+ value. */
+
+const char *
+set_random_seed (const char *val)
+{
+ const char *old = flag_random_seed;
+ flag_random_seed = val;
+ return old;
+}
/* Decode the string P as an integral parameter.
If the string is indeed an integer return its numeric value else
@@ -1277,7 +1306,8 @@ print_switch_values (print_switch_fn_type print_fn)
/* Fill in the -frandom-seed option, if the user didn't pass it, so
that it can be printed below. This helps reproducibility. */
- randomize ();
+ if (!flag_random_seed)
+ init_random_seed ();
/* Print the options as passed. */
pos = print_single_switch (print_fn, pos,
@@ -2119,7 +2149,7 @@ toplev_main (unsigned int argc, const char **argv)
enough to default flags appropriately. */
decode_options (argc, argv);
- randomize ();
+ init_local_tick ();
/* Exit early if we can (e.g. -help). */
if (!exit_after_options)
diff --git a/gcc/toplev.h b/gcc/toplev.h
index a23d52c8983..524708d1d07 100644
--- a/gcc/toplev.h
+++ b/gcc/toplev.h
@@ -1,5 +1,5 @@
/* toplev.h - Various declarations for functions found in toplev.c
- Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005
+ Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GCC.
@@ -191,4 +191,9 @@ exact_log2 (unsigned HOST_WIDE_INT x)
extern const char *get_src_pwd (void);
extern bool set_src_pwd (const char *);
+/* Functions used to manipulate the random seed. */
+
+extern const char *get_random_seed (bool);
+extern const char *set_random_seed (const char *);
+
#endif /* ! GCC_TOPLEV_H */
diff --git a/gcc/tree.c b/gcc/tree.c
index 53cec8f8647..baf94b2db0a 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -6497,7 +6497,7 @@ get_file_function_name (const char *type)
clean_symbol_name (q);
sprintf (q + len, "_%08X_%08X", crc32_string (0, name),
- crc32_string (0, flag_random_seed));
+ crc32_string (0, get_random_seed (false)));
p = q;
}