diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2010-12-06 12:44:50 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2010-12-06 12:44:50 +0000 |
commit | 588cb3e319887739004d7ee9919b4902f095e8c1 (patch) | |
tree | 4171e5aca895e9e7fe8bc5469b7b679da168974e /ld/plugin.c | |
parent | 1db8699e7fc41af2c94838d26b582d7eb480cc5c (diff) | |
download | binutils-redhat-588cb3e319887739004d7ee9919b4902f095e8c1.tar.gz |
Call xatexit with plugin_call_cleanup.
2010-12-06 H.J. Lu <hongjiu.lu@intel.com>
Dmitry Gorbachev <d.g.gorbachev@gmail.com>
PR ld/12289
* ldmain.c (main): Don't call plugin_call_cleanup.
* plugin.c (plugin_call_cleanup): Make it static.
(message): Don't call plugin_call_cleanup.
(plugin_load_plugins): Call xatexit with plugin_call_cleanup.
Diffstat (limited to 'ld/plugin.c')
-rw-r--r-- | ld/plugin.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/ld/plugin.c b/ld/plugin.c index 3d7809c2c4..2950295b24 100644 --- a/ld/plugin.c +++ b/ld/plugin.c @@ -108,6 +108,9 @@ 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[] = { @@ -590,9 +593,6 @@ message (int level, const char *format, ...) char *newfmt = ACONCAT ((level == LDPL_FATAL ? "%P%F: " : "%P%X: ", format, "\n", NULL)); - if (plugin_call_cleanup ()) - info_msg (_("%P: %s: error in plugin cleanup (ignored)\n"), - plugin_error_plugin ()); vfinfo (stderr, newfmt, args, TRUE); } break; @@ -716,6 +716,8 @@ 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) @@ -812,8 +814,8 @@ plugin_call_all_symbols_read (void) return plugin_error_p () ? -1 : 0; } -/* Call 'cleanup' hook for all plugins. */ -int +/* Call 'cleanup' hook for all plugins at exit. */ +static void plugin_call_cleanup (void) { plugin_t *curplug = plugins_list; @@ -832,7 +834,9 @@ plugin_call_cleanup (void) } curplug = curplug->next; } - return plugin_error_p () ? -1 : 0; + if (plugin_error_p ()) + info_msg (_("%P: %s: error in plugin cleanup (ignored)\n"), + plugin_error_plugin ()); } /* Lazily init the non_ironly hash table. */ |