mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
e3f9e0acec
commit
e1f9340b00
|
|
@ -1,3 +1,14 @@
|
||||||
|
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);
|
||||||
|
|
||||||
/* 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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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 **);
|
||||||
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 *);
|
||||||
|
|
|
||||||
14
gcc/tlink.c
14
gcc/tlink.c
|
|
@ -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)
|
||||||
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)
|
||||||
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
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue