* core.c (memory_error), symtab.c (cplusplus_hint, decode_line_1),
[deliverable/binutils-gdb.git] / gdb / dbxread.c
index d91c67e8a03f7a34099d62987ea618f5e57e5ef0..dd81a09eedd8be34ae8790b35be458c3769cdbf0 100644 (file)
@@ -1,5 +1,5 @@
 /* Read dbx symbol tables and convert to internal format, for GDB.
-   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993
+   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994
    Free Software Foundation, Inc.
 
 This file is part of GDB.
@@ -139,6 +139,15 @@ static unsigned string_table_offset;
 static unsigned int file_string_table_offset;
 static unsigned int next_file_string_table_offset;
 
+/* .o and NLM files contain unrelocated addresses which are based at 0.  When
+   non-zero, this flag disables some of the special cases for Solaris elf+stab
+   text addresses at location 0. */
+
+static int symfile_relocatable = 0;
+\f
+/* This is the lowest text address we have yet encountered.  */
+static CORE_ADDR lowest_text_address;
+
 /* Complaints about the symbols we have encountered.  */
 
 struct complaint lbrac_complaint = 
@@ -202,6 +211,10 @@ dbx_psymtab_to_symtab PARAMS ((struct partial_symtab *));
 static void
 dbx_psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
 
+static void
+read_dbx_dynamic_symtab PARAMS ((struct section_offsets *,
+                                struct objfile *objfile));
+
 static void
 read_dbx_symtab PARAMS ((struct section_offsets *, struct objfile *,
                         CORE_ADDR, int));
@@ -400,20 +413,37 @@ record_minimal_symbol (name, address, type, objfile)
      struct objfile *objfile;
 {
   enum minimal_symbol_type ms_type;
+  int section;
 
   switch (type)
     {
-    case N_TEXT | N_EXT:  ms_type = mst_text; break;
-    case N_DATA | N_EXT:  ms_type = mst_data; break;
-    case N_BSS | N_EXT:   ms_type = mst_bss;  break;
-    case N_ABS | N_EXT:   ms_type = mst_abs;  break;
+    case N_TEXT | N_EXT:
+      ms_type = mst_text;
+      section = SECT_OFF_TEXT;
+      break;
+    case N_DATA | N_EXT:
+      ms_type = mst_data;
+      section = SECT_OFF_DATA;
+      break;
+    case N_BSS | N_EXT:
+      ms_type = mst_bss;
+      section = SECT_OFF_BSS;
+      break;
+    case N_ABS | N_EXT:
+      ms_type = mst_abs;
+      section = -1;
+      break;
 #ifdef N_SETV
-    case N_SETV | N_EXT:  ms_type = mst_data; break;
+    case N_SETV | N_EXT:
+      ms_type = mst_data;
+      section = SECT_OFF_DATA;
+      break;
     case N_SETV:
       /* I don't think this type actually exists; since a N_SETV is the result
         of going over many .o files, it doesn't make sense to have one
         file local.  */
       ms_type = mst_file_data;
+      section = SECT_OFF_DATA;
       break;
 #endif
     case N_TEXT:
@@ -421,8 +451,8 @@ record_minimal_symbol (name, address, type, objfile)
     case N_FN:
     case N_FN_SEQ:
       ms_type = mst_file_text;
+      section = SECT_OFF_TEXT;
       break;
-
     case N_DATA:
       ms_type = mst_file_data;
 
@@ -441,19 +471,29 @@ record_minimal_symbol (name, address, type, objfile)
        if (VTBL_PREFIX_P ((tempstring)))
          ms_type = mst_data;
       }
+      section = SECT_OFF_DATA;
       break;
-
     case N_BSS:
       ms_type = mst_file_bss;
+      section = SECT_OFF_BSS;
+      break;
+    default:
+      ms_type = mst_unknown;
+      section = -1;
       break;
-
-    default:      ms_type = mst_unknown; break;
   }
 
