[PATCH 1/2] Merge linker plugin handling into BFD plugin support

H.J. Lu hjl.tools@gmail.com
Wed Feb 11 13:05:00 GMT 2015


On Mon, Feb 09, 2015 at 05:01:19AM -0800, H.J. Lu wrote:
> 
> Linker plugin_maybe_claim is the interface of linker plugin support.
> This patch extracts linker plugin_maybe_claim into plugin_object_p and
> makes it available to BFD via a new function:
> 
> void register_ld_plugin_object_p (const bfd_target *(*) (bfd *));
> 
> bfd_plugin_object_p calls plugin_object_p first registered by linker.  It
> adds an enum bfd_plugin_format field and a pointer to plugin dummy BFD so
> that plugin_object_p stores plugin dummy BFD to allow plugin_maybe_claim
> to retrieve it later.
> 
> bfd/
> 
> 	PR ld/17878
> 	* bfd.c (bfd_plugin_format): New.
> 	(bfd): Add plugin_format and plugin_dummy_bfd.
> 	* plugin.c (try_load_plugin): Take a pointer to bfd_boolean
> 	argument to return TRUE if any plugin is found.  Set plugin_format.
> 	(has_plugin): New.
> 	(bfd_plugin_target_p): New.
> 	(bfd_plugin_specified_p): Likewise.
> 	(bfd_plugin_target_p): Likewise.
> 	(register_ld_plugin_object_p): Likewise.
> 	(bfd_plugin_set_plugin): Set has_plugin.
> 	(load_plugin): Cache try_load_plugin result.
> 	(bfd_plugin_object_p): Try ld_plugin_object_p first.  Check
> 	plugin_format.
> 	* plugin.h (bfd_plugin_target_p): New.
> 	(bfd_plugin_specified_p): Likewise.
> 	(register_ld_plugin_object_p): Likewise.
> 	* bfd-in2.h: Regenerated.
> 
> ld/
> 
> 	PR ld/17878
> 	* plugin.c: Include ../bfd/plugin.h.
> 	(plugin_get_ir_dummy_bfd): Call bfd_create with
> 	link_info.output_bfd instead of srctemplate.  Copy BFD info
> 	from srctemplate only if it doesn't use BFD plugin target
> 	vector.
> 	(plugin_load_plugins): Call register_ld_plugin_object_p with
> 	(plugin_object_p)
> 	(plugin_maybe_claim): Renamed to ...
> 	(plugin_object_p): This.  Return dummy BFD target vector if
> 	input is calimed by plugin library.  Otheewise, return NULL.
> 	Update plugin_format and plugin_dummy_bfd.
> 	(plugin_maybe_claim): New.  Use plugin_object_p.

I checked it in with a small update to plugin_object_p:

   /* Don't try the dummy object file.  */
   if ((ibfd->flags & BFD_PLUGIN) != 0)
       return NULL;

The dummy object file will never be a plugin object.

H.J.



More information about the Binutils mailing list