summaryrefslogtreecommitdiff
path: root/ld/ldfile.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2011-04-20 00:22:07 +0000
committerAlan Modra <amodra@bigpond.net.au>2011-04-20 00:22:07 +0000
commit33240c08520befe8483f59d93a0629f282617798 (patch)
tree2c73a20c0d4d7c785c8a0560f9a9703b0038d906 /ld/ldfile.c
parent03b9ecd2c9ea9ed1fd5dbd6a1af9d55719b00132 (diff)
downloadbinutils-redhat-33240c08520befe8483f59d93a0629f282617798.tar.gz
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.c28
1 files changed, 3 insertions, 25 deletions
diff --git a/ld/ldfile.c b/ld/ldfile.c
index 96a3856e4a..c4b89120ee 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 */