diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-02-11 05:01:03 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-02-11 05:02:12 -0800 |
commit | 5ae0078cd2b6b69e6119864e20987c8724916b29 (patch) | |
tree | 85abe7a9ee24f03cffbc4a4acf2be913b6e9b6ef /bfd/bfd.c | |
parent | 18ad82c16379e7ed7daa3043abdacee1d934867d (diff) | |
download | gdb-5ae0078cd2b6b69e6119864e20987c8724916b29.zip gdb-5ae0078cd2b6b69e6119864e20987c8724916b29.tar.gz gdb-5ae0078cd2b6b69e6119864e20987c8724916b29.tar.bz2 |
Merge linker plugin handling into BFD plugin support
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 registered by linker first. 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, otherwise return NULL.
Update plugin_format and plugin_dummy_bfd.
(plugin_maybe_claim): New. Use plugin_object_p.
xx
Diffstat (limited to 'bfd/bfd.c')
-rw-r--r-- | bfd/bfd.c | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -44,6 +44,13 @@ CODE_FRAGMENT . both_direction = 3 . }; . +.enum bfd_plugin_format +. { +. bfd_plugin_uknown = 0, +. bfd_plugin_yes = 1, +. bfd_plugin_no = 2 +. }; +. .struct bfd .{ . {* The filename the application opened the BFD with. *} @@ -200,6 +207,13 @@ CODE_FRAGMENT . {* Set if this is the linker output BFD. *} . unsigned int is_linker_output : 1; . +. {* If this is an input for a compiler plug-in library. *} +. ENUM_BITFIELD (bfd_plugin_format) plugin_format : 2; +. +. {* Set to dummy BFD created when claimed by a compiler plug-in +. library. *} +. bfd *plugin_dummy_bfd; +. . {* Currently my_archive is tested before adding origin to . anything. I believe that this can become always an add of . origin, with origin set to 0 for non archive files. *} |