aboutsummaryrefslogtreecommitdiff
path: root/ld/ldmain.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2011-04-20 00:22:08 +0000
committerAlan Modra <amodra@gmail.com>2011-04-20 00:22:08 +0000
commit02d002477b60cff9f0f5abbd5fc27e2889b13421 (patch)
treeddb5245de932bf699df9cd2dda541ad9c96eef26 /ld/ldmain.c
parent24f58f47de96a6c061fc6eeb37a699c03dde970a (diff)
downloadgdb-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.c23
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 */