* libbfd-in.h (struct artdata): Added tdata field.
authorIan Lance Taylor <ian@airs.com>
Mon, 3 Jan 1994 18:05:19 +0000 (18:05 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 3 Jan 1994 18:05:19 +0000 (18:05 +0000)
(_bfd_add_bfd_to_archive_cache): Declare.
(_bfd_snarf_ar_hdr): Renamed from snarf_ar_hdr.
* libbfd.h: Rebuilt.
* archive.c: Cleaned up some more.
(_bfd_generic_mkarchive, bfd_generic_archive_p): Initialize
pointer elements of artdata.
(_bfd_add_bfd_to_archive_cache): Renamed from add_bfd_to_cache.
(_bfd_snarf_ar_hdr): Renamed from snarf_ar_hdr.
(get_extended_arelt_filename, get_elt_at_filepos,
bfd_construct_extended_name_table, bfd_ar_hdr_from_filesystem,
compute_and_write_armap): Made static.
* ecoff.c: Some comment changes.
(ecoff_slurp_armap): Handle rename of snarf_ar_hdr.  Set
ardata->tdata to raw_armap.
(ecoff_archive_p): Initialize pointer elements of artdata.
* coff-rs6000.c (rs6000coff_get_elt_at_filepos): Handle rename of
add_bfd_to_cache.

bfd/ChangeLog
bfd/archive.c
bfd/ecoff.c
bfd/libbfd-in.h
bfd/libbfd.h

index 035c25f50f257f8085b5fa48dbdf45c4efbad92c..ec30ad5296184173107f024161d2ed9dd3ab0ac3 100644 (file)
@@ -1,5 +1,24 @@
 Mon Jan  3 11:41:45 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
 
+       * libbfd-in.h (struct artdata): Added tdata field.
+       (_bfd_add_bfd_to_archive_cache): Declare.
+       (_bfd_snarf_ar_hdr): Renamed from snarf_ar_hdr.
+       * libbfd.h: Rebuilt.
+       * archive.c: Cleaned up some more.
+       (_bfd_generic_mkarchive, bfd_generic_archive_p): Initialize
+       pointer elements of artdata.
+       (_bfd_add_bfd_to_archive_cache): Renamed from add_bfd_to_cache.
+       (_bfd_snarf_ar_hdr): Renamed from snarf_ar_hdr.
+       (get_extended_arelt_filename, get_elt_at_filepos,
+       bfd_construct_extended_name_table, bfd_ar_hdr_from_filesystem,
+       compute_and_write_armap): Made static.
+       * ecoff.c: Some comment changes.
+       (ecoff_slurp_armap): Handle rename of snarf_ar_hdr.  Set
+       ardata->tdata to raw_armap.
+       (ecoff_archive_p): Initialize pointer elements of artdata.
+       * coff-rs6000.c (rs6000coff_get_elt_at_filepos): Handle rename of
+       add_bfd_to_cache.
+
        * hash.c: Added some documentation.
 
 Mon Jan  3 11:09:28 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)
