Don't emit symbols seen only in dynamic object, don't read duplicate
[deliverable/binutils-gdb.git] / gdb / xcoffread.c
index 645bd4d225258856d1f4d0b9367d5ec3260976dd..915bb1c85a3d6da1cfb6aced7ecc4636cc172cf3 100644 (file)
@@ -1,5 +1,5 @@
 /* Read AIX xcoff symbol tables and convert to internal format, for GDB.
-   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+   Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
    1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
    Free Software Foundation, Inc.
    Derived from coffread.c, dbxread.c, and a lot of hacking.
@@ -19,8 +19,8 @@
 
    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.  */
 
 #include "defs.h"
 #include "bfd.h"
@@ -154,21 +154,21 @@ struct coff_symfile_info
 static void
 bf_notfound_complaint (void)
 {
-  complaint (&symfile_complaints, "line numbers off, `.bf' symbol not found");
+  complaint (&symfile_complaints, _("line numbers off, `.bf' symbol not found"));
 }
 
 static void
 ef_complaint (int arg1)
 {
   complaint (&symfile_complaints,
-            "Mismatched .ef symbol ignored starting at symnum %d", arg1);
+            _("Mismatched .ef symbol ignored starting at symnum %d"), arg1);
 }
 
 static void
 eb_complaint (int arg1)
 {
   complaint (&symfile_complaints,
-            "Mismatched .eb symbol ignored starting at symnum %d", arg1);
+            _("Mismatched .eb symbol ignored starting at symnum %d"), arg1);
 }
 
 static void xcoff_initial_scan (struct objfile *, int);
@@ -490,7 +490,7 @@ record_include_begin (struct coff_symbol *cs)
       /* This can happen with old versions of GCC.
          GCC 2.3.3-930426 does not exhibit this on a test case which
          a user said produced the message for him.  */
-      complaint (&symfile_complaints, "Nested C_BINCL symbols");
+      complaint (&symfile_complaints, _("Nested C_BINCL symbols"));
     }
   ++inclDepth;
 
@@ -507,7 +507,7 @@ record_include_end (struct coff_symbol *cs)
 
   if (inclDepth == 0)
     {
-      complaint (&symfile_complaints, "Mismatched C_BINCL/C_EINCL pair");
+      complaint (&symfile_complaints, _("Mismatched C_BINCL/C_EINCL pair"));
     }
 
   allocate_include_entry ();