-  prim_record_minimal_symbol
+  if (ms_type == mst_file_text || ms_type == mst_text
+      && address < lowest_text_address)
+    lowest_text_address = address;
+
+  prim_record_minimal_symbol_and_info
     (obsavestring (name, strlen (name), &objfile -> symbol_obstack),
      address,
-     ms_type);
+     ms_type,
+     NULL,
+     section,
+     objfile);
 }
 \f
 /* Scan and build partial symbols for a symbol file.
@@ -476,6 +516,18 @@ dbx_symfile_read (objfile, section_offsets, mainline)
   int val;
   struct cleanup *back_to;
 
+  val = strlen (objfile->name);
+
+  /* .o and .nlm files are relocatables with text, data and bss segs based at
+     0.  This flag disables special (Solaris stabs-in-elf only) fixups for
+     symbols with a value of 0.  XXX - This is a Krock.  Solaris stabs-in-elf
+     should be fixed to determine pst->textlow without using this text seg of
+     0 fixup crap. */
+
+  if (strcmp (&objfile->name[val-2], ".o") == 0
+      || strcmp (&objfile->name[val-4], ".nlm") == 0)
+    symfile_relocatable = 1;
+
   sym_bfd = objfile->obfd;
   val = bfd_seek (objfile->obfd, DBX_SYMTAB_OFFSET (objfile), SEEK_SET);
   if (val < 0)
@@ -501,6 +553,11 @@ dbx_symfile_read (objfile, section_offsets, mainline)
                   bfd_section_vma  (sym_bfd, DBX_TEXT_SECT (objfile)),
                   bfd_section_size (sym_bfd, DBX_TEXT_SECT (objfile)));
 
+  /* Add the dynamic symbols if we are reading the main symbol table.  */
+
+  if (mainline)
+    read_dbx_dynamic_symtab (section_offsets, objfile);
+
   /* Install any minimal symbols that have been collected as the current
      minimal symbols for this objfile. */
 
@@ -817,6 +874,149 @@ free_bincl_list (objfile)
   bincls_allocated = 0;
 }
 
