/* 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.
return FALSE;
}
+ /* Linker needs to decompress sections. */
+ entry->the_bfd->flags |= BFD_DECOMPRESS;
+
/* If we are searching for this file, see if the architecture is
compatible with the output file. If it isn't, keep searching.
If we can't open the file as an object file, stop the search
bfd_object that it sets the bfd's arch and mach, which
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))
+ if (bfd_check_format (entry->the_bfd, bfd_object)
+ && 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 ());
- 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 fd or the
- dummy bfd. Can't avoid speculatively creating it, alas. */
- bfd_close_all_done (file.handle);
- close (fd);
- 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
SCRIPTDIR (passed from Makefile)
(adjusted according to the current location of the binary)
- SCRIPTDIR (passed from Makefile)
the dir where this program is (for using it from the build tree). */
static char *
free (dir);
}
- if (check_for_scripts_dir (SCRIPTDIR))
- /* We've been installed normally. */
- return SCRIPTDIR;
-
/* Look for "ldscripts" in the dir where our binary is. */
dir = make_relative_prefix (program_name, ".", ".");
if (dir)