/* 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.
will be needed when and if we want to bfd_create a new
one using this one as a template. */
if (bfd_check_format (entry->the_bfd, bfd_object)
- && plugin_active_plugins_p ())
+ && plugin_active_plugins_p ()
+ && !no_more_claiming)
{
int fd = open (attempt, O_RDONLY | O_BINARY);
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 */
/* If this is not an archive, try to open it in the current
directory first. */
- if (! entry->is_archive)
+ if (! entry->maybe_archive)
{
if (entry->sysrooted && IS_ABSOLUTE_PATH (entry->filename))
{
}
}
- if (entry->is_archive)
+ if (entry->maybe_archive)
string = concat (search->name, slash, lib, entry->filename,
arch, suffix, (const char *) NULL);
else
if (ldfile_try_open_bfd (entry->filename, entry))
return;
- if (strcmp (entry->filename, entry->local_sym_name) != 0)
+ if (filename_cmp (entry->filename, entry->local_sym_name) != 0)
einfo (_("%P: cannot find %s (%s): %E\n"),
entry->filename, entry->local_sym_name);
else