+/* Scan a SunOs dynamic symbol table for symbols of interest and
+   add them to the minimal symbol table.  */
+
+static void
+read_dbx_dynamic_symtab (section_offsets, objfile)
+     struct section_offsets *section_offsets;
+     struct objfile *objfile;
+{
+  bfd *abfd = objfile->obfd;
+  struct cleanup *back_to;
+  int counter;
+  long dynsym_size;
+  long dynsym_count;
+  asymbol **dynsyms;
+  asymbol **symptr;
+  arelent **relptr;
+  long dynrel_size;
+  long dynrel_count;
+  arelent **dynrels;
+  CORE_ADDR sym_value;
+
+  /* Check that the symbol file has dynamic symbols that we know about.
+     bfd_arch_unknown can happen if we are reading a sun3 symbol file
+     on a sun4 host (and vice versa) and bfd is not configured
+     --with-target=all.  This would trigger an assertion in bfd/sunos.c,
+     so we ignore the dynamic symbols in this case.  */
+  if (bfd_get_flavour (abfd) != bfd_target_aout_flavour
+      || (bfd_get_file_flags (abfd) & DYNAMIC) == 0
+      || bfd_get_arch (abfd) == bfd_arch_unknown)
+    return;
+
+  dynsym_size = bfd_get_dynamic_symtab_upper_bound (abfd);
+  if (dynsym_size < 0)
+    return;
+
+  dynsyms = (asymbol **) xmalloc (dynsym_size);
+  back_to = make_cleanup (free, dynsyms);
+
+  dynsym_count = bfd_canonicalize_dynamic_symtab (abfd, dynsyms);
+  if (dynsym_count < 0)
+    {
+      do_cleanups (back_to);
+      return;
+    }
+
+  /* Enter dynamic symbols into the minimal symbol table
+     if this is a stripped executable.  */
+  if (bfd_get_symcount (abfd) <= 0)
+    {
+      symptr = dynsyms;
+      for (counter = 0; counter < dynsym_count; counter++, symptr++)
+       {
+         asymbol *sym = *symptr;
+         asection *sec;
+         int type;
+
+         sec = bfd_get_section (sym);
+
+         /* BFD symbols are section relative.  */
+         sym_value = sym->value + sec->vma;
+
+         if (bfd_get_section_flags (abfd, sec) & SEC_CODE)
+           {
+             sym_value += ANOFFSET (section_offsets, SECT_OFF_TEXT);
+             type = N_TEXT;
+           }
+         else if (bfd_get_section_flags (abfd, sec) & SEC_DATA)
+           {
+             sym_value += ANOFFSET (section_offsets, SECT_OFF_DATA);
+             type = N_DATA;
+           }
+         else if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC)
+           {
+             sym_value += ANOFFSET (section_offsets, SECT_OFF_BSS);
+             type = N_BSS;
+           }
+         else
+           continue;
+
+         if (sym->flags & BSF_GLOBAL)
+           type |= N_EXT;
+
+         record_minimal_symbol ((char *) bfd_asymbol_name (sym), sym_value,
+                                type, objfile);
+       }
+    }
+
+  /* Symbols from shared libraries have a dynamic relocation entry
+     that points to the associated slot in the procedure linkage table.
+     We make a mininal symbol table entry with type mst_solib_trampoline
+     at the address in the procedure linkage table.  */
+  dynrel_size = bfd_get_dynamic_reloc_upper_bound (abfd);
+  if (dynrel_size < 0)
+    {
+      do_cleanups (back_to);
+      return;
+    }
+  
+  dynrels = (arelent **) xmalloc (dynrel_size);
+  make_cleanup (free, dynrels);
+
+  dynrel_count = bfd_canonicalize_dynamic_reloc (abfd, dynrels, dynsyms);
+  if (dynrel_count < 0)
+    {
+      do_cleanups (back_to);
+      return;
+    }
+
+  for (counter = 0, relptr = dynrels;
+       counter < dynrel_count;
+       counter++, relptr++)
+    {
+      arelent *rel = *relptr;
+      CORE_ADDR address = rel->address;
+
+      switch (bfd_get_arch (abfd))
+       {
+       case bfd_arch_sparc:
+         if (rel->howto->type != RELOC_JMP_SLOT)
+           continue;
+         break;
+       case bfd_arch_m68k:
+         /* `16' is the type BFD produces for a jump table relocation.  */
+         if (rel->howto->type != 16)
+           continue;
+
+         /* Adjust address in the jump table to point to
+            the start of the bsr instruction.  */
+         address -= 2;
+         break;
+       default:
+         continue;
+       }
+
+      prim_record_minimal_symbol (bfd_asymbol_name (*rel->sym_ptr_ptr),
+                                 address,
+                                 mst_solib_trampoline,
+                                 objfile);
+    }
+
+  do_cleanups (back_to);
+}
+
 /* Given pointers to an a.out symbol table in core containing dbx
    style data, setup partial_symtab's describing each source file for
    which debugging information is available.
@@ -839,9 +1039,6 @@ read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
   struct cleanup *back_to;
   bfd *abfd;
 
-  /* End of the text segment of the executable file.  */
-  CORE_ADDR end_of_text_addr;
-
   /* Current partial symtab */
   struct partial_symtab *pst;
 
@@ -880,12 +1077,7 @@ read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
 
   last_source_file = NULL;
 
-#ifdef END_OF_TEXT_DEFAULT
-  end_of_text_addr = END_OF_TEXT_DEFAULT;
-#else
-  end_of_text_addr = text_addr + section_offsets->offsets[SECT_OFF_TEXT]
-                              + text_size;     /* Relocate */
-#endif
+  lowest_text_address = (CORE_ADDR)-1;
 
   symfile_bfd = objfile->obfd; /* For next_text_symbol */
   abfd = objfile->obfd;
@@ -928,7 +1120,7 @@ read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
   if (((unsigned)bufp->n_strx + file_string_table_offset) >=           \
       DBX_STRINGTAB_SIZE (objfile)) {                                  \
     complain (&string_table_offset_complaint, symnum);                 \
-    namestring = "foo";                                                        \
+    namestring = "<bad string table offset>";                          \
   } else                                                               \
     namestring = bufp->n_strx + file_string_table_offset +             \
                 DBX_STRINGTAB (objfile)
