diff options
author | Richard Guenther <rguenther@suse.de> | 2010-06-02 13:58:27 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-06-02 13:58:27 +0000 |
commit | 396717c949db41ea0cc7e26b144dd31def3297a2 (patch) | |
tree | c5fecb56c83f1246a240b353a5e3adea6d0eb7ec /gcc | |
parent | 2698955a097e8033ac4021e7e16678abc21fd147 (diff) | |
download | gcc-396717c949db41ea0cc7e26b144dd31def3297a2.zip gcc-396717c949db41ea0cc7e26b144dd31def3297a2.tar.gz gcc-396717c949db41ea0cc7e26b144dd31def3297a2.tar.bz2 |
lto-wrapper.c (lto_wrapper_exit): Rename to ...
2010-06-02 Richard Guenther <rguenther@suse.de>
* lto-wrapper.c (lto_wrapper_exit): Rename to ...
(lto_wrapper_cleanup): ... this. Do not exit.
(fatal): Adjust. Exit here.
(fatal_perror): Likewise.
(fatal_signal): New function.
(main): Set up signal handlers to cleanup temporary files.
* Makefile.in (lto-wrapper.o): Adjust dependencies.
From-SVN: r160153
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/Makefile.in | 3 | ||||
-rw-r--r-- | gcc/lto-wrapper.c | 92 |
3 files changed, 76 insertions, 29 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8457976..b2c82ae 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,15 @@ 2010-06-02 Richard Guenther <rguenther@suse.de> + * lto-wrapper.c (lto_wrapper_exit): Rename to ... + (lto_wrapper_cleanup): ... this. Do not exit. + (fatal): Adjust. Exit here. + (fatal_perror): Likewise. + (fatal_signal): New function. + (main): Set up signal handlers to cleanup temporary files. + * Makefile.in (lto-wrapper.o): Adjust dependencies. + +2010-06-02 Richard Guenther <rguenther@suse.de> + PR tree-optimization/44377 * tree-ssa-structalias.c (find_func_aliases): Fix typo. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 703dfe1..a5eca3e 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -2055,7 +2055,8 @@ lto-wrapper$(exeext): lto-wrapper.o intl.o $(LIBDEPS) $(COMPILER) $(ALL_COMPILERFLAGS) $(LDFLAGS) -o T$@ lto-wrapper.o intl.o $(LIBS) mv -f T$@ $@ -lto-wrapper.o: lto-wrapper.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) intl.h +lto-wrapper.o: lto-wrapper.c $(CONFIG_H) $(SYSTEM_H) defaults.h intl.h \ + $(OBSTACK_H) # A file used by all variants of C. diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c index dda272b..fe5b346 100644 --- a/gcc/lto-wrapper.c +++ b/gcc/lto-wrapper.c @@ -40,12 +40,19 @@ along with GCC; see the file COPYING3. If not see #include "config.h" #include "system.h" #include <errno.h> -#include "coretypes.h" -#include "tm.h" +#include <signal.h> +#if ! defined( SIGCHLD ) && defined( SIGCLD ) +# define SIGCHLD SIGCLD +#endif +#include "defaults.h" #include "intl.h" #include "libiberty.h" #include "obstack.h" +#ifndef HAVE_KILL +#define kill(p,s) raise(s) +#endif + int debug; /* true if -save-temps. */ int verbose; /* true if -v. */ @@ -68,36 +75,45 @@ static char *makefile; static void maybe_unlink_file (const char *); -/* Delete tempfiles and exit function. */ + /* Delete tempfiles. */ static void -lto_wrapper_exit (int status) +lto_wrapper_cleanup (void) { static bool cleanup_done = false; - if (!cleanup_done) + unsigned int i; + + if (cleanup_done) + return; + + /* Setting cleanup_done prevents an infinite loop if one of the + calls to maybe_unlink_file fails. */ + cleanup_done = true; + + if (ltrans_output_file) + maybe_unlink_file (ltrans_output_file); + if (flto_out) + maybe_unlink_file (flto_out); + if (args_name) + maybe_unlink_file (args_name); + if (makefile) + maybe_unlink_file (makefile); + for (i = 0; i < nr; ++i) { - unsigned int i; - - /* Setting cleanup_done prevents an infinite loop if one of the - calls to maybe_unlink_file fails. */ - cleanup_done = true; - - if (ltrans_output_file) - maybe_unlink_file (ltrans_output_file); - if (flto_out) - maybe_unlink_file (flto_out); - if (args_name) - maybe_unlink_file (args_name); - if (makefile) - maybe_unlink_file (makefile); - for (i = 0; i < nr; ++i) - { - maybe_unlink_file (input_names[i]); - if (output_names[i]) - maybe_unlink_file (output_names[i]); - } + maybe_unlink_file (input_names[i]); + if (output_names[i]) + maybe_unlink_file (output_names[i]); } - exit (status); +} + +static void +fatal_signal (int signum) +{ + signal (signum, SIG_DFL); + lto_wrapper_cleanup (); + /* Get the same signal again, this time not handled, + so its normal effect occurs. */ + kill (getpid (), signum); } /* Just die. CMSGID is the error message. */ @@ -113,7 +129,8 @@ fatal (const char * cmsgid, ...) fprintf (stderr, "\n"); va_end (ap); - lto_wrapper_exit (FATAL_EXIT_CODE); + lto_wrapper_cleanup (); + exit (FATAL_EXIT_CODE); } @@ -131,7 +148,8 @@ fatal_perror (const char *cmsgid, ...) fprintf (stderr, ": %s\n", xstrerror (e)); va_end (ap); - lto_wrapper_exit (FATAL_EXIT_CODE); + lto_wrapper_cleanup (); + exit (FATAL_EXIT_CODE); } @@ -597,6 +615,24 @@ main (int argc, char *argv[]) { gcc_init_libintl (); + if (signal (SIGINT, SIG_IGN) != SIG_IGN) + signal (SIGINT, fatal_signal); +#ifdef SIGHUP + if (signal (SIGHUP, SIG_IGN) != SIG_IGN) + signal (SIGHUP, fatal_signal); +#endif + if (signal (SIGTERM, SIG_IGN) != SIG_IGN) + signal (SIGTERM, fatal_signal); +#ifdef SIGPIPE + if (signal (SIGPIPE, SIG_IGN) != SIG_IGN) + signal (SIGPIPE, fatal_signal); +#endif +#ifdef SIGCHLD + /* We *MUST* set SIGCHLD to SIG_DFL so that the wait4() call will + receive the signal. A different setting is inheritable */ + signal (SIGCHLD, SIG_DFL); +#endif + /* We may be called with all the arguments stored in some file and passed with @file. Expand them into argv before processing. */ expandargv (&argc, &argv); |