Make target_ops::has_execution take an 'inferior *' instead of a ptid_t
[deliverable/binutils-gdb.git] / binutils / arsup.c
index 5160dc47b57ba2717a6cd8a4fbbc363cb3944700..00967c972cd67a1fb83b65d4ced9858bf44defed 100644 (file)
@@ -1,12 +1,11 @@
 /* arsup.c - Archive support for MRI compatibility
 /* arsup.c - Archive support for MRI compatibility
-   Copyright 1992, 1994, 1995, 1996, 1997, 2000, 2002, 2003, 2004
-   Free Software Foundation, Inc.
+   Copyright (C) 1992-2020 Free Software Foundation, Inc.
 
    This file is part of GNU Binutils.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
    This file is part of GNU Binutils.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -16,7 +15,8 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
 
 
 /* Contributed by Steve Chamberlain
 
 
 /* Contributed by Steve Chamberlain
    This file looks after requests from arparse.y, to provide the MRI
    style librarian command syntax + 1 word LIST.  */
 
    This file looks after requests from arparse.y, to provide the MRI
    style librarian command syntax + 1 word LIST.  */
 
+#include "sysdep.h"
 #include "bfd.h"
 #include "bfd.h"
-#include "arsup.h"
 #include "libiberty.h"
 #include "libiberty.h"
-#include "bucomm.h"
 #include "filenames.h"
 #include "filenames.h"
+#include "bucomm.h"
+#include "arsup.h"
 
 static void map_over_list
   (bfd *, void (*function) (bfd *, bfd *), struct list *);
 
 static void map_over_list
   (bfd *, void (*function) (bfd *, bfd *), struct list *);
@@ -37,6 +38,11 @@ static void ar_directory_doer (bfd *, bfd *);
 static void ar_addlib_doer (bfd *, bfd *);
 
 extern int verbose;
 static void ar_addlib_doer (bfd *, bfd *);
 
 extern int verbose;
+extern int deterministic;
+
+static bfd *obfd;
+static char *real_name;
+static FILE *outfile;
 
 static void
 map_over_list (bfd *arch, void (*function) (bfd *, bfd *), struct list *list)
 
 static void
 map_over_list (bfd *arch, void (*function) (bfd *, bfd *), struct list *list)
@@ -47,10 +53,10 @@ map_over_list (bfd *arch, void (*function) (bfd *, bfd *), struct list *list)
     {
       bfd *next;
 
     {
       bfd *next;
 
-      head = arch->next;
+      head = arch->archive_next;
       while (head != NULL)
        {
       while (head != NULL)
        {
-         next = head->next;
+         next = head->archive_next;
          function (head, (bfd *) NULL);
          head = next;
        }
          function (head, (bfd *) NULL);
          head = next;
        }
@@ -69,7 +75,7 @@ map_over_list (bfd *arch, void (*function) (bfd *, bfd *), struct list *list)
          bfd_boolean found = FALSE;
          bfd *prev = arch;
 
          bfd_boolean found = FALSE;
          bfd *prev = arch;
 
-         for (head = arch->next; head; head = head->next)
+         for (head = arch->archive_next; head; head = head->archive_next)
            {
              if (head->filename != NULL
                  && FILENAME_CMP (ptr->name, head->filename) == 0)
            {
              if (head->filename != NULL
                  && FILENAME_CMP (ptr->name, head->filename) == 0)
@@ -86,12 +92,11 @@ map_over_list (bfd *arch, void (*function) (bfd *, bfd *), struct list *list)
 }
 
 
 }
 
 
-FILE *outfile;
 
 static void
 ar_directory_doer (bfd *abfd, bfd *ignore ATTRIBUTE_UNUSED)
 {
 
 static void
 ar_directory_doer (bfd *abfd, bfd *ignore ATTRIBUTE_UNUSED)
 {
-  print_arelt_descr(outfile, abfd, verbose);
+  print_arelt_descr(outfile, abfd, verbose, FALSE);
 }
 
 void
 }
 
 void
@@ -141,19 +146,23 @@ maybequit (void)
 }
 
 
 }
 
 
-bfd *obfd;
-char *real_name;
-
 void
 ar_open (char *name, int t)
 {
 void
 ar_open (char *name, int t)
 {
-  char *tname = (char *) xmalloc (strlen (name) + 10);
+  char *tname;
   const char *bname = lbasename (name);
   real_name = name;
 
   /* Prepend tmp- to the beginning, to avoid file-name clashes after
      truncation on filesystems with limited namespaces (DOS).  */
   const char *bname = lbasename (name);
   real_name = name;
 
   /* Prepend tmp- to the beginning, to avoid file-name clashes after
      truncation on filesystems with limited namespaces (DOS).  */
-  sprintf (tname, "%.*stmp-%s", (int) (bname - name), name, bname);
+  if (asprintf (&tname, "%.*stmp-%s", (int) (bname - name), name, bname) == -1)
+    {
+      fprintf (stderr, _("%s: Can't allocate memory for temp name (%s)\n"),
+              program_name, strerror(errno));
+      maybequit ();
+      return;
+    }
+
   obfd = bfd_openw (tname, NULL);
 
   if (!obfd)
   obfd = bfd_openw (tname, NULL);
 
   if (!obfd)
@@ -197,7 +206,7 @@ ar_open (char *name, int t)
          while (element)
            {
              *ptr = element;
          while (element)
            {
              *ptr = element;
-             ptr = &element->next;
+             ptr = &element->archive_next;
              element = bfd_openr_next_archived_file (ibfd, element);
            }
        }
              element = bfd_openr_next_archived_file (ibfd, element);
            }
        }
