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.
This commit is contained in:
H.J. Lu 2010-12-06 12:44:51 +00:00
parent 3b8525f821
commit e73d965c22
4 changed files with 20 additions and 16 deletions

View file

@ -1,3 +1,13 @@
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.
2010-12-05 H.J. Lu <hongjiu.lu@intel.com>
PR ld/12289

View file

@ -479,13 +479,6 @@ main (int argc, char **argv)
lang_finish ();
#ifdef ENABLE_PLUGINS
/* Now everything is finished, we can tell the plugins to clean up. */
if (plugin_call_cleanup ())
info_msg (_("%P: %s: error in plugin cleanup (ignored)\n"),
plugin_error_plugin ());
#endif /* ENABLE_PLUGINS */
/* Even if we're producing relocatable output, some non-fatal errors should
be reported in the exit status. (What non-fatal errors, if any, do we
want to ignore for relocatable output?) */

View file

@ -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. */

View file

@ -50,9 +50,6 @@ 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. */
extern int 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