Commit e1f9340b by David Edelsohn Committed by David Edelsohn

re PR driver/57652 (collect2 does not clean up temporary files)

        PR driver/57652
        * collect2.c (collect_atexit): New.
        (collect_exit): Delete.
        (main): Register collect_atexit with atexit.
        (collect_wait): Change collect_exit to exit.
        (do_wait): Same.
        * collect2.h (collect_exit): Delete.
        * tlink.c (do_tlink): Rename exit to ret. Change collect_exit to exit.

From-SVN: r200226
parent e3f9e0ac
2013-06-19 David Edelsohn <dje.gcc@gmail.com>
PR driver/57652
* collect2.c (collect_atexit): New.
(collect_exit): Delete.
(main): Register collect_atexit with atexit.
(collect_wait): Change collect_exit to exit.
(do_wait): Same.
* collect2.h (collect_exit): Delete.
* tlink.c (do_tlink): Rename exit to ret. Change collect_exit to exit.
2013-06-19 Wei Mi <wmi@google.com> 2013-06-19 Wei Mi <wmi@google.com>
PR rtl-optimization/57518 PR rtl-optimization/57518
......
...@@ -366,8 +366,8 @@ static void scan_prog_file (const char *, scanpass, scanfilter); ...@@ -366,8 +366,8 @@ static void scan_prog_file (const char *, scanpass, scanfilter);
/* Delete tempfiles and exit function. */ /* Delete tempfiles and exit function. */
void static void
collect_exit (int status) collect_atexit (void)
{ {
if (c_file != 0 && c_file[0]) if (c_file != 0 && c_file[0])
maybe_unlink (c_file); maybe_unlink (c_file);
...@@ -395,13 +395,8 @@ collect_exit (int status) ...@@ -395,13 +395,8 @@ collect_exit (int status)
maybe_unlink (lderrout); maybe_unlink (lderrout);
} }
if (status != 0 && output_file != 0 && output_file[0])
maybe_unlink (output_file);
if (response_file) if (response_file)
maybe_unlink (response_file); maybe_unlink (response_file);
exit (status);
} }
...@@ -970,6 +965,9 @@ main (int argc, char **argv) ...@@ -970,6 +965,9 @@ main (int argc, char **argv)
signal (SIGCHLD, SIG_DFL); signal (SIGCHLD, SIG_DFL);
#endif #endif
if (atexit (collect_atexit) != 0)
fatal_error ("atexit failed");
/* Unlock the stdio streams. */ /* Unlock the stdio streams. */
unlock_std_streams (); unlock_std_streams ();
...@@ -1816,7 +1814,7 @@ collect_wait (const char *prog, struct pex_obj *pex) ...@@ -1816,7 +1814,7 @@ collect_wait (const char *prog, struct pex_obj *pex)
error ("%s terminated with signal %d [%s]%s", error ("%s terminated with signal %d [%s]%s",
prog, sig, strsignal(sig), prog, sig, strsignal(sig),
WCOREDUMP(status) ? ", core dumped" : ""); WCOREDUMP(status) ? ", core dumped" : "");
collect_exit (FATAL_EXIT_CODE); exit (FATAL_EXIT_CODE);
} }
if (WIFEXITED (status)) if (WIFEXITED (status))
...@@ -1832,7 +1830,7 @@ do_wait (const char *prog, struct pex_obj *pex) ...@@ -1832,7 +1830,7 @@ do_wait (const char *prog, struct pex_obj *pex)
if (ret != 0) if (ret != 0)
{ {
error ("%s returned %d exit status", prog, ret); error ("%s returned %d exit status", prog, ret);
collect_exit (ret); exit (ret);
} }
if (response_file) if (response_file)
......
...@@ -25,8 +25,6 @@ extern void do_tlink (char **, char **); ...@@ -25,8 +25,6 @@ extern void do_tlink (char **, char **);
extern struct pex_obj *collect_execute (const char *, char **, const char *, extern struct pex_obj *collect_execute (const char *, char **, const char *,
const char *, int flags); const char *, int flags);
extern void collect_exit (int) ATTRIBUTE_NORETURN;
extern int collect_wait (const char *, struct pex_obj *); extern int collect_wait (const char *, struct pex_obj *);
extern void dump_ld_file (const char *, FILE *); extern void dump_ld_file (const char *, FILE *);
......
...@@ -817,18 +817,18 @@ scan_linker_output (const char *fname) ...@@ -817,18 +817,18 @@ scan_linker_output (const char *fname)
void void
do_tlink (char **ld_argv, char **object_lst ATTRIBUTE_UNUSED) do_tlink (char **ld_argv, char **object_lst ATTRIBUTE_UNUSED)
{ {
int exit = tlink_execute ("ld", ld_argv, ldout, lderrout); int ret = tlink_execute ("ld", ld_argv, ldout, lderrout);
tlink_init (); tlink_init ();
if (exit) if (ret)
{ {
int i = 0; int i = 0;
/* Until collect does a better job of figuring out which are object /* Until collect does a better job of figuring out which are object
files, assume that everything on the command line could be. */ files, assume that everything on the command line could be. */
if (read_repo_files (ld_argv)) if (read_repo_files (ld_argv))
while (exit && i++ < MAX_ITERATIONS) while (ret && i++ < MAX_ITERATIONS)
{ {
if (tlink_verbose >= 3) if (tlink_verbose >= 3)
{ {
...@@ -843,7 +843,7 @@ do_tlink (char **ld_argv, char **object_lst ATTRIBUTE_UNUSED) ...@@ -843,7 +843,7 @@ do_tlink (char **ld_argv, char **object_lst ATTRIBUTE_UNUSED)
break; break;
if (tlink_verbose) if (tlink_verbose)
fprintf (stderr, _("collect: relinking\n")); fprintf (stderr, _("collect: relinking\n"));
exit = tlink_execute ("ld", ld_argv, ldout, lderrout); ret = tlink_execute ("ld", ld_argv, ldout, lderrout);
} }
} }
...@@ -851,10 +851,10 @@ do_tlink (char **ld_argv, char **object_lst ATTRIBUTE_UNUSED) ...@@ -851,10 +851,10 @@ do_tlink (char **ld_argv, char **object_lst ATTRIBUTE_UNUSED)
unlink (ldout); unlink (ldout);
dump_ld_file (lderrout, stderr); dump_ld_file (lderrout, stderr);
unlink (lderrout); unlink (lderrout);
if (exit) if (ret)
{ {
error ("ld returned %d exit status", exit); error ("ld returned %d exit status", ret);
collect_exit (exit); exit (ret);
} }
else else
{ {
......
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