* linux-arm-low.c: Include <signal.h>.
[deliverable/binutils-gdb.git] / ld / ldfile.c
index 2695905a3cc8c6ae4969a7f094925d14ba86b513..c4b89120eeed9860e40a07e22007e218d1da652d 100644 (file)
@@ -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.
 
@@ -150,6 +151,9 @@ ldfile_try_open_bfd (const char *attempt,
       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
@@ -309,40 +313,20 @@ success:
      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 */
@@ -365,7 +349,7 @@ ldfile_open_file_search (const char *arch,
 
   /* 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))
        {
@@ -402,7 +386,7 @@ ldfile_open_file_search (const char *arch,
            }
        }
 
-      if (entry->is_archive)
+      if (entry->maybe_archive)
        string = concat (search->name, slash, lib, entry->filename,
                         arch, suffix, (const char *) NULL);
       else
@@ -438,7 +422,7 @@ ldfile_open_file (lang_input_statement_type *entry)
       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
@@ -547,7 +531,6 @@ check_for_scripts_dir (char *dir)
 
    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 *
@@ -571,10 +554,6 @@ find_scripts_dir (void)
       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)
This page took 0.023983 seconds and 4 git commands to generate.