index 8cfdb1438eea2659b29039c6805896334b032b06..9795340e6e4a2c34ebd626aa6935820c800498f5 100644 (file)
@@ -170,28 +170,40 @@ struct ar_cache {
 #define arch_eltdata(bfd) ((struct areltdata *)((bfd)->arelt_data))
 #define arch_hdr(bfd) ((struct ar_hdr *)arch_eltdata(bfd)->arch_header)
 
-/* Forward declarations of functions */
-
-boolean
-compute_and_write_armap PARAMS ((bfd *arch, unsigned int elength));
-
-static boolean
-bsd_update_armap_timestamp PARAMS ((bfd *arch));
-
-
+static char *get_extended_arelt_filename PARAMS ((bfd *arch,
+                                                 const char *name));
+static bfd *get_elt_at_filepos PARAMS ((bfd *archive, file_ptr filepos));
+static boolean do_slurp_bsd_armap PARAMS ((bfd *abfd));
+static boolean do_slurp_coff_armap PARAMS ((bfd *abfd));
+static const char *normalize PARAMS ((const char *file));
+static boolean bfd_construct_extended_name_table PARAMS ((bfd *abfd,
+                                                         char **tabloc,
+                                                         unsigned int *));
+static struct areltdata *bfd_ar_hdr_from_filesystem PARAMS ((bfd *abfd,
+                                                            const char *));
+static boolean compute_and_write_armap PARAMS ((bfd *arch,
+                                               unsigned int elength));
+static boolean bsd_update_armap_timestamp PARAMS ((bfd *arch));
 \f
 boolean
 _bfd_generic_mkarchive (abfd)
      bfd *abfd;
 {
-  abfd->tdata.aout_ar_data = (struct artdata *)bfd_zalloc(abfd,
-                                                         sizeof (struct artdata));
+  abfd->tdata.aout_ar_data = ((struct artdata *)
+                             bfd_zalloc (abfd, sizeof (struct artdata)));
 
-  if (bfd_ardata (abfd) == NULL) {
+  if (bfd_ardata (abfd) == NULL)
+    {
       bfd_error = no_memory;
       return false;
     }
-  bfd_ardata(abfd)->cache = 0;
+
+  bfd_ardata (abfd)->cache = NULL;
+  bfd_ardata (abfd)->archive_head = NULL;
+  bfd_ardata (abfd)->symdefs = NULL;
+  bfd_ardata (abfd)->extended_names = NULL;
+  bfd_ardata (abfd)->tdata = NULL;
+
   return true;
 }
 
@@ -217,10 +229,10 @@ DESCRIPTION
 */
 
 symindex
-DEFUN(bfd_get_next_mapent,(abfd, prev, entry),
-     bfd *abfd AND
-     symindex prev AND
-     carsym **entry)
+bfd_get_next_mapent (abfd, prev, entry)
+     bfd *abfd;
+     symindex prev;
+     carsym **entry;
 {
   if (!bfd_has_map (abfd)) {
     bfd_error = invalid_operation;
@@ -265,9 +277,9 @@ DESCRIPTION
 */
 
 boolean
-DEFUN(bfd_set_archive_head,(output_archive, new_head),
-     bfd *output_archive AND 
-     bfd *new_head)
+bfd_set_archive_head (output_archive, new_head)
+     bfd *output_archive;
+     bfd *new_head;
 {
 
   output_archive->archive_head = new_head;
@@ -290,7 +302,7 @@ look_for_bfd_in_cache (arch_bfd, filepos)
 
 /* Kind of stupid to call cons for each one, but we don't do too many */
 boolean
-add_bfd_to_cache (arch_bfd, filepos, new_elt)
+_bfd_add_bfd_to_archive_cache (arch_bfd, filepos, new_elt)
      bfd *arch_bfd, *new_elt;
      file_ptr filepos;
 {
@@ -317,15 +329,14 @@ add_bfd_to_cache (arch_bfd, filepos, new_elt)
     
   return true;
 }
-
 \f
-
 /* The name begins with space.  Hence the rest of the name is an index into
    the string table. */
-char *
+
+static char *
 get_extended_arelt_filename (arch, name)
      bfd *arch;
-     char *name;
+     const char *name;
 {
   unsigned long index = 0;
 
@@ -352,7 +363,7 @@ get_extended_arelt_filename (arch, name)
 */
 
 struct areltdata *
-snarf_ar_hdr (abfd)
+_bfd_snarf_ar_hdr (abfd)
      bfd *abfd;
 {
 #ifndef errno
@@ -475,7 +486,7 @@ snarf_ar_hdr (abfd)
    element, since it handles the bookkeeping so nicely for us.
 */
 
-bfd *
+static bfd *
 get_elt_at_filepos (archive, filepos)
      bfd *archive;
      file_ptr filepos;
@@ -493,7 +504,7 @@ get_elt_at_filepos (archive, filepos)
       return NULL;
     }
 
-  if ((new_areldata = snarf_ar_hdr (archive)) == NULL)
+  if ((new_areldata = _bfd_snarf_ar_hdr (archive)) == NULL)
     return NULL;
   
   n_nfd = _bfd_create_empty_archive_element_shell (archive);
@@ -507,7 +518,7 @@ get_elt_at_filepos (archive, filepos)
   n_nfd->arelt_data = (PTR) new_areldata;
   n_nfd->filename = new_areldata->filename;
 
-  if (add_bfd_to_cache (archive, filepos, n_nfd))
+  if (_bfd_add_bfd_to_archive_cache (archive, filepos, n_nfd))
     return n_nfd;
 
   /* huh? */
@@ -530,9 +541,9 @@ DESCRIPTION
 
 */
 bfd *
-DEFUN(bfd_get_elt_at_index,(abfd, index),
-     bfd *abfd AND
-     int index)
+bfd_get_elt_at_index (abfd, index)
+     bfd *abfd;
+     int index;
 {
   bfd *result =
     get_elt_at_filepos
@@ -603,50 +614,60 @@ bfd_generic_archive_p (abfd)
 {
   char armag[SARMAG+1];
 
-  if (bfd_read ((PTR)armag, 1, SARMAG, abfd) != SARMAG) {
-    bfd_error = wrong_format;
-    return 0;
-  }
+  if (bfd_read ((PTR) armag, 1, SARMAG, abfd) != SARMAG)
+    {
+      bfd_error = wrong_format;
+      return NULL;
+    }
 
 #ifdef GNU960
-  if (strncmp (armag, BFD_GNU960_ARMAG(abfd), SARMAG)) return 0;
+  if (strncmp (armag, BFD_GNU960_ARMAG(abfd), SARMAG) != 0)
+    return 0;
 #else
-  if (strncmp (armag, ARMAG, SARMAG) &&
-      strncmp (armag, ARMAGB, SARMAG)) return 0;
+  if (strncmp (armag, ARMAG, SARMAG) != 0 &&
+      strncmp (armag, ARMAGB, SARMAG) != 0)
+    return 0;
 #endif
 
-
-
   /* We are setting bfd_ardata(abfd) here, but since bfd_ardata
      involves a cast, we can't do it as the left operand of assignment. */
-  abfd->tdata.aout_ar_data = (struct artdata *) bfd_zalloc(abfd,sizeof (struct artdata));
+  abfd->tdata.aout_ar_data = ((struct artdata *)
+                             bfd_zalloc (abfd, sizeof (struct artdata)));
 
-  if (bfd_ardata (abfd)  == NULL) {
-    bfd_error = no_memory;
-    return 0;
-  }
+  if (bfd_ardata (abfd) == NULL)
+    {
+      bfd_error = no_memory;
+      return NULL;
+    }
 
   bfd_ardata (abfd)->first_file_filepos = SARMAG;
+  bfd_ardata (abfd)->cache = NULL;
+  bfd_ardata (abfd)->archive_head = NULL;
+  bfd_ardata (abfd)->symdefs = NULL;
+  bfd_ardata (abfd)->extended_names = NULL;
+  bfd_ardata (abfd)->tdata = NULL;
   
-  if (!BFD_SEND (abfd, _bfd_slurp_armap, (abfd))) {
-    bfd_release(abfd, bfd_ardata (abfd));
-    abfd->tdata.aout_ar_data = NULL;
-    return 0;
-  }
+  if (! BFD_SEND (abfd, _bfd_slurp_armap, (abfd)))
+    {
+      bfd_release(abfd, bfd_ardata (abfd));
+      abfd->tdata.aout_ar_data = NULL;
+      return NULL;
+    }
 
-  if (!BFD_SEND (abfd, _bfd_slurp_extended_name_table, (abfd))) {
-    bfd_release(abfd, bfd_ardata (abfd));
-    abfd->tdata.aout_ar_data = NULL;
-    return 0;
-  }
+  if (! BFD_SEND (abfd, _bfd_slurp_extended_name_table, (abfd)))
+    {
+      bfd_release(abfd, bfd_ardata (abfd));
+      abfd->tdata.aout_ar_data = NULL;
+      return NULL;
+    }
   
   return abfd->xvec;
 }
 
 /* Returns false on error, true otherwise */
 static boolean
-DEFUN (do_slurp_bsd_armap, (abfd),
-       bfd *abfd)
+do_slurp_bsd_armap (abfd)
+     bfd *abfd;
 {
   struct areltdata *mapdata;
   unsigned int counter = 0;
@@ -655,8 +676,9 @@ DEFUN (do_slurp_bsd_armap, (abfd),
   char *stringbase;
   unsigned int parsed_size;
 
-  mapdata = snarf_ar_hdr (abfd);
-  if (mapdata == NULL) return false;
+  mapdata = _bfd_snarf_ar_hdr (abfd);
+  if (mapdata == NULL)
+    return false;
   parsed_size = mapdata->parsed_size;
   bfd_release (abfd, (PTR)mapdata); /* Don't need it any more. */
     
@@ -708,8 +730,8 @@ DEFUN (do_slurp_bsd_armap, (abfd),
 
 /* Returns false on error, true otherwise */
 static boolean
-DEFUN (do_slurp_coff_armap, (abfd),
-       bfd *abfd)
+do_slurp_coff_armap (abfd)
+     bfd *abfd;
 {
   struct areltdata *mapdata;
   int *raw_armap, *rawptr;
@@ -724,8 +746,9 @@ DEFUN (do_slurp_coff_armap, (abfd),
   char int_buf[sizeof(long)];
   unsigned int carsym_size, ptrsize, i;
   
-  mapdata = snarf_ar_hdr (abfd);
-  if (mapdata == NULL) return false;
+  mapdata = _bfd_snarf_ar_hdr (abfd);
+  if (mapdata == NULL)
+    return false;
   parsed_size = mapdata->parsed_size;
   bfd_release (abfd, (PTR)mapdata); /* Don't need it any more. */
 
@@ -865,8 +888,9 @@ bfd_slurp_bsd_armap_f2 (abfd)
       return true;
     }
 
-  mapdata = snarf_ar_hdr (abfd);
-  if (mapdata == NULL) return false;
+  mapdata = _bfd_snarf_ar_hdr (abfd);
+  if (mapdata == NULL)
+    return false;
 
   raw_armap = (int *) bfd_zalloc(abfd,mapdata->parsed_size);
   if (raw_armap == NULL)
@@ -952,8 +976,9 @@ _bfd_slurp_extended_name_table (abfd)
       return true;
     }
 
-    namedata = snarf_ar_hdr (abfd);
-    if (namedata == NULL) return false;
+    namedata = _bfd_snarf_ar_hdr (abfd);
+    if (namedata == NULL)
+      return false;
   
     bfd_ardata (abfd)->extended_names = bfd_zalloc(abfd,namedata->parsed_size);
     if (bfd_ardata (abfd)->extended_names == NULL) {
@@ -999,9 +1024,9 @@ _bfd_slurp_extended_name_table (abfd)
 
 /* Return a copy of the stuff in the filename between any :]> and a
    semicolon */
-static CONST char *
-DEFUN(normalize,(file),
-      CONST char *file)
+static const char *
+normalize (file)
+     const char *file;
 {
   CONST char *first;
   CONST char *last;
@@ -1031,9 +1056,9 @@ DEFUN(normalize,(file),
 }
 
 #else
-static CONST char *
-DEFUN (normalize, (file),
-       CONST char *file)
+static const char *
+normalize (file)
+     const char *file;
 {
   CONST char *    filename = strrchr(file, '/');
 
@@ -1053,11 +1078,11 @@ DEFUN (normalize, (file),
    Returns true if it ran successfully, false if something went wrong.
    A successful return may still involve a zero-length tablen!
    */
-boolean
-DEFUN (bfd_construct_extended_name_table, (abfd, tabloc, tablen),
-       bfd *abfd AND
-       char **tabloc AND
-       unsigned int *tablen)
+static boolean
+bfd_construct_extended_name_table (abfd, tabloc, tablen)
+     bfd *abfd;
+     char **tabloc;
+     unsigned int *tablen;
 {
   unsigned int maxname = abfd->xvec->ar_max_namelen;
   unsigned int total_namelen = 0;
@@ -1118,17 +1143,16 @@ DEFUN (bfd_construct_extended_name_table, (abfd, tabloc, tablen),
    The filename field of the ar_hdr will NOT be initialized
 */
 
-struct areltdata *
-DEFUN(bfd_ar_hdr_from_filesystem, (abfd,filename),
-      bfd* abfd AND
-      CONST char *filename)
+static struct areltdata *
+bfd_ar_hdr_from_filesystem (abfd,filename)
+     bfd* abfd;
+     const char *filename;
 {
   struct stat status;
   struct areltdata *ared;
   struct ar_hdr *hdr;
   char *temp, *temp1;
 
-
   if (stat (filename, &status) != 0) {
     bfd_error = system_call_error;
     return NULL;
@@ -1175,9 +1199,9 @@ DEFUN(bfd_ar_hdr_from_filesystem, (abfd,filename),
 */
 
 struct ar_hdr *
-DEFUN(bfd_special_undocumented_glue, (abfd, filename),
-      bfd *abfd AND
-      char *filename)
+bfd_special_undocumented_glue (abfd, filename)
+     bfd *abfd;
+     char *filename;
 {
   struct areltdata *ar_elt = bfd_ar_hdr_from_filesystem (abfd, filename);
   if (ar_elt == NULL)
@@ -1269,7 +1293,8 @@ bfd_bsd_truncate_arname (abfd, pathname, arhdr)
     length = maxlen;
   }
 
-  if (length < maxlen) (hdr->ar_name)[length] = ar_padchar (abfd);
+  if (length < maxlen)
+    (hdr->ar_name)[length] = ar_padchar (abfd);
 }
 
 /* Store name into ar header.  Truncates the name to fit.
@@ -1309,7 +1334,8 @@ bfd_gnu_truncate_arname (abfd, pathname, arhdr)
     length = maxlen;
   }
 
-  if (length < 16) (hdr->ar_name)[length] = ar_padchar (abfd);
+  if (length < 16)
+    (hdr->ar_name)[length] = ar_padchar (abfd);
 }
 \f
 
@@ -1455,7 +1481,7 @@ _bfd_write_archive_contents (arch)
 \f
 /* Note that the namidx for the first symbol is 0 */
 
-boolean
+static boolean
 compute_and_write_armap (arch, elength)
      bfd *arch;
      unsigned int elength;
index 511ab595a6968d5184a6e6fe7dfe210ec4586c58..fb4960afa3640d7cafbe2f19869cb008858595d6 100644 (file)
@@ -1147,7 +1147,7 @@ ecoff_get_symtab_upper_bound (abfd)
   return (bfd_get_symcount (abfd) + 1) * (sizeof (ecoff_symbol_type *));
 }
 
-/* Get the canonicals symbols.  */
+/* Get the canonical symbols.  */
 
 unsigned int
 ecoff_get_symtab (abfd, alocation)
@@ -2811,10 +2811,10 @@ ecoff_write_object_contents (abfd)
 }
 \f
 /* Archive handling.  ECOFF uses what appears to be a unique type of
-   archive header (which I call an armap).  The byte ordering of the
-   armap and the contents are encoded in the name of the armap itself.
-   At least for now, we only support archives with the same byte
-   ordering in the armap and the contents.
+   archive header (armap).  The byte ordering of the armap and the
+   contents are encoded in the name of the armap itself.  At least for
+   now, we only support archives with the same byte ordering in the
+   armap and the contents.
 
    The first four bytes in the armap are the number of symbol
    definitions.  This is always a power of two.
@@ -2830,10 +2830,6 @@ ecoff_write_object_contents (abfd)
    The symbols are hashed into the armap with a closed hashing scheme.
    See the functions below for the details of the algorithm.
 
-   We could use the hash table when looking up symbols in a library.
-   This would require a new BFD target entry point to replace the
-   bfd_get_next_mapent function used by the linker.
-
    After the symbol definitions comes four bytes holding the size of
    the string table, followed by the string table itself.  */
 
@@ -2942,7 +2938,7 @@ ecoff_slurp_armap (abfd)
 
   /* Read in the armap.  */
   ardata = bfd_ardata (abfd);
-  mapdata = snarf_ar_hdr (abfd);
+  mapdata = _bfd_snarf_ar_hdr (abfd);
   if (mapdata == (struct areltdata *) NULL)
     return false;
   parsed_size = mapdata->parsed_size;
@@ -2962,6 +2958,8 @@ ecoff_slurp_armap (abfd)
       return false;
     }
     
+  ardata->tdata = (PTR) raw_armap;
+
   count = bfd_h_get_32 (abfd, (PTR) raw_armap);
 
   ardata->symdef_count = 0;
@@ -3232,6 +3230,11 @@ ecoff_archive_p (abfd)
     }
 
   bfd_ardata (abfd)->first_file_filepos = SARMAG;
+  bfd_ardata (abfd)->cache = NULL;
+  bfd_ardata (abfd)->archive_head = NULL;
+  bfd_ardata (abfd)->symdefs = NULL;
+  bfd_ardata (abfd)->extended_names = NULL;
+  bfd_ardata (abfd)->tdata = NULL;
   
   if (ecoff_slurp_armap (abfd) == false
       || ecoff_slurp_extended_name_table (abfd) == false)
index 5ba73fe79cc9df0733252f913883036289f71c65..6e172e7f9a8c7c5f2735d0ef05bf88ecfe725d7a 100644 (file)
@@ -59,6 +59,7 @@ struct artdata {
                                   archive.  */
   file_ptr armap_datepos;      /* Position within archive to seek to
                                   rewrite the date field.  */
+  PTR tdata;                   /* Backend specific information.  */
 };
 
 #define bfd_ardata(bfd) ((bfd)->tdata.aout_ar_data)
@@ -100,8 +101,9 @@ int         bfd_stat  PARAMS ((bfd *abfd, struct stat *));
 
 bfd *  _bfd_create_empty_archive_element_shell PARAMS ((bfd *obfd));
 bfd *  look_for_bfd_in_cache PARAMS ((bfd *arch_bfd, file_ptr index));
+boolean _bfd_add_bfd_to_archive_cache PARAMS ((bfd *, file_ptr, bfd *));
 boolean        _bfd_generic_mkarchive PARAMS ((bfd *abfd));
-struct areltdata *     snarf_ar_hdr PARAMS ((bfd *abfd));
+struct areltdata *     _bfd_snarf_ar_hdr PARAMS ((bfd *abfd));
 bfd_target *           bfd_generic_archive_p PARAMS ((bfd *abfd));
 boolean        bfd_slurp_armap PARAMS ((bfd *abfd));
 boolean bfd_slurp_bsd_armap_f2 PARAMS ((bfd *abfd));
index d80c71fdcc9a844da62e89f41f50873bbd478916..458f8031835b3e53d28c15ee6baa49f73182b1c3 100644 (file)
@@ -59,6 +59,7 @@ struct artdata {
                                   archive.  */
   file_ptr armap_datepos;      /* Position within archive to seek to
                                   rewrite the date field.  */
+  PTR tdata;                   /* Backend specific information.  */
 };
 
 #define bfd_ardata(bfd) ((bfd)->tdata.aout_ar_data)
@@ -100,8 +101,9 @@ int         bfd_stat  PARAMS ((bfd *abfd, struct stat *));
 
 bfd *  _bfd_create_empty_archive_element_shell PARAMS ((bfd *obfd));
 bfd *  look_for_bfd_in_cache PARAMS ((bfd *arch_bfd, file_ptr index));
+boolean _bfd_add_bfd_to_archive_cache PARAMS ((bfd *, file_ptr, bfd *));
 boolean        _bfd_generic_mkarchive PARAMS ((bfd *abfd));
-struct areltdata *     snarf_ar_hdr PARAMS ((bfd *abfd));
+struct areltdata *     _bfd_snarf_ar_hdr PARAMS ((bfd *abfd));
 bfd_target *           bfd_generic_archive_p PARAMS ((bfd *abfd));
 boolean        bfd_slurp_armap PARAMS ((bfd *abfd));
 boolean bfd_slurp_bsd_armap_f2 PARAMS ((bfd *abfd));