* linux-arm-low.c: Include <signal.h>.
[deliverable/binutils-gdb.git] / ld / ldfile.c
index 1732885fccecbdaaf65f8ee1419046b5a8f9aabd..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
This page took 0.024079 seconds and 4 git commands to generate.