* ldmain.c (remove_output): Rename to..
authorAlan Modra <amodra@gmail.com>
Mon, 14 Feb 2011 09:53:15 +0000 (09:53 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 14 Feb 2011 09:53:15 +0000 (09:53 +0000)
(ld_cleanup): ..this. Call bfd_cache_close_all and plugin_call_cleanup.
(main): Adjust.
* plugin.c (plugin_call_cleanup): Make global.
(plugin_load_plugins): Don't register plugin_call_cleanup with xatexit.
* plugin.h (plugin_call_cleanup): Declare.

ld/ChangeLog
ld/ldmain.c
ld/plugin.c
ld/plugin.h

index 147db32..a57210e 100644 (file)
@@ -1,3 +1,12 @@
+2011-02-14  Alan Modra  <amodra@gmail.com>
+
+       * ldmain.c (remove_output): Rename to..
+       (ld_cleanup): ..this. Call bfd_cache_close_all and plugin_call_cleanup.
+       (main): Adjust.
+       * plugin.c (plugin_call_cleanup): Make global.
+       (plugin_load_plugins): Don't register plugin_call_cleanup with xatexit.
+       * plugin.h (plugin_call_cleanup): Declare.
+
 2011-02-13  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        * configure: Regenerate.
index 19c42d9..6e86c3d 100644 (file)
@@ -174,15 +174,14 @@ static struct bfd_link_callbacks link_callbacks =
 struct bfd_link_info link_info;
 \f
 static void
-remove_output (void)
+ld_cleanup (void)
 {
-  if (output_filename)
-    {
-      if (link_info.output_bfd)
-       bfd_cache_close (link_info.output_bfd);
-      if (delete_output_file_on_failure)
-       unlink_if_ordinary (output_filename);
-    }
+  bfd_cache_close_all ();
+#ifdef ENABLE_PLUGINS
+  plugin_call_cleanup ();
+#endif
+  if (output_filename && delete_output_file_on_failure)
+    unlink_if_ordinary (output_filename);
 }
 
 int
@@ -211,7 +210,7 @@ main (int argc, char **argv)
 
   bfd_set_error_program_name (program_name);
 
-  xatexit (remove_output);
+  xatexit (ld_cleanup);
 
   /* Set up the sysroot directory.  */
   ld_sysroot = get_sysroot (argc, argv);
index b285787..86d80ca 100644 (file)
@@ -108,9 +108,6 @@ static bfd_boolean no_more_claiming = FALSE;
    TRUE is returned from the hook.  */
 static bfd_boolean plugin_cached_allow_multiple_defs = FALSE;
 
-/* Call 'cleanup' hook for all plugins at exit.  */
-static void plugin_call_cleanup (void);
-
 /* List of tags to set in the constant leading part of the tv array. */
 static const enum ld_plugin_tag tv_header_tags[] =
 {
@@ -721,8 +718,6 @@ plugin_load_plugins (void)
   if (!curplug)
     return 0;
 
-  xatexit (plugin_call_cleanup);
-
   /* First pass over plugins to find max # args needed so that we
      can size and allocate the tv array.  */
   while (curplug)
@@ -820,7 +815,7 @@ plugin_call_all_symbols_read (void)
 }
 
 /* Call 'cleanup' hook for all plugins at exit.  */
-static void
+void
 plugin_call_cleanup (void)
 {
   plugin_t *curplug = plugins_list;
index fc5f37f..5b340be 100644 (file)
@@ -1,5 +1,5 @@
 /* Plugin control for the GNU linker.
-   Copyright 2010 Free Software Foundation, Inc.
+   Copyright 2010, 2011 Free Software Foundation, Inc.
 
    This file is part of the GNU Binutils.
 
@@ -50,6 +50,9 @@ extern int plugin_call_claim_file (const struct ld_plugin_input_file *file,
 /* Call 'all symbols read' hook for all plugins.  */
 extern int plugin_call_all_symbols_read (void);
 
+/* Call 'cleanup' hook for all plugins at exit.  */
+extern void plugin_call_cleanup (void);
+
 /* Generate a dummy BFD to represent an IR file, for any callers of
    plugin_call_claim_file to use as the handle in the ld_plugin_input_file
    struct that they build to pass in.  The BFD is initially writable, so