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/ldfile.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/ldfile.c')
-rw-r--r-- | ld/ldfile.c | 28 |
1 files changed, 3 insertions, 25 deletions
diff --git a/ld/ldfile.c b/ld/ldfile.c index 96a3856..c4b8912 100644 --- a/ld/ldfile.c +++ b/ld/ldfile.c @@ -1,6 +1,7 @@ /* Linker file opening and searching. Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011 + Free Software Foundation, Inc. This file is part of the GNU Binutils. @@ -320,35 +321,12 @@ success: if (fd >= 0) { struct ld_plugin_input_file file; - int claimed = 0; file.name = attempt; file.offset = 0; file.filesize = lseek (fd, 0, SEEK_END); 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 (attempt, entry->the_bfd); - 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) - { - /* Discard the real file's BFD and substitute the dummy one. */ - bfd_close (entry->the_bfd); - entry->the_bfd = file.handle; - entry->claimed = TRUE; - bfd_make_readable (entry->the_bfd); - } - else - { - /* If plugin didn't claim the file, we don't need the dummy - bfd. Can't avoid speculatively creating it, alas. */ - bfd_close_all_done (file.handle); - entry->claimed = FALSE; - } + plugin_maybe_claim (&file, entry); } } #endif /* ENABLE_PLUGINS */ |