aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-06-02 13:58:27 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-06-02 13:58:27 +0000
commit396717c949db41ea0cc7e26b144dd31def3297a2 (patch)
treec5fecb56c83f1246a240b353a5e3adea6d0eb7ec /gcc
parent2698955a097e8033ac4021e7e16678abc21fd147 (diff)
downloadgcc-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/ChangeLog10
-rw-r--r--gcc/Makefile.in3
-rw-r--r--gcc/lto-wrapper.c92
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);