@@ -553,7 +553,7 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
 {
   int offset, ii;
   file_ptr max_offset =
-  ((struct coff_symfile_info *) this_symtab_psymtab->objfile->sym_private)
+  ((struct coff_symfile_info *) this_symtab_psymtab->objfile->deprecated_sym_private)
   ->max_lineno_offset;
 
   /* subfile structure for the main compilation unit.  */
@@ -762,7 +762,7 @@ enter_line_range (struct subfile *subfile, unsigned beginoffset, unsigned endoff
     return;
   curoffset = beginoffset;
   limit_offset =
-    ((struct coff_symfile_info *) this_symtab_psymtab->objfile->sym_private)
+    ((struct coff_symfile_info *) this_symtab_psymtab->objfile->deprecated_sym_private)
     ->max_lineno_offset;
 
   if (endoffset != 0)
@@ -770,7 +770,7 @@ enter_line_range (struct subfile *subfile, unsigned beginoffset, unsigned endoff
       if (endoffset >= limit_offset)
        {
          complaint (&symfile_complaints,
-                    "Bad line table offset in C_EINCL directive");
+                    _("Bad line table offset in C_EINCL directive"));
          return;
        }
       limit_offset = endoffset;
@@ -868,12 +868,13 @@ xcoff_next_symbol_text (struct objfile *objfile)
   struct internal_syment symbol;
   char *retval;
   /* FIXME: is this the same as the passed arg? */
-  objfile = this_symtab_psymtab->objfile;
+  if (this_symtab_psymtab)
+    objfile = this_symtab_psymtab->objfile;
 
   bfd_coff_swap_sym_in (objfile->obfd, raw_symbol, &symbol);
   if (symbol.n_zeroes)
     {
-      complaint (&symfile_complaints, "Unexpected symbol continuation");
+      complaint (&symfile_complaints, _("Unexpected symbol continuation"));
 
       /* Return something which points to '\0' and hope the symbol reading
          code does something reasonable.  */
@@ -882,7 +883,7 @@ xcoff_next_symbol_text (struct objfile *objfile)
   else if (symbol.n_sclass & 0x80)
     {
       retval =
-       ((struct coff_symfile_info *) objfile->sym_private)->debugsec
+       ((struct coff_symfile_info *) objfile->deprecated_sym_private)->debugsec
        + symbol.n_offset;
       raw_symbol +=
        coff_data (objfile->obfd)->local_symesz;
@@ -890,7 +891,7 @@ xcoff_next_symbol_text (struct objfile *objfile)
     }
   else
     {
-      complaint (&symfile_complaints, "Unexpected symbol continuation");
+      complaint (&symfile_complaints, _("Unexpected symbol continuation"));
 
       /* Return something which points to '\0' and hope the symbol reading
          code does something reasonable.  */
@@ -907,9 +908,9 @@ read_xcoff_symtab (struct partial_symtab *pst)
   struct objfile *objfile = pst->objfile;
   bfd *abfd = objfile->obfd;
   char *raw_auxptr;            /* Pointer to first raw aux entry for sym */
-  char *strtbl = ((struct coff_symfile_info *) objfile->sym_private)->strtbl;
+  char *strtbl = ((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl;
   char *debugsec =
-  ((struct coff_symfile_info *) objfile->sym_private)->debugsec;
+  ((struct coff_symfile_info *) objfile->deprecated_sym_private)->debugsec;
   char *debugfmt = bfd_xcoff_is_xcoff64 (abfd) ? "XCOFF64" : "XCOFF";
 
   struct internal_syment symbol[1];
@@ -924,7 +925,7 @@ read_xcoff_symtab (struct partial_symtab *pst)
   int depth = 0;
   int fcn_start_addr = 0;
 
-  struct coff_symbol fcn_stab_saved;
+  struct coff_symbol fcn_stab_saved = { 0 };
 
   /* fcn_cs_saved is global because process_xcoff_symbol needs it. */
   union internal_auxent fcn_aux_saved;
@@ -955,7 +956,7 @@ read_xcoff_symtab (struct partial_symtab *pst)
   first_object_file_end = 0;
 
   raw_symbol =
-    ((struct coff_symfile_info *) objfile->sym_private)->symtbl
+    ((struct coff_symfile_info *) objfile->deprecated_sym_private)->symtbl
     + symnum * local_symesz;
 
   while (symnum < max_symnum)
@@ -1332,7 +1333,7 @@ read_xcoff_symtab (struct partial_symtab *pst)
        case C_UNTAG:
        case C_ENTAG:
          {
-           complaint (&symfile_complaints, "Unrecognized storage class %d.",
+           complaint (&symfile_complaints, _("Unrecognized storage class %d."),
                       cs->c_sclass);
          }
          break;
@@ -1519,7 +1520,7 @@ process_xcoff_symbol (struct coff_symbol *cs, struct objfile *objfile)
          break;
 
        default:
-         complaint (&symfile_complaints, "Unexpected storage class: %d",
+         complaint (&symfile_complaints, _("Unexpected storage class: %d"),
                     cs->c_sclass);
          /* FALLTHROUGH */
 
@@ -1581,7 +1582,7 @@ coff_getfilename (union internal_auxent *aux_entry, struct objfile *objfile)
 
   if (aux_entry->x_file.x_n.x_zeroes == 0)
     strcpy (buffer,
-           ((struct coff_symfile_info *) objfile->sym_private)->strtbl
+           ((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl
            + aux_entry->x_file.x_n.x_offset);
   else
     {
@@ -1596,14 +1597,12 @@ static void
 read_symbol (struct internal_syment *symbol, int symno)
 {
   int nsyms =
-  ((struct coff_symfile_info *) this_symtab_psymtab->objfile->sym_private)
-  ->symtbl_num_syms;
+  ((struct coff_symfile_info *) this_symtab_psymtab->objfile->deprecated_sym_private)->symtbl_num_syms;
   char *stbl =
-  ((struct coff_symfile_info *) this_symtab_psymtab->objfile->sym_private)
-  ->symtbl;
+  ((struct coff_symfile_info *) this_symtab_psymtab->objfile->deprecated_sym_private)->symtbl;
   if (symno < 0 || symno >= nsyms)
     {
-      complaint (&symfile_complaints, "Invalid symbol offset");
+      complaint (&symfile_complaints, _("Invalid symbol offset"));
       symbol->n_value = 0;
       symbol->n_scnum = -1;
       return;
@@ -1635,7 +1634,7 @@ read_symbol_lineno (int symno)
   int xcoff64 = bfd_xcoff_is_xcoff64 (objfile->obfd);
 
   struct coff_symfile_info *info =
-    (struct coff_symfile_info *)objfile->sym_private;
+    (struct coff_symfile_info *)objfile->deprecated_sym_private;
   int nsyms = info->symtbl_num_syms;
   char *stbl = info->symtbl;
   char *strtbl = info->strtbl;
@@ -1838,8 +1837,7 @@ static void
 xcoff_symfile_init (struct objfile *objfile)
 {
   /* Allocate struct to keep track of the symfile */
-  objfile->sym_private = xmmalloc (objfile->md,
-                                  sizeof (struct coff_symfile_info));
+  objfile->deprecated_sym_private = xmalloc (sizeof (struct coff_symfile_info));
 
   /* XCOFF objects may be reordered, so set OBJF_REORDERED.  If we
      find this causes a significant slowdown in gdb then we could
@@ -1857,9 +1855,9 @@ xcoff_symfile_init (struct objfile *objfile)
 static void
 xcoff_symfile_finish (struct objfile *objfile)
 {
-  if (objfile->sym_private != NULL)
+  if (objfile->deprecated_sym_private != NULL)
     {
-      xmfree (objfile->md, objfile->sym_private);
+      xfree (objfile->deprecated_sym_private);
     }
 
   /* Start with a fresh include table for the next objfile.  */
@@ -1880,10 +1878,10 @@ init_stringtab (bfd *abfd, file_ptr offset, struct objfile *objfile)
   unsigned char lengthbuf[4];
   char *strtbl;
 
-  ((struct coff_symfile_info *) objfile->sym_private)->strtbl = NULL;
+  ((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl = NULL;
 
   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
-    error ("cannot seek to string table in %s: %s",
+    error (_("cannot seek to string table in %s: %s"),
           bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
 
   val = bfd_bread ((char *) lengthbuf, sizeof lengthbuf, abfd);
@@ -1899,7 +1897,7 @@ init_stringtab (bfd *abfd, file_ptr offset, struct objfile *objfile)
      as long as we have its symbol table around. */
 
   strtbl = (char *) obstack_alloc (&objfile->objfile_obstack, length);
-  ((struct coff_symfile_info *) objfile->sym_private)->strtbl = strtbl;
+  ((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl = strtbl;
 
   /* Copy length buffer, the first byte is usually zero and is
      used for stabs with a name length of zero.  */
@@ -1910,10 +1908,10 @@ init_stringtab (bfd *abfd, file_ptr offset, struct objfile *objfile)
   val = bfd_bread (strtbl + sizeof lengthbuf, length - sizeof lengthbuf, abfd);
 
   if (val != length - sizeof lengthbuf)
-    error ("cannot read string table from %s: %s",
+    error (_("cannot read string table from %s: %s"),
           bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
   if (strtbl[length - 1] != '\0')
-    error ("bad symbol file: string table does not end with null character");
+    error (_("bad symbol file: string table does not end with null character"));
 
   return;
 }
@@ -2094,12 +2092,12 @@ swap_sym (struct internal_syment *symbol, union internal_auxent *aux,
     }
   else if (symbol->n_sclass & 0x80)
     {
-      *name = ((struct coff_symfile_info *) objfile->sym_private)->debugsec
+      *name = ((struct coff_symfile_info *) objfile->deprecated_sym_private)->debugsec
        + symbol->n_offset;
     }
   else
     {
-      *name = ((struct coff_symfile_info *) objfile->sym_private)->strtbl
+      *name = ((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl
        + symbol->n_offset;
     }
   ++*symnump;
@@ -2118,7 +2116,7 @@ static void
 function_outside_compilation_unit_complaint (const char *arg1)
 {
   complaint (&symfile_complaints,
-            "function `%s' appears to be defined outside of all compilation units",
+            _("function `%s' appears to be defined outside of all compilation units"),
             arg1);
 }
 
@@ -2173,9 +2171,10 @@ scan_xcoff_symtab (struct objfile *objfile)
   last_source_file = NULL;
 
   abfd = objfile->obfd;
+  next_symbol_text_func = xcoff_next_symbol_text;
 
-  sraw_symbol = ((struct coff_symfile_info *) objfile->sym_private)->symtbl;
-  nsyms = ((struct coff_symfile_info *) objfile->sym_private)->symtbl_num_syms;
+  sraw_symbol = ((struct coff_symfile_info *) objfile->deprecated_sym_private)->symtbl;
+  nsyms = ((struct coff_symfile_info *) objfile->deprecated_sym_private)->symtbl_num_syms;
   ssymnum = 0;
   while (ssymnum < nsyms)
     {
@@ -2295,7 +2294,7 @@ scan_xcoff_symtab (struct objfile *objfile)
 
                  case XMC_TC0:
                    if (toc_offset)
-                     warning ("More than one XMC_TC0 symbol found.");
+                     warning (_("More than one XMC_TC0 symbol found."));
                    toc_offset = symbol.n_value;
 
                    /* Make TOC offset relative to start address of section.  */
@@ -2448,7 +2447,7 @@ scan_xcoff_symtab (struct objfile *objfile)
        default:
          {
            complaint (&symfile_complaints,
-                      "Storage class %d not recognized during scan", sclass);
+                      _("Storage class %d not recognized during scan"), sclass);
          }
          /* FALLTHROUGH */
 
@@ -2803,7 +2802,7 @@ scan_xcoff_symtab (struct objfile *objfile)
                   a backslash.  */
 
                complaint (&symfile_complaints,
-                          "unknown symbol descriptor `%c'", p[1]);
+                          _("unknown symbol descriptor `%c'"), p[1]);
 
                /* Ignore it; perhaps it is an extension that we don't
                   know about.  */
@@ -2824,7 +2823,7 @@ scan_xcoff_symtab (struct objfile *objfile)
      If no XMC_TC0 is found, toc_offset should be zero. Another place to obtain
      this information would be file auxiliary header. */
 
-  ((struct coff_symfile_info *) objfile->sym_private)->toc_offset = toc_offset;
+  ((struct coff_symfile_info *) objfile->deprecated_sym_private)->toc_offset = toc_offset;
 }
 
 /* Return the toc offset value for a given objfile.  */
@@ -2833,7 +2832,7 @@ CORE_ADDR
 get_toc_offset (struct objfile *objfile)
 {
   if (objfile)
-    return ((struct coff_symfile_info *) objfile->sym_private)->toc_offset;
+    return ((struct coff_symfile_info *) objfile->deprecated_sym_private)->toc_offset;
   return 0;
 }
 
@@ -2860,7 +2859,7 @@ xcoff_initial_scan (struct objfile *objfile, int mainline)
   char *name;
   unsigned int size;
 
-  info = (struct coff_symfile_info *) objfile->sym_private;
+  info = (struct coff_symfile_info *) objfile->deprecated_sym_private;
   symfile_bfd = abfd = objfile->obfd;
   name = objfile->name;
 
@@ -2896,12 +2895,12 @@ xcoff_initial_scan (struct objfile *objfile, int mainline)
                if (!bfd_get_section_contents (abfd, secp, debugsec,
                                               (file_ptr) 0, length))
                  {
-                   error ("Error reading .debug section of `%s': %s",
+                   error (_("Error reading .debug section of `%s': %s"),
                           name, bfd_errmsg (bfd_get_error ()));
                  }
              }
          }
-       ((struct coff_symfile_info *) objfile->sym_private)->debugsec =
+       ((struct coff_symfile_info *) objfile->deprecated_sym_private)->debugsec =
          debugsec;
       }
     }
@@ -2910,18 +2909,18 @@ xcoff_initial_scan (struct objfile *objfile, int mainline)
      access them randomly in read_symbol*.  */
   val = bfd_seek (abfd, symtab_offset, SEEK_SET);
   if (val < 0)
-    error ("Error reading symbols from %s: %s",
+    error (_("Error reading symbols from %s: %s"),
           name, bfd_errmsg (bfd_get_error ()));
   size = coff_data (abfd)->local_symesz * num_symbols;
-  ((struct coff_symfile_info *) objfile->sym_private)->symtbl =
+  ((struct coff_symfile_info *) objfile->deprecated_sym_private)->symtbl =
     obstack_alloc (&objfile->objfile_obstack, size);
-  ((struct coff_symfile_info *) objfile->sym_private)->symtbl_num_syms =
+  ((struct coff_symfile_info *) objfile->deprecated_sym_private)->symtbl_num_syms =
     num_symbols;
 
-  val = bfd_bread (((struct coff_symfile_info *) objfile->sym_private)->symtbl,
+  val = bfd_bread (((struct coff_symfile_info *) objfile->deprecated_sym_private)->symtbl,
                   size, abfd);
   if (val != size)
-    perror_with_name ("reading symbol table");
+    perror_with_name (_("reading symbol table"));
 
   /* If we are reinitializing, or if we have never loaded syms yet, init */
   if (mainline
This page took 0.04606 seconds and 4 git commands to generate.