Commit 396717c9 by Richard Guenther Committed by Richard Biener

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
parent 2698955a
2010-06-02 Richard Guenther <rguenther@suse.de> 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 PR tree-optimization/44377
* tree-ssa-structalias.c (find_func_aliases): Fix typo. * tree-ssa-structalias.c (find_func_aliases): Fix typo.
......
...@@ -2055,7 +2055,8 @@ lto-wrapper$(exeext): lto-wrapper.o intl.o $(LIBDEPS) ...@@ -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) $(COMPILER) $(ALL_COMPILERFLAGS) $(LDFLAGS) -o T$@ lto-wrapper.o intl.o $(LIBS)
mv -f T$@ $@ 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. # A file used by all variants of C.
......
...@@ -40,12 +40,19 @@ along with GCC; see the file COPYING3. If not see ...@@ -40,12 +40,19 @@ along with GCC; see the file COPYING3. If not see
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
#include <errno.h> #include <errno.h>
#include "coretypes.h" #include <signal.h>
#include "tm.h" #if ! defined( SIGCHLD ) && defined( SIGCLD )
# define SIGCHLD SIGCLD
#endif
#include "defaults.h"
#include "intl.h" #include "intl.h"
#include "libiberty.h" #include "libiberty.h"
#include "obstack.h" #include "obstack.h"
#ifndef HAVE_KILL
#define kill(p,s) raise(s)
#endif
int debug; /* true if -save-temps. */ int debug; /* true if -save-temps. */
int verbose; /* true if -v. */ int verbose; /* true if -v. */
...@@ -68,36 +75,45 @@ static char *makefile; ...@@ -68,36 +75,45 @@ static char *makefile;
static void maybe_unlink_file (const char *); static void maybe_unlink_file (const char *);
/* Delete tempfiles and exit function. */ /* Delete tempfiles. */
static void static void
lto_wrapper_exit (int status) lto_wrapper_cleanup (void)
{ {
static bool cleanup_done = false; 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; maybe_unlink_file (input_names[i]);
if (output_names[i])
/* Setting cleanup_done prevents an infinite loop if one of the maybe_unlink_file (output_names[i]);
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]);
}
} }
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. */ /* Just die. CMSGID is the error message. */
...@@ -113,7 +129,8 @@ fatal (const char * cmsgid, ...) ...@@ -113,7 +129,8 @@ fatal (const char * cmsgid, ...)
fprintf (stderr, "\n"); fprintf (stderr, "\n");
va_end (ap); 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, ...) ...@@ -131,7 +148,8 @@ fatal_perror (const char *cmsgid, ...)
fprintf (stderr, ": %s\n", xstrerror (e)); fprintf (stderr, ": %s\n", xstrerror (e));
va_end (ap); 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[]) ...@@ -597,6 +615,24 @@ main (int argc, char *argv[])
{ {
gcc_init_libintl (); 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 /* We may be called with all the arguments stored in some file and
passed with @file. Expand them into argv before processing. */ passed with @file. Expand them into argv before processing. */
expandargv (&argc, &argv); expandargv (&argc, &argv);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment