A 2011 change to collect2 to use the standard diagnostics
infrastructure broke collect2's cleanup of temp files when an error
occurs. This prototype of a patch implements the minimal conversion
of collect2 to use atexit().
If this is the right direction, all calls to collect_exit() can be
converted to exit().
Thanks, David
PR driver/57652
* collect2.c (collect_atexit): New.
(collect_exit): Directly call exit.
(main): Register collect_atexit with atexit.
Index: collect2.c
===================================================================
--- collect2.c (revision 200180)
+++ collect2.c (working copy)
@@ -367,7 +367,7 @@
/* Delete tempfiles and exit function. */
void
-collect_exit (int status)
+collect_atexit (void)
{
if (c_file != 0 && c_file[0])
maybe_unlink (c_file);
@@ -395,12 +395,16 @@
maybe_unlink (lderrout);
}
- if (status != 0 && output_file != 0 && output_file[0])
+ if (output_file != 0 && output_file[0])
maybe_unlink (output_file);
if (response_file)
maybe_unlink (response_file);
+}
+void
+collect_exit (int status)
+{
exit (status);
}
@@ -970,6 +974,9 @@
signal (SIGCHLD, SIG_DFL);
#endif
+ if (atexit (collect_atexit) != 0)
+ fatal_error ("atexit failed");
+
/* Unlock the stdio streams. */
unlock_std_streams ();