diff options
author | Alan Modra <amodra@gmail.com> | 2011-04-20 00:22:08 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2011-04-20 00:22:08 +0000 |
commit | 02d002477b60cff9f0f5abbd5fc27e2889b13421 (patch) | |
tree | ddb5245de932bf699df9cd2dda541ad9c96eef26 /ld/ldmain.c | |
parent | 24f58f47de96a6c061fc6eeb37a699c03dde970a (diff) | |
download | gdb-02d002477b60cff9f0f5abbd5fc27e2889b13421.zip gdb-02d002477b60cff9f0f5abbd5fc27e2889b13421.tar.gz gdb-02d002477b60cff9f0f5abbd5fc27e2889b13421.tar.bz2 |
PR ld/12365
bfd/
* elfcode.h (elf_slurp_symbol_table): Put common plugin IR symbols
in their own common section.
* elflink.c (elf_link_add_object_symbols): Likewise.
* linker.c (generic_link_check_archive_element): Don't lose flags
if common section is pre-existing.
(_bfd_generic_link_add_one_symbol): Likewise.
ld/
* ldfile.c (ldfile_try_open_bfd): Move code creating and switching
to plugin IR BFD..
* ldmain.c (add_archive_element): ..and similar code here..
* plugin.c (plugin_maybe_claim): ..to here. New function.
(plugin_call_claim_file): Make static.
(asymbol_from_plugin_symbol): Set ELF st_shndx for common syms.
(plugin_multiple_common): New function.
(plugin_call_all_symbols_read): Hook in plugin_multiple_common.
* plugin.h (plugin_call_claim_file): Don't declare.
(plugin_maybe_claim): Declare.
Diffstat (limited to 'ld/ldmain.c')
-rw-r--r-- | ld/ldmain.c | 23 |
1 files changed, 3 insertions, 20 deletions
diff --git a/ld/ldmain.c b/ld/ldmain.c index b7e725b..0de7890 100644 --- a/ld/ldmain.c +++ b/ld/ldmain.c @@ -813,7 +813,7 @@ add_archive_element (struct bfd_link_info *info, if (fd >= 0) { struct ld_plugin_input_file file; - int claimed = 0; + /* Offset and filesize must refer to the individual archive member, not the whole file, and must exclude the header. Fortunately for us, that is how the data is stored in the @@ -822,29 +822,12 @@ add_archive_element (struct bfd_link_info *info, file.offset = abfd->origin; file.filesize = arelt_size (abfd); file.fd = fd; - /* We create a dummy BFD, initially empty, to house - whatever symbols the plugin may want to add. */ - file.handle = plugin_get_ir_dummy_bfd (abfd->filename, abfd); - if (plugin_call_claim_file (&file, &claimed)) - einfo (_("%P%F: %s: plugin reported error claiming file\n"), - plugin_error_plugin ()); - /* fd belongs to us, not the plugin; but we don't need it. */ - close (fd); - if (claimed) + plugin_maybe_claim (&file, input); + if (input->claimed) { - /* Substitute the dummy BFD. */ - input->the_bfd = file.handle; - input->claimed = TRUE; input->claim_archive = TRUE; - bfd_make_readable (input->the_bfd); *subsbfd = input->the_bfd; } - else - { - /* Abandon the dummy BFD. */ - bfd_close_all_done (file.handle); - input->claimed = FALSE; - } } } #endif /* ENABLE_PLUGINS */ |