@@ -205,6 +214,7 @@ ar_open (char *name, int t)
       bfd_set_format (obfd, bfd_archive);
 
       obfd->has_armap = 1;
       bfd_set_format (obfd, bfd_archive);
 
       obfd->has_armap = 1;
+      obfd->is_thin_archive = 0;
     }
 }
 
     }
 }
 
@@ -213,9 +223,9 @@ ar_addlib_doer (bfd *abfd, bfd *prev)
 {
   /* Add this module to the output bfd.  */
   if (prev != NULL)
 {
   /* Add this module to the output bfd.  */
   if (prev != NULL)
-    prev->next = abfd->next;
+    prev->archive_next = abfd->archive_next;
 
 
-  abfd->next = obfd->archive_head;
+  abfd->archive_next = obfd->archive_head;
   obfd->archive_head = abfd;
 }
 
   obfd->archive_head = abfd;
 }
 
@@ -251,8 +261,13 @@ ar_addmod (struct list *list)
     {
       while (list)
        {
     {
       while (list)
        {
-         bfd *abfd = bfd_openr (list->name, NULL);
+         bfd *abfd;
 
 
+#if BFD_SUPPORTS_PLUGINS         
+         abfd = bfd_openr (list->name, "plugin");
+#else
+         abfd = bfd_openr (list->name, NULL);
+#endif
          if (!abfd)
            {
              fprintf (stderr, _("%s: can't open file %s\n"),
          if (!abfd)
            {
              fprintf (stderr, _("%s: can't open file %s\n"),
@@ -261,7 +276,7 @@ ar_addmod (struct list *list)
            }
          else
            {
            }
          else
            {
-             abfd->next = obfd->archive_head;
+             abfd->archive_next = obfd->archive_head;
              obfd->archive_head = abfd;
            }
          list = list->next;
              obfd->archive_head = abfd;
            }
          list = list->next;
@@ -298,13 +313,13 @@ ar_delete (struct list *list)
            {
              if (FILENAME_CMP(member->filename, list->name) == 0)
                {
            {
              if (FILENAME_CMP(member->filename, list->name) == 0)
                {
-                 *prev = member->next;
+                 *prev = member->archive_next;
                  found = 1;
                }
              else
                  found = 1;
                }
              else
-               prev = &(member->next);
+               prev = &(member->archive_next);
 
 
-             member = member->next;
+             member = member->archive_next;
            }
 
          if (!found)
            }
 
          if (!found)
@@ -331,6 +346,9 @@ ar_save (void)
     {
       char *ofilename = xstrdup (bfd_get_filename (obfd));
 
     {
       char *ofilename = xstrdup (bfd_get_filename (obfd));
 
+      if (deterministic > 0)
+        obfd->flags |= BFD_DETERMINISTIC_OUTPUT;
+
       bfd_close (obfd);
 
       smart_rename (ofilename, real_name, 0);
       bfd_close (obfd);
 
       smart_rename (ofilename, real_name, 0);
@@ -361,7 +379,7 @@ ar_replace (struct list *list)
              if (FILENAME_CMP (member->filename, list->name) == 0)
                {
                  /* Found the one to replace.  */
              if (FILENAME_CMP (member->filename, list->name) == 0)
                {
                  /* Found the one to replace.  */
-                 bfd *abfd = bfd_openr (list->name, 0);
+                 bfd *abfd = bfd_openr (list->name, NULL);
 
                  if (!abfd)
                    {
 
                  if (!abfd)
                    {
@@ -372,20 +390,20 @@ ar_replace (struct list *list)
                  else
                    {
                      *prev = abfd;
                  else
                    {
                      *prev = abfd;
-                     abfd->next = member->next;
+                     abfd->archive_next = member->archive_next;
                      found = 1;
                    }
                }
              else
                {
                      found = 1;
                    }
                }
              else
                {
-                 prev = &(member->next);
+                 prev = &(member->archive_next);
                }
                }
-             member = member->next;
+             member = member->archive_next;
            }
 
          if (!found)
            {
            }
 
          if (!found)
            {
-             bfd *abfd = bfd_openr (list->name, 0);
+             bfd *abfd = bfd_openr (list->name, NULL);
 
              fprintf (stderr,_("%s: can't find module file %s\n"),
                       program_name, list->name);
 
              fprintf (stderr,_("%s: can't find module file %s\n"),
                       program_name, list->name);
@@ -423,7 +441,7 @@ ar_list (void)
 
       for (abfd = obfd->archive_head;
           abfd != (bfd *)NULL;
 
       for (abfd = obfd->archive_head;
           abfd != (bfd *)NULL;
-          abfd = abfd->next)
+          abfd = abfd->archive_next)
        ar_directory_doer (abfd, (bfd *) NULL);
     }
 }
        ar_directory_doer (abfd, (bfd *) NULL);
     }
 }
@@ -462,12 +480,12 @@ ar_extract (struct list *list)
                  found = 1;
                }
 
                  found = 1;
                }
 
-             member = member->next;
+             member = member->archive_next;
            }
 
          if (!found)
            {
            }
 
          if (!found)
            {
-             bfd_openr (list->name, 0);
+             bfd_openr (list->name, NULL);
              fprintf (stderr, _("%s: can't find module file %s\n"),
                       program_name, list->name);
            }
              fprintf (stderr, _("%s: can't find module file %s\n"),
                       program_name, list->name);
            }
This page took 0.026906 seconds and 4 git commands to generate.