@@ -958,7 +1150,11 @@ read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
   if (pst)
     {
       end_psymtab (pst, psymtab_include_list, includes_used,
-                  symnum * symbol_size, end_of_text_addr,
+                  symnum * symbol_size,
+                  (lowest_text_address == (CORE_ADDR)-1
+                   ? (text_addr + section_offsets->offsets[SECT_OFF_TEXT])
+                   : lowest_text_address)
+                  + text_size,
                   dependency_list, dependencies_used);
     }
 
@@ -1024,7 +1220,6 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
      CORE_ADDR capping_text;
      struct partial_symtab **dependency_list;
      int number_dependencies;
-/*     struct partial_symbol *capping_global, *capping_static;*/
 {
   int i;
   struct partial_symtab *p1;
@@ -1034,6 +1229,7 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
       LDSYMLEN(pst) = capping_symbol_offset - LDSYMOFF(pst);
   pst->texthigh = capping_text;
 
+#ifdef N_SO_ADDRESS_MAYBE_MISSING
   /* Under Solaris, the N_SO symbols always have a value of 0,
      instead of the usual address of the .o file.  Therefore,
      we have to do some tricks to fill in texthigh and textlow.
@@ -1100,6 +1296,9 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
 
   /* this test will be true if the last .o file is only data */
   if (pst->textlow == 0)
+    /* This loses if the text section really starts at address zero
+       (generally true when we are debugging a .o file, for example).
+       That is why this whole thing is inside N_SO_ADDRESS_MAYBE_MISSING.  */
     pst->textlow = pst->texthigh;
 
   /* If we know our own starting text address, then walk through all other
@@ -1119,7 +1318,7 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
   }
 
   /* End of kludge for patching Solaris textlow and texthigh.  */
-
+#endif /* N_SO_ADDRESS_MAYBE_MISSING.  */
 
   pst->n_global_syms =
     objfile->global_psymbols.next - (objfile->global_psymbols.list + pst->globals_offset);
@@ -1178,30 +1377,36 @@ end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
   free_named_symtabs (pst->filename);
 
   if (num_includes == 0
-   && number_dependencies == 0
-   && pst->n_global_syms == 0
-   && pst->n_static_syms == 0) {
-    /* Throw away this psymtab, it's empty.  We can't deallocate it, since
-       it is on the obstack, but we can forget to chain it on the list.  */
-    struct partial_symtab *prev_pst;
-
-    /* First, snip it out of the psymtab chain */
-
-    if (pst->objfile->psymtabs == pst)
-      pst->objfile->psymtabs = pst->next;
-    else
-      for (prev_pst = pst->objfile->psymtabs; prev_pst; prev_pst = pst->next)
-       if (prev_pst->next == pst)
-         prev_pst->next = pst->next;
+      && number_dependencies == 0
+      && pst->n_global_syms == 0
+      && pst->n_static_syms == 0)
+    {
+      /* Throw away this psymtab, it's empty.  We can't deallocate it, since
+        it is on the obstack, but we can forget to chain it on the list.  */
+      /* Empty psymtabs happen as a result of header files which don't have
+        any symbols in them.  There can be a lot of them.  But this check
+        is wrong, in that a psymtab with N_SLINE entries but nothing else
+        is not empty, but we don't realize that.  Fixing that without slowing
+        things down might be tricky.  */
+      struct partial_symtab *prev_pst;
+
+      /* First, snip it out of the psymtab chain */
+
+      if (pst->objfile->psymtabs == pst)
+       pst->objfile->psymtabs = pst->next;
+      else
+       for (prev_pst = pst->objfile->psymtabs; prev_pst; prev_pst = pst->next)
+         if (prev_pst->next == pst)
+           prev_pst->next = pst->next;
 
-    /* Next, put it on a free list for recycling */
+      /* Next, put it on a free list for recycling */
 
-    pst->next = pst->objfile->free_psymtabs;
-    pst->objfile->free_psymtabs = pst;
+      pst->next = pst->objfile->free_psymtabs;
+      pst->objfile->free_psymtabs = pst;
 
-    /* Indicate that psymtab was thrown away.  */
-    pst = (struct partial_symtab *)NULL;
-  }
+      /* Indicate that psymtab was thrown away.  */
+      pst = (struct partial_symtab *)NULL;
+    }
   return pst;
 }
 \f
