PR ld/12365
[deliverable/binutils-gdb.git] / ld / ldfile.c
index 2695905a3cc8c6ae4969a7f094925d14ba86b513..96a3856e4a3aad4f7184688e2f75ed17bb22cfac 100644 (file)
@@ -150,6 +150,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,7 +312,9 @@ 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)
@@ -326,7 +331,9 @@ success:
          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 ());
+                  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.  */
@@ -337,10 +344,9 @@ success:
            }
          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.  */
+             /* 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);
-             close (fd);
              entry->claimed = FALSE;
            }
        }
@@ -365,7 +371,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 +408,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 +444,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 +553,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 +576,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.027374 seconds and 4 git commands to generate.