gdb: check for partial symtab presence in dwarf2_initialize_objfile
[deliverable/binutils-gdb.git] / binutils / binemul.c
index 2931bdac799b1511c6212fd0b2f8b0619b6df048..7c71b5b78c1a25116862696b7dee536f377e1c7d 100644 (file)
@@ -1,5 +1,5 @@
 /* Binutils emulation layer.
 /* Binutils emulation layer.
-   Copyright 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 2002-2020 Free Software Foundation, Inc.
    Written by Tom Rix, Red Hat Inc.
 
    This file is part of GNU Binutils.
    Written by Tom Rix, Red Hat Inc.
 
    This file is part of GNU Binutils.
@@ -39,20 +39,27 @@ ar_emul_default_usage (FILE *fp)
 }
 
 bfd_boolean
 }
 
 bfd_boolean
-ar_emul_append (bfd **after_bfd, char *file_name, bfd_boolean verbose,
-                bfd_boolean flatten)
+ar_emul_append (bfd **after_bfd, char *file_name, const char *target,
+               bfd_boolean verbose, bfd_boolean flatten)
 {
   if (bin_dummy_emulation.ar_append)
 {
   if (bin_dummy_emulation.ar_append)
-    return bin_dummy_emulation.ar_append (after_bfd, file_name, verbose,
-                                          flatten);
+    return bin_dummy_emulation.ar_append (after_bfd, file_name, target,
+                                         verbose, flatten);
 
   return FALSE;
 }
 
 static bfd_boolean
 
   return FALSE;
 }
 
 static bfd_boolean
-do_ar_emul_default_append (bfd **after_bfd, bfd *new_bfd,
-                       bfd_boolean verbose, bfd_boolean flatten)
-  {
+any_ok (bfd *new_bfd ATTRIBUTE_UNUSED)
+{
+  return TRUE;
+}
+
+bfd_boolean
+do_ar_emul_append (bfd **after_bfd, bfd *new_bfd,
+                  bfd_boolean verbose, bfd_boolean flatten,
+                  bfd_boolean (*check) (bfd *))
+{
   /* When flattening, add the members of an archive instead of the
      archive itself.  */
   if (flatten && bfd_check_format (new_bfd, bfd_archive))
   /* When flattening, add the members of an archive instead of the
      archive itself.  */
   if (flatten && bfd_check_format (new_bfd, bfd_archive))
@@ -64,7 +71,7 @@ do_ar_emul_default_append (bfd **after_bfd, bfd *new_bfd,
            elt;
            elt = bfd_openr_next_archived_file (new_bfd, elt))
         {
            elt;
            elt = bfd_openr_next_archived_file (new_bfd, elt))
         {
-          if (do_ar_emul_default_append (after_bfd, elt, verbose, TRUE))
+          if (do_ar_emul_append (after_bfd, elt, verbose, TRUE, check))
             {
               added = TRUE;
               after_bfd = &((*after_bfd)->archive_next);
             {
               added = TRUE;
               after_bfd = &((*after_bfd)->archive_next);
@@ -74,7 +81,10 @@ do_ar_emul_default_append (bfd **after_bfd, bfd *new_bfd,
       return added;
     }
 
       return added;
     }
 
-  AR_EMUL_APPEND_PRINT_VERBOSE (verbose, new_bfd->filename);
+  if (!check (new_bfd))
+    return FALSE;
+
+  AR_EMUL_APPEND_PRINT_VERBOSE (verbose, bfd_get_filename (new_bfd));
 
   new_bfd->archive_next = *after_bfd;
   *after_bfd = new_bfd;
 
   new_bfd->archive_next = *after_bfd;
   *after_bfd = new_bfd;
@@ -84,37 +94,40 @@ do_ar_emul_default_append (bfd **after_bfd, bfd *new_bfd,
 
 bfd_boolean
 ar_emul_default_append (bfd **after_bfd, char *file_name,
 
 bfd_boolean
 ar_emul_default_append (bfd **after_bfd, char *file_name,
-                       bfd_boolean verbose, bfd_boolean flatten)
+                       const char *target, bfd_boolean verbose,
+                       bfd_boolean flatten)
 {
   bfd *new_bfd;
 
 {
   bfd *new_bfd;
 
-  new_bfd = bfd_openr (file_name, NULL);
+  new_bfd = bfd_openr (file_name, target);
   AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
   AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
-  return do_ar_emul_default_append (after_bfd, new_bfd, verbose, flatten);
+  return do_ar_emul_append (after_bfd, new_bfd, verbose, flatten, any_ok);
 }
 
 bfd_boolean
 }
 
 bfd_boolean
-ar_emul_replace (bfd **after_bfd, char *file_name, bfd_boolean verbose)
+ar_emul_replace (bfd **after_bfd, char *file_name, const char *target,
+                bfd_boolean verbose)
 {
   if (bin_dummy_emulation.ar_replace)
 {
   if (bin_dummy_emulation.ar_replace)
-    return bin_dummy_emulation.ar_replace (after_bfd, file_name, verbose);
+    return bin_dummy_emulation.ar_replace (after_bfd, file_name,
+                                          target, verbose);
 
   return FALSE;
 }
 
 bfd_boolean
 ar_emul_default_replace (bfd **after_bfd, char *file_name,
 
   return FALSE;
 }
 
 bfd_boolean
 ar_emul_default_replace (bfd **after_bfd, char *file_name,
-                        bfd_boolean verbose)
+                        const char *target, bfd_boolean verbose)
 {
 {
-  bfd *temp;
+  bfd *new_bfd;
 
 
-  temp = *after_bfd;
-  *after_bfd = bfd_openr (file_name, NULL);
+  new_bfd = bfd_openr (file_name, target);
+  AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
 
 
-  AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name);
   AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name);
 
   AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name);
 
-  (*after_bfd)->archive_next = temp;
+  new_bfd->archive_next = *after_bfd;
+  *after_bfd = new_bfd;
 
   return TRUE;
 }
 
   return TRUE;
 }
This page took 0.036755 seconds and 4 git commands to generate.