@@ -1358,10 +1563,16 @@ read_ofile_symtab (pst)
       processing_gcc_compilation = 0;
       if (bufp->n_type == N_TEXT)
        {
+         const char *tempstring = namestring;
+
          if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
            processing_gcc_compilation = 1;
          else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
            processing_gcc_compilation = 2;
+         if (tempstring[0] == bfd_get_symbol_leading_char (symfile_bfd))
+           ++tempstring;
+         if (STREQN (tempstring, "__gnu_compiled", 14))
+           processing_gcc_compilation = 2;
        }
 
       /* Try to select a C++ demangling based on the compilation unit
@@ -1513,12 +1724,15 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
      N_STSYM or N_GSYM for SunOS4 acc; N_FUN for other compilers.  */
   static int function_stab_type = 0;
 
-  /* This is true for Solaris (and all other stabs-in-elf systems, hopefully,
-     since it would be silly to do things differently from Solaris), and
-     false for SunOS4 and other a.out file formats.  */
+  /* This is true for Solaris (and all other systems which put stabs
+     in sections, hopefully, since it would be silly to do things
+     differently from Solaris), and false for SunOS4 and other a.out
+     file formats.  */
   block_address_function_relative =
-    (0 == strncmp (bfd_get_target (objfile->obfd), "elf", 3))
-     || (0 == strncmp (bfd_get_target (objfile->obfd), "som", 3));
+    ((0 == strncmp (bfd_get_target (objfile->obfd), "elf", 3))
+     || (0 == strncmp (bfd_get_target (objfile->obfd), "som", 3))
+     || (0 == strncmp (bfd_get_target (objfile->obfd), "coff", 4))
+     || (0 == strncmp (bfd_get_target (objfile->obfd), "nlm", 3)));
 
   if (!block_address_function_relative)
     /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
@@ -1753,21 +1967,30 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
        call level, which we really don't want to do).  */
       {
        char *p;
-       p = strchr (name, ':');
-       if (p != 0 && p[1] == 'S')
+
+       /* .o files and NLMs have non-zero text seg offsets, but don't need
+          their static syms offset in this fashion.  XXX - This is really a
+          crock that should be fixed in the solib handling code so that I
+          don't have to work around it here. */
+
+       if (!symfile_relocatable)
          {
-           /* The linker relocated it.  We don't want to add an
-              elfstab_offset_sections-type offset, but we *do* want
-              to add whatever solib.c passed to symbol_file_add as
-              addr (this is known to affect SunOS4, and I suspect ELF
-              too).  Since elfstab_offset_sections currently does not
-              muck with the text offset (there is no Ttext.text
-              symbol), we can get addr from the text offset.  If
-              elfstab_offset_sections ever starts dealing with the
-              text offset, and we still need to do this, we need to
-              invent a SECT_OFF_ADDR_KLUDGE or something.  */
-           valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
-           goto define_a_symbol;
+           p = strchr (name, ':');
+           if (p != 0 && p[1] == 'S')
+             {
+               /* The linker relocated it.  We don't want to add an
+                  elfstab_offset_sections-type offset, but we *do* want
+                  to add whatever solib.c passed to symbol_file_add as
+                  addr (this is known to affect SunOS4, and I suspect ELF
+                  too).  Since elfstab_offset_sections currently does not
+                  muck with the text offset (there is no Ttext.text
+                  symbol), we can get addr from the text offset.  If
+                  elfstab_offset_sections ever starts dealing with the
+                  text offset, and we still need to do this, we need to
+                  invent a SECT_OFF_ADDR_KLUDGE or something.  */
+               valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
+               goto define_a_symbol;
+             }
          }
        /* Since it's not the kludge case, re-dispatch to the right handler. */
        switch (type) {
@@ -1813,8 +2036,7 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
     case N_NBBSS:
     case N_NBSTS:
     case N_NBLCS:
-      complain (&unknown_symtype_complaint,
-               local_hex_string((unsigned long) type));
+      complain (&unknown_symtype_complaint, local_hex_string (type));
       /* FALLTHROUGH */
 
     /* The following symbol types don't need the address field relocated,
@@ -2115,6 +2337,89 @@ elfstab_build_psymtabs (objfile, section_offsets, mainline,
   dbx_symfile_read (objfile, section_offsets, 0);
 }
 \f
+/* Scan and build partial symbols for a file with special sections for stabs
+   and stabstrings.  The file has already been processed to get its minimal
+   symbols, and any other symbols that might be necessary to resolve GSYMs.
+
+   This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
+   rolled into one.
+
+   OBJFILE is the object file we are reading symbols from.
+   ADDR is the address relative to which the symbols are (e.g. the base address
+       of the text segment).
+   MAINLINE is true if we are reading the main symbol table (as opposed to a
+           shared lib or dynamically loaded file).
+   STAB_NAME is the name of the section that contains the stabs.
+   STABSTR_NAME is the name of the section that contains the stab strings.
+
+   This routine is mostly copied from dbx_symfile_init and dbx_symfile_read. */
+
+void
+stabsect_build_psymtabs (objfile, section_offsets, mainline, stab_name,
+                        stabstr_name)
+     struct objfile *objfile;
+     struct section_offsets *section_offsets;
+     int mainline;
+     char *stab_name;
+     char *stabstr_name;
+{
+  int val;
+  bfd *sym_bfd = objfile->obfd;
+  char *name = bfd_get_filename (sym_bfd);
+  asection *stabsect;
+  asection *stabstrsect;
+
+  stabsect = bfd_get_section_by_name (sym_bfd, stab_name);
+  stabstrsect = bfd_get_section_by_name (sym_bfd, stabstr_name);
+
+  if (!stabsect)
+    return;
+
+  if (!stabstrsect)
+    error ("stabsect_build_psymtabs:  Found stabs (%s), but not string section (%s)",
+          stab_name, stabstr_name);
+
+  DBX_SYMFILE_INFO (objfile) = (PTR) xmalloc (sizeof (struct dbx_symfile_info));
+  memset (DBX_SYMFILE_INFO (objfile), 0, sizeof (struct dbx_symfile_info));
+
+  DBX_TEXT_SECT (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
+  if (!DBX_TEXT_SECT (objfile))
+    error ("Can't find .text section in symbol file");
+
+  DBX_SYMBOL_SIZE    (objfile) = sizeof (struct external_nlist);
+  DBX_SYMCOUNT       (objfile) = bfd_section_size (sym_bfd, stabsect)
+    / DBX_SYMBOL_SIZE (objfile);
+  DBX_STRINGTAB_SIZE (objfile) = bfd_section_size (sym_bfd, stabstrsect);
+  DBX_SYMTAB_OFFSET  (objfile) = stabsect->filepos; /* XXX - FIXME: POKING INSIDE BFD DATA STRUCTURES */
+  
+  if (DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
+    error ("ridiculous string table size: %d bytes", DBX_STRINGTAB_SIZE (objfile));
+  DBX_STRINGTAB (objfile) = (char *)
+    obstack_alloc (&objfile->psymbol_obstack, DBX_STRINGTAB_SIZE (objfile) + 1);
+
+  /* Now read in the string table in one big gulp.  */
+
+  val = bfd_get_section_contents (sym_bfd, /* bfd */
+                                 stabstrsect, /* bfd section */
+                                 DBX_STRINGTAB (objfile), /* input buffer */
+                                 0, /* offset into section */
+                                 DBX_STRINGTAB_SIZE (objfile)); /* amount to read */
+
+  if (!val)
+    perror_with_name (name);
+
+  stabsread_new_init ();
+  buildsym_new_init ();
+  free_header_files ();
+  init_header_files ();
+  install_minimal_symbols (objfile);
+
+  /* Now, do an incremental load */
+
+  processing_acc_compilation = 1;
+  dbx_symfile_read (objfile, section_offsets, 0);
+}
+\f
 /* Scan and build partial symbols for a PA symbol file.
    This PA file has already been processed to get its minimal symbols.
 
This page took 0.030225 seconds and 4 git commands to generate.