Home | History | Annotate | Line # | Download | only in gdb
dbxread.c revision 1.9
      1 /* Read dbx symbol tables and convert to internal format, for GDB.
      2    Copyright (C) 1986-2020 Free Software Foundation, Inc.
      3 
      4    This file is part of GDB.
      5 
      6    This program is free software; you can redistribute it and/or modify
      7    it under the terms of the GNU General Public License as published by
      8    the Free Software Foundation; either version 3 of the License, or
      9    (at your option) any later version.
     10 
     11    This program is distributed in the hope that it will be useful,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14    GNU General Public License for more details.
     15 
     16    You should have received a copy of the GNU General Public License
     17    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     18 
     19 /* This module provides three functions: dbx_symfile_init,
     20    which initializes to read a symbol file; dbx_new_init, which
     21    discards existing cached information when all symbols are being
     22    discarded; and dbx_symfile_read, which reads a symbol table
     23    from a file.
     24 
     25    dbx_symfile_read only does the minimum work necessary for letting the
     26    user "name" things symbolically; it does not read the entire symtab.
     27    Instead, it reads the external and static symbols and puts them in partial
     28    symbol tables.  When more extensive information is requested of a
     29    file, the corresponding partial symbol table is mutated into a full
     30    fledged symbol table by going back and reading the symbols
     31    for real.  dbx_psymtab_to_symtab() is the function that does this */
     32 
     33 #include "defs.h"
     34 #if defined(__CYGNUSCLIB__)
     35 #include <sys/types.h>
     36 #include <fcntl.h>
     37 #endif
     38 
     39 #include "gdb_obstack.h"
     40 #include <sys/stat.h>
     41 #include "symtab.h"
     42 #include "breakpoint.h"
     43 #include "target.h"
     44 #include "gdbcore.h"		/* for bfd stuff */
     45 #include "libaout.h"		/* FIXME Secret internal BFD stuff for a.out */
     46 #include "filenames.h"
     47 #include "objfiles.h"
     48 #include "buildsym-legacy.h"
     49 #include "stabsread.h"
     50 #include "gdb-stabs.h"
     51 #include "demangle.h"
     52 #include "complaints.h"
     53 #include "cp-abi.h"
     54 #include "cp-support.h"
     55 #include "psympriv.h"
     56 #include "block.h"
     57 #include "aout/aout64.h"
     58 #include "aout/stab_gnu.h"	/* We always use GNU stabs, not
     59 				   native, now.  */
     60 
     61 
     63 /* Key for dbx-associated data.  */
     64 
     65 objfile_key<dbx_symfile_info> dbx_objfile_data_key;
     66 
     67 /* We put a pointer to this structure in the read_symtab_private field
     68    of the psymtab.  */
     69 
     70 struct symloc
     71   {
     72     /* Offset within the file symbol table of first local symbol for this
     73        file.  */
     74 
     75     int ldsymoff;
     76 
     77     /* Length (in bytes) of the section of the symbol table devoted to
     78        this file's symbols (actually, the section bracketed may contain
     79        more than just this file's symbols).  If ldsymlen is 0, the only
     80        reason for this thing's existence is the dependency list.  Nothing
     81        else will happen when it is read in.  */
     82 
     83     int ldsymlen;
     84 
     85     /* The size of each symbol in the symbol file (in external form).  */
     86 
     87     int symbol_size;
     88 
     89     /* Further information needed to locate the symbols if they are in
     90        an ELF file.  */
     91 
     92     int symbol_offset;
     93     int string_offset;
     94     int file_string_offset;
     95     enum language pst_language;
     96   };
     97 
     98 #define LDSYMOFF(p) (((struct symloc *)((p)->read_symtab_private))->ldsymoff)
     99 #define LDSYMLEN(p) (((struct symloc *)((p)->read_symtab_private))->ldsymlen)
    100 #define SYMLOC(p) ((struct symloc *)((p)->read_symtab_private))
    101 #define SYMBOL_SIZE(p) (SYMLOC(p)->symbol_size)
    102 #define SYMBOL_OFFSET(p) (SYMLOC(p)->symbol_offset)
    103 #define STRING_OFFSET(p) (SYMLOC(p)->string_offset)
    104 #define FILE_STRING_OFFSET(p) (SYMLOC(p)->file_string_offset)
    105 #define PST_LANGUAGE(p) (SYMLOC(p)->pst_language)
    106 
    107 
    109 /* The objfile we are currently reading.  */
    110 
    111 static struct objfile *dbxread_objfile;
    112 
    113 /* Remember what we deduced to be the source language of this psymtab.  */
    114 
    115 static enum language psymtab_language = language_unknown;
    116 
    117 /* The BFD for this file -- implicit parameter to next_symbol_text.  */
    118 
    119 static bfd *symfile_bfd;
    120 
    121 /* The size of each symbol in the symbol file (in external form).
    122    This is set by dbx_symfile_read when building psymtabs, and by
    123    dbx_psymtab_to_symtab when building symtabs.  */
    124 
    125 static unsigned symbol_size;
    126 
    127 /* This is the offset of the symbol table in the executable file.  */
    128 
    129 static unsigned symbol_table_offset;
    130 
    131 /* This is the offset of the string table in the executable file.  */
    132 
    133 static unsigned string_table_offset;
    134 
    135 /* For elf+stab executables, the n_strx field is not a simple index
    136    into the string table.  Instead, each .o file has a base offset in
    137    the string table, and the associated symbols contain offsets from
    138    this base.  The following two variables contain the base offset for
    139    the current and next .o files.  */
    140 
    141 static unsigned int file_string_table_offset;
    142 static unsigned int next_file_string_table_offset;
    143 
    144 /* .o and NLM files contain unrelocated addresses which are based at
    145    0.  When non-zero, this flag disables some of the special cases for
    146    Solaris elf+stab text addresses at location 0.  */
    147 
    148 static int symfile_relocatable = 0;
    149 
    150 /* When set, we are processing a .o file compiled by sun acc.  This is
    151    misnamed; it refers to all stabs-in-elf implementations which use
    152    N_UNDF the way Sun does, including Solaris gcc.  Hopefully all
    153    stabs-in-elf implementations ever invented will choose to be
    154    compatible.  */
    155 
    156 static unsigned char processing_acc_compilation;
    157 
    158 
    159 /* The lowest text address we have yet encountered.  This is needed
    161    because in an a.out file, there is no header field which tells us
    162    what address the program is actually going to be loaded at, so we
    163    need to make guesses based on the symbols (which *are* relocated to
    164    reflect the address it will be loaded at).  */
    165 
    166 static CORE_ADDR lowest_text_address;
    167 
    168 /* Non-zero if there is any line number info in the objfile.  Prevents
    169    dbx_end_psymtab from discarding an otherwise empty psymtab.  */
    170 
    171 static int has_line_numbers;
    172 
    173 /* Complaints about the symbols we have encountered.  */
    174 
    175 static void
    176 unknown_symtype_complaint (const char *arg1)
    177 {
    178   complaint (_("unknown symbol type %s"), arg1);
    179 }
    180 
    181 static void
    182 lbrac_mismatch_complaint (int arg1)
    183 {
    184   complaint (_("N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d"), arg1);
    185 }
    186 
    187 static void
    188 repeated_header_complaint (const char *arg1, int arg2)
    189 {
    190   complaint (_("\"repeated\" header file %s not "
    191 	       "previously seen, at symtab pos %d"),
    192 	     arg1, arg2);
    193 }
    194 
    195 /* find_text_range --- find start and end of loadable code sections
    196 
    197    The find_text_range function finds the shortest address range that
    198    encloses all sections containing executable code, and stores it in
    199    objfile's text_addr and text_size members.
    200 
    201    dbx_symfile_read will use this to finish off the partial symbol
    202    table, in some cases.  */
    203 
    204 static void
    205 find_text_range (bfd * sym_bfd, struct objfile *objfile)
    206 {
    207   asection *sec;
    208   int found_any = 0;
    209   CORE_ADDR start = 0;
    210   CORE_ADDR end = 0;
    211 
    212   for (sec = sym_bfd->sections; sec; sec = sec->next)
    213     if (bfd_section_flags (sec) & SEC_CODE)
    214       {
    215 	CORE_ADDR sec_start = bfd_section_vma (sec);
    216 	CORE_ADDR sec_end = sec_start + bfd_section_size (sec);
    217 
    218 	if (found_any)
    219 	  {
    220 	    if (sec_start < start)
    221 	      start = sec_start;
    222 	    if (sec_end > end)
    223 	      end = sec_end;
    224 	  }
    225 	else
    226 	  {
    227 	    start = sec_start;
    228 	    end = sec_end;
    229 	  }
    230 
    231 	found_any = 1;
    232       }
    233 
    234   if (!found_any)
    235     error (_("Can't find any code sections in symbol file"));
    236 
    237   DBX_TEXT_ADDR (objfile) = start;
    238   DBX_TEXT_SIZE (objfile) = end - start;
    239 }
    240 
    241 
    243 
    244 /* During initial symbol readin, we need to have a structure to keep
    245    track of which psymtabs have which bincls in them.  This structure
    246    is used during readin to setup the list of dependencies within each
    247    partial symbol table.  */
    248 
    249 struct header_file_location
    250 {
    251   header_file_location (const char *name_, int instance_,
    252 			legacy_psymtab *pst_)
    253     : name (name_),
    254       instance (instance_),
    255       pst (pst_)
    256   {
    257   }
    258 
    259   const char *name;		/* Name of header file */
    260   int instance;			/* See above */
    261   legacy_psymtab *pst;	/* Partial symtab that has the
    262 				   BINCL/EINCL defs for this file.  */
    263 };
    264 
    265 /* The list of bincls.  */
    266 static std::vector<struct header_file_location> *bincl_list;
    267 
    268 /* Local function prototypes.  */
    269 
    270 static void read_ofile_symtab (struct objfile *, legacy_psymtab *);
    271 
    272 static void dbx_read_symtab (legacy_psymtab *self,
    273 			     struct objfile *objfile);
    274 
    275 static void dbx_expand_psymtab (legacy_psymtab *, struct objfile *);
    276 
    277 static void read_dbx_symtab (minimal_symbol_reader &, struct objfile *);
    278 
    279 static legacy_psymtab *find_corresponding_bincl_psymtab (const char *,
    280 								int);
    281 
    282 static const char *dbx_next_symbol_text (struct objfile *);
    283 
    284 static void fill_symbuf (bfd *);
    285 
    286 static void dbx_symfile_init (struct objfile *);
    287 
    288 static void dbx_new_init (struct objfile *);
    289 
    290 static void dbx_symfile_read (struct objfile *, symfile_add_flags);
    291 
    292 static void dbx_symfile_finish (struct objfile *);
    293 
    294 static void record_minimal_symbol (minimal_symbol_reader &,
    295 				   const char *, CORE_ADDR, int,
    296 				   struct objfile *);
    297 
    298 static void add_new_header_file (const char *, int);
    299 
    300 static void add_old_header_file (const char *, int);
    301 
    302 static void add_this_object_header_file (int);
    303 
    304 static legacy_psymtab *start_psymtab (struct objfile *, const char *,
    305 					     CORE_ADDR, int);
    306 
    307 /* Free up old header file tables.  */
    308 
    309 void
    310 free_header_files (void)
    311 {
    312   if (this_object_header_files)
    313     {
    314       xfree (this_object_header_files);
    315       this_object_header_files = NULL;
    316     }
    317   n_allocated_this_object_header_files = 0;
    318 }
    319 
    320 /* Allocate new header file tables.  */
    321 
    322 void
    323 init_header_files (void)
    324 {
    325   n_allocated_this_object_header_files = 10;
    326   this_object_header_files = XNEWVEC (int, 10);
    327 }
    328 
    329 /* Add header file number I for this object file
    330    at the next successive FILENUM.  */
    331 
    332 static void
    333 add_this_object_header_file (int i)
    334 {
    335   if (n_this_object_header_files == n_allocated_this_object_header_files)
    336     {
    337       n_allocated_this_object_header_files *= 2;
    338       this_object_header_files
    339 	= (int *) xrealloc ((char *) this_object_header_files,
    340 		       n_allocated_this_object_header_files * sizeof (int));
    341     }
    342 
    343   this_object_header_files[n_this_object_header_files++] = i;
    344 }
    345 
    346 /* Add to this file an "old" header file, one already seen in
    347    a previous object file.  NAME is the header file's name.
    348    INSTANCE is its instance code, to select among multiple
    349    symbol tables for the same header file.  */
    350 
    351 static void
    352 add_old_header_file (const char *name, int instance)
    353 {
    354   struct header_file *p = HEADER_FILES (dbxread_objfile);
    355   int i;
    356 
    357   for (i = 0; i < N_HEADER_FILES (dbxread_objfile); i++)
    358     if (filename_cmp (p[i].name, name) == 0 && instance == p[i].instance)
    359       {
    360 	add_this_object_header_file (i);
    361 	return;
    362       }
    363   repeated_header_complaint (name, symnum);
    364 }
    365 
    366 /* Add to this file a "new" header file: definitions for its types follow.
    367    NAME is the header file's name.
    368    Most often this happens only once for each distinct header file,
    369    but not necessarily.  If it happens more than once, INSTANCE has
    370    a different value each time, and references to the header file
    371    use INSTANCE values to select among them.
    372 
    373    dbx output contains "begin" and "end" markers for each new header file,
    374    but at this level we just need to know which files there have been;
    375    so we record the file when its "begin" is seen and ignore the "end".  */
    376 
    377 static void
    378 add_new_header_file (const char *name, int instance)
    379 {
    380   int i;
    381   struct header_file *hfile;
    382 
    383   /* Make sure there is room for one more header file.  */
    384 
    385   i = N_ALLOCATED_HEADER_FILES (dbxread_objfile);
    386 
    387   if (N_HEADER_FILES (dbxread_objfile) == i)
    388     {
    389       if (i == 0)
    390 	{
    391 	  N_ALLOCATED_HEADER_FILES (dbxread_objfile) = 10;
    392 	  HEADER_FILES (dbxread_objfile) = (struct header_file *)
    393 	    xmalloc (10 * sizeof (struct header_file));
    394 	}
    395       else
    396 	{
    397 	  i *= 2;
    398 	  N_ALLOCATED_HEADER_FILES (dbxread_objfile) = i;
    399 	  HEADER_FILES (dbxread_objfile) = (struct header_file *)
    400 	    xrealloc ((char *) HEADER_FILES (dbxread_objfile),
    401 		      (i * sizeof (struct header_file)));
    402 	}
    403     }
    404 
    405   /* Create an entry for this header file.  */
    406 
    407   i = N_HEADER_FILES (dbxread_objfile)++;
    408   hfile = HEADER_FILES (dbxread_objfile) + i;
    409   hfile->name = xstrdup (name);
    410   hfile->instance = instance;
    411   hfile->length = 10;
    412   hfile->vector = XCNEWVEC (struct type *, 10);
    413 
    414   add_this_object_header_file (i);
    415 }
    416 
    417 #if 0
    418 static struct type **
    419 explicit_lookup_type (int real_filenum, int index)
    420 {
    421   struct header_file *f = &HEADER_FILES (dbxread_objfile)[real_filenum];
    422 
    423   if (index >= f->length)
    424     {
    425       f->length *= 2;
    426       f->vector = (struct type **)
    427 	xrealloc (f->vector, f->length * sizeof (struct type *));
    428       memset (&f->vector[f->length / 2],
    429 	      '\0', f->length * sizeof (struct type *) / 2);
    430     }
    431   return &f->vector[index];
    432 }
    433 #endif
    434 
    435 static void
    437 record_minimal_symbol (minimal_symbol_reader &reader,
    438 		       const char *name, CORE_ADDR address, int type,
    439 		       struct objfile *objfile)
    440 {
    441   enum minimal_symbol_type ms_type;
    442   int section;
    443 
    444   switch (type)
    445     {
    446     case N_TEXT | N_EXT:
    447       ms_type = mst_text;
    448       section = SECT_OFF_TEXT (objfile);
    449       break;
    450     case N_DATA | N_EXT:
    451       ms_type = mst_data;
    452       section = SECT_OFF_DATA (objfile);
    453       break;
    454     case N_BSS | N_EXT:
    455       ms_type = mst_bss;
    456       section = SECT_OFF_BSS (objfile);
    457       break;
    458     case N_ABS | N_EXT:
    459       ms_type = mst_abs;
    460       section = -1;
    461       break;
    462 #ifdef N_SETV
    463     case N_SETV | N_EXT:
    464       ms_type = mst_data;
    465       section = SECT_OFF_DATA (objfile);
    466       break;
    467     case N_SETV:
    468       /* I don't think this type actually exists; since a N_SETV is the result
    469          of going over many .o files, it doesn't make sense to have one
    470          file local.  */
    471       ms_type = mst_file_data;
    472       section = SECT_OFF_DATA (objfile);
    473       break;
    474 #endif
    475     case N_TEXT:
    476     case N_NBTEXT:
    477     case N_FN:
    478     case N_FN_SEQ:
    479       ms_type = mst_file_text;
    480       section = SECT_OFF_TEXT (objfile);
    481       break;
    482     case N_DATA:
    483       ms_type = mst_file_data;
    484 
    485       /* Check for __DYNAMIC, which is used by Sun shared libraries.
    486          Record it as global even if it's local, not global, so
    487          lookup_minimal_symbol can find it.  We don't check symbol_leading_char
    488          because for SunOS4 it always is '_'.  */
    489       if (name[8] == 'C' && strcmp ("__DYNAMIC", name) == 0)
    490 	ms_type = mst_data;
    491 
    492       /* Same with virtual function tables, both global and static.  */
    493       {
    494 	const char *tempstring = name;
    495 
    496 	if (tempstring[0] == bfd_get_symbol_leading_char (objfile->obfd))
    497 	  ++tempstring;
    498 	if (is_vtable_name (tempstring))
    499 	  ms_type = mst_data;
    500       }
    501       section = SECT_OFF_DATA (objfile);
    502       break;
    503     case N_BSS:
    504       ms_type = mst_file_bss;
    505       section = SECT_OFF_BSS (objfile);
    506       break;
    507     default:
    508       ms_type = mst_unknown;
    509       section = -1;
    510       break;
    511     }
    512 
    513   if ((ms_type == mst_file_text || ms_type == mst_text)
    514       && address < lowest_text_address)
    515     lowest_text_address = address;
    516 
    517   reader.record_with_info (name, address, ms_type, section);
    518 }
    519 
    520 /* Scan and build partial symbols for a symbol file.
    522    We have been initialized by a call to dbx_symfile_init, which
    523    put all the relevant info into a "struct dbx_symfile_info",
    524    hung off the objfile structure.  */
    525 
    526 static void
    527 dbx_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
    528 {
    529   bfd *sym_bfd;
    530   int val;
    531 
    532   sym_bfd = objfile->obfd;
    533 
    534   /* .o and .nlm files are relocatables with text, data and bss segs based at
    535      0.  This flag disables special (Solaris stabs-in-elf only) fixups for
    536      symbols with a value of 0.  */
    537 
    538   symfile_relocatable = bfd_get_file_flags (sym_bfd) & HAS_RELOC;
    539 
    540   val = bfd_seek (sym_bfd, DBX_SYMTAB_OFFSET (objfile), SEEK_SET);
    541   if (val < 0)
    542     perror_with_name (objfile_name (objfile));
    543 
    544   /* Size the symbol table.  */
    545   init_psymbol_list (objfile, DBX_SYMCOUNT (objfile));
    546 
    547   symbol_size = DBX_SYMBOL_SIZE (objfile);
    548   symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
    549 
    550   scoped_free_pendings free_pending;
    551 
    552   minimal_symbol_reader reader (objfile);
    553 
    554   /* Read stabs data from executable file and define symbols.  */
    555 
    556   read_dbx_symtab (reader, objfile);
    557 
    558   /* Install any minimal symbols that have been collected as the current
    559      minimal symbols for this objfile.  */
    560 
    561   reader.install ();
    562 }
    563 
    564 /* Initialize anything that needs initializing when a completely new
    565    symbol file is specified (not just adding some symbols from another
    566    file, e.g. a shared library).  */
    567 
    568 static void
    569 dbx_new_init (struct objfile *ignore)
    570 {
    571   stabsread_new_init ();
    572   init_header_files ();
    573 }
    574 
    575 
    576 /* dbx_symfile_init ()
    577    is the dbx-specific initialization routine for reading symbols.
    578    It is passed a struct objfile which contains, among other things,
    579    the BFD for the file whose symbols are being read, and a slot for a pointer
    580    to "private data" which we fill with goodies.
    581 
    582    We read the string table into malloc'd space and stash a pointer to it.
    583 
    584    Since BFD doesn't know how to read debug symbols in a format-independent
    585    way (and may never do so...), we have to do it ourselves.  We will never
    586    be called unless this is an a.out (or very similar) file.
    587    FIXME, there should be a cleaner peephole into the BFD environment here.  */
    588 
    589 #define DBX_STRINGTAB_SIZE_SIZE sizeof(long)	/* FIXME */
    590 
    591 static void
    592 dbx_symfile_init (struct objfile *objfile)
    593 {
    594   int val;
    595   bfd *sym_bfd = objfile->obfd;
    596   const char *name = bfd_get_filename (sym_bfd);
    597   asection *text_sect;
    598   unsigned char size_temp[DBX_STRINGTAB_SIZE_SIZE];
    599 
    600   /* Allocate struct to keep track of the symfile.  */
    601   dbx_objfile_data_key.emplace (objfile);
    602 
    603   DBX_TEXT_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
    604   DBX_DATA_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".data");
    605   DBX_BSS_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".bss");
    606 
    607   /* FIXME POKING INSIDE BFD DATA STRUCTURES.  */
    608 #define	STRING_TABLE_OFFSET	(sym_bfd->origin + obj_str_filepos (sym_bfd))
    609 #define	SYMBOL_TABLE_OFFSET	(sym_bfd->origin + obj_sym_filepos (sym_bfd))
    610 
    611   /* FIXME POKING INSIDE BFD DATA STRUCTURES.  */
    612 
    613   text_sect = bfd_get_section_by_name (sym_bfd, ".text");
    614   if (!text_sect)
    615     error (_("Can't find .text section in symbol file"));
    616   DBX_TEXT_ADDR (objfile) = bfd_section_vma (text_sect);
    617   DBX_TEXT_SIZE (objfile) = bfd_section_size (text_sect);
    618 
    619   DBX_SYMBOL_SIZE (objfile) = obj_symbol_entry_size (sym_bfd);
    620   DBX_SYMCOUNT (objfile) = bfd_get_symcount (sym_bfd);
    621   DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
    622 
    623   /* Read the string table and stash it away in the objfile_obstack.
    624      When we blow away the objfile the string table goes away as well.
    625      Note that gdb used to use the results of attempting to malloc the
    626      string table, based on the size it read, as a form of sanity check
    627      for botched byte swapping, on the theory that a byte swapped string
    628      table size would be so totally bogus that the malloc would fail.  Now
    629      that we put in on the objfile_obstack, we can't do this since gdb gets
    630      a fatal error (out of virtual memory) if the size is bogus.  We can
    631      however at least check to see if the size is less than the size of
    632      the size field itself, or larger than the size of the entire file.
    633      Note that all valid string tables have a size greater than zero, since
    634      the bytes used to hold the size are included in the count.  */
    635 
    636   if (STRING_TABLE_OFFSET == 0)
    637     {
    638       /* It appears that with the existing bfd code, STRING_TABLE_OFFSET
    639          will never be zero, even when there is no string table.  This
    640          would appear to be a bug in bfd.  */
    641       DBX_STRINGTAB_SIZE (objfile) = 0;
    642       DBX_STRINGTAB (objfile) = NULL;
    643     }
    644   else
    645     {
    646       val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
    647       if (val < 0)
    648 	perror_with_name (name);
    649 
    650       memset (size_temp, 0, sizeof (size_temp));
    651       val = bfd_bread (size_temp, sizeof (size_temp), sym_bfd);
    652       if (val < 0)
    653 	{
    654 	  perror_with_name (name);
    655 	}
    656       else if (val == 0)
    657 	{
    658 	  /* With the existing bfd code, STRING_TABLE_OFFSET will be set to
    659 	     EOF if there is no string table, and attempting to read the size
    660 	     from EOF will read zero bytes.  */
    661 	  DBX_STRINGTAB_SIZE (objfile) = 0;
    662 	  DBX_STRINGTAB (objfile) = NULL;
    663 	}
    664       else
    665 	{
    666 	  /* Read some data that would appear to be the string table size.
    667 	     If there really is a string table, then it is probably the right
    668 	     size.  Byteswap if necessary and validate the size.  Note that
    669 	     the minimum is DBX_STRINGTAB_SIZE_SIZE.  If we just read some
    670 	     random data that happened to be at STRING_TABLE_OFFSET, because
    671 	     bfd can't tell us there is no string table, the sanity checks may
    672 	     or may not catch this.  */
    673 	  DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
    674 
    675 	  if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp)
    676 	      || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
    677 	    error (_("ridiculous string table size (%d bytes)."),
    678 		   DBX_STRINGTAB_SIZE (objfile));
    679 
    680 	  DBX_STRINGTAB (objfile) =
    681 	    (char *) obstack_alloc (&objfile->objfile_obstack,
    682 				    DBX_STRINGTAB_SIZE (objfile));
    683 	  OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile));
    684 
    685 	  /* Now read in the string table in one big gulp.  */
    686 
    687 	  val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
    688 	  if (val < 0)
    689 	    perror_with_name (name);
    690 	  val = bfd_bread (DBX_STRINGTAB (objfile),
    691 			   DBX_STRINGTAB_SIZE (objfile),
    692 			   sym_bfd);
    693 	  if (val != DBX_STRINGTAB_SIZE (objfile))
    694 	    perror_with_name (name);
    695 	}
    696     }
    697 }
    698 
    699 /* Perform any local cleanups required when we are done with a particular
    700    objfile.  I.E, we are in the process of discarding all symbol information
    701    for an objfile, freeing up all memory held for it, and unlinking the
    702    objfile struct from the global list of known objfiles.  */
    703 
    704 static void
    705 dbx_symfile_finish (struct objfile *objfile)
    706 {
    707   free_header_files ();
    708 }
    709 
    710 dbx_symfile_info::~dbx_symfile_info ()
    711 {
    712   if (header_files != NULL)
    713     {
    714       int i = n_header_files;
    715       struct header_file *hfiles = header_files;
    716 
    717       while (--i >= 0)
    718 	{
    719 	  xfree (hfiles[i].name);
    720 	  xfree (hfiles[i].vector);
    721 	}
    722       xfree (hfiles);
    723     }
    724 }
    725 
    726 
    727 
    729 /* Buffer for reading the symbol table entries.  */
    730 static struct external_nlist symbuf[4096];
    731 static int symbuf_idx;
    732 static int symbuf_end;
    733 
    734 /* Name of last function encountered.  Used in Solaris to approximate
    735    object file boundaries.  */
    736 static const char *last_function_name;
    737 
    738 /* The address in memory of the string table of the object file we are
    739    reading (which might not be the "main" object file, but might be a
    740    shared library or some other dynamically loaded thing).  This is
    741    set by read_dbx_symtab when building psymtabs, and by
    742    read_ofile_symtab when building symtabs, and is used only by
    743    next_symbol_text.  FIXME: If that is true, we don't need it when
    744    building psymtabs, right?  */
    745 static char *stringtab_global;
    746 
    747 /* These variables are used to control fill_symbuf when the stabs
    748    symbols are not contiguous (as may be the case when a COFF file is
    749    linked using --split-by-reloc).  */
    750 static const std::vector<asection *> *symbuf_sections;
    751 static size_t sect_idx;
    752 static unsigned int symbuf_left;
    753 static unsigned int symbuf_read;
    754 
    755 /* This variable stores a global stabs buffer, if we read stabs into
    756    memory in one chunk in order to process relocations.  */
    757 static bfd_byte *stabs_data;
    758 
    759 /* Refill the symbol table input buffer
    760    and set the variables that control fetching entries from it.
    761    Reports an error if no data available.
    762    This function can read past the end of the symbol table
    763    (into the string table) but this does no harm.  */
    764 
    765 static void
    766 fill_symbuf (bfd *sym_bfd)
    767 {
    768   unsigned int count;
    769   int nbytes;
    770 
    771   if (stabs_data)
    772     {
    773       nbytes = sizeof (symbuf);
    774       if (nbytes > symbuf_left)
    775         nbytes = symbuf_left;
    776       memcpy (symbuf, stabs_data + symbuf_read, nbytes);
    777     }
    778   else if (symbuf_sections == NULL)
    779     {
    780       count = sizeof (symbuf);
    781       nbytes = bfd_bread (symbuf, count, sym_bfd);
    782     }
    783   else
    784     {
    785       if (symbuf_left <= 0)
    786 	{
    787 	  file_ptr filepos = (*symbuf_sections)[sect_idx]->filepos;
    788 
    789 	  if (bfd_seek (sym_bfd, filepos, SEEK_SET) != 0)
    790 	    perror_with_name (bfd_get_filename (sym_bfd));
    791 	  symbuf_left = bfd_section_size ((*symbuf_sections)[sect_idx]);
    792 	  symbol_table_offset = filepos - symbuf_read;
    793 	  ++sect_idx;
    794 	}
    795 
    796       count = symbuf_left;
    797       if (count > sizeof (symbuf))
    798 	count = sizeof (symbuf);
    799       nbytes = bfd_bread (symbuf, count, sym_bfd);
    800     }
    801 
    802   if (nbytes < 0)
    803     perror_with_name (bfd_get_filename (sym_bfd));
    804   else if (nbytes == 0)
    805     error (_("Premature end of file reading symbol table"));
    806   symbuf_end = nbytes / symbol_size;
    807   symbuf_idx = 0;
    808   symbuf_left -= nbytes;
    809   symbuf_read += nbytes;
    810 }
    811 
    812 static void
    813 stabs_seek (int sym_offset)
    814 {
    815   if (stabs_data)
    816     {
    817       symbuf_read += sym_offset;
    818       symbuf_left -= sym_offset;
    819     }
    820   else
    821     bfd_seek (symfile_bfd, sym_offset, SEEK_CUR);
    822 }
    823 
    824 #define INTERNALIZE_SYMBOL(intern, extern, abfd)			\
    825   {									\
    826     (intern).n_strx = bfd_h_get_32 (abfd, (extern)->e_strx);		\
    827     (intern).n_type = bfd_h_get_8 (abfd, (extern)->e_type);		\
    828     (intern).n_other = 0;						\
    829     (intern).n_desc = bfd_h_get_16 (abfd, (extern)->e_desc);  		\
    830     if (bfd_get_sign_extend_vma (abfd))					\
    831       (intern).n_value = bfd_h_get_signed_32 (abfd, (extern)->e_value);	\
    832     else								\
    833       (intern).n_value = bfd_h_get_32 (abfd, (extern)->e_value);	\
    834   }
    835 
    836 /* Invariant: The symbol pointed to by symbuf_idx is the first one
    837    that hasn't been swapped.  Swap the symbol at the same time
    838    that symbuf_idx is incremented.  */
    839 
    840 /* dbx allows the text of a symbol name to be continued into the
    841    next symbol name!  When such a continuation is encountered
    842    (a \ at the end of the text of a name)
    843    call this function to get the continuation.  */
    844 
    845 static const char *
    846 dbx_next_symbol_text (struct objfile *objfile)
    847 {
    848   struct internal_nlist nlist;
    849 
    850   if (symbuf_idx == symbuf_end)
    851     fill_symbuf (symfile_bfd);
    852 
    853   symnum++;
    854   INTERNALIZE_SYMBOL (nlist, &symbuf[symbuf_idx], symfile_bfd);
    855   OBJSTAT (objfile, n_stabs++);
    856 
    857   symbuf_idx++;
    858 
    859   return nlist.n_strx + stringtab_global + file_string_table_offset;
    860 }
    861 
    862 
    864 /* Given a name, value pair, find the corresponding
    865    bincl in the list.  Return the partial symtab associated
    866    with that header_file_location.  */
    867 
    868 static legacy_psymtab *
    869 find_corresponding_bincl_psymtab (const char *name, int instance)
    870 {
    871   for (const header_file_location &bincl : *bincl_list)
    872     if (bincl.instance == instance
    873 	&& strcmp (name, bincl.name) == 0)
    874       return bincl.pst;
    875 
    876   repeated_header_complaint (name, symnum);
    877   return (legacy_psymtab *) 0;
    878 }
    879 
    880 /* Set namestring based on nlist.  If the string table index is invalid,
    881    give a fake name, and print a single error message per symbol file read,
    882    rather than abort the symbol reading or flood the user with messages.  */
    883 
    884 static const char *
    885 set_namestring (struct objfile *objfile, const struct internal_nlist *nlist)
    886 {
    887   const char *namestring;
    888 
    889   if (nlist->n_strx + file_string_table_offset
    890       >= DBX_STRINGTAB_SIZE (objfile)
    891       || nlist->n_strx + file_string_table_offset < nlist->n_strx)
    892     {
    893       complaint (_("bad string table offset in symbol %d"),
    894 		 symnum);
    895       namestring = "<bad string table offset>";
    896     }
    897   else
    898     namestring = (nlist->n_strx + file_string_table_offset
    899 		  + DBX_STRINGTAB (objfile));
    900   return namestring;
    901 }
    902 
    903 static struct bound_minimal_symbol
    904 find_stab_function (const char *namestring, const char *filename,
    905 		    struct objfile *objfile)
    906 {
    907   struct bound_minimal_symbol msym;
    908   int n;
    909 
    910   const char *colon = strchr (namestring, ':');
    911   if (colon == NULL)
    912     n = 0;
    913   else
    914     n = colon - namestring;
    915 
    916   char *p = (char *) alloca (n + 2);
    917   strncpy (p, namestring, n);
    918   p[n] = 0;
    919 
    920   msym = lookup_minimal_symbol (p, filename, objfile);
    921   if (msym.minsym == NULL)
    922     {
    923       /* Sun Fortran appends an underscore to the minimal symbol name,
    924          try again with an appended underscore if the minimal symbol
    925          was not found.  */
    926       p[n] = '_';
    927       p[n + 1] = 0;
    928       msym = lookup_minimal_symbol (p, filename, objfile);
    929     }
    930 
    931   if (msym.minsym == NULL && filename != NULL)
    932     {
    933       /* Try again without the filename.  */
    934       p[n] = 0;
    935       msym = lookup_minimal_symbol (p, NULL, objfile);
    936     }
    937   if (msym.minsym == NULL && filename != NULL)
    938     {
    939       /* And try again for Sun Fortran, but without the filename.  */
    940       p[n] = '_';
    941       p[n + 1] = 0;
    942       msym = lookup_minimal_symbol (p, NULL, objfile);
    943     }
    944 
    945   return msym;
    946 }
    947 
    948 static void
    949 function_outside_compilation_unit_complaint (const char *arg1)
    950 {
    951   complaint (_("function `%s' appears to be defined "
    952 	       "outside of all compilation units"),
    953 	     arg1);
    954 }
    955 
    956 /* Setup partial_symtab's describing each source file for which
    957    debugging information is available.  */
    958 
    959 static void
    960 read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile)
    961 {
    962   struct gdbarch *gdbarch = objfile->arch ();
    963   struct external_nlist *bufp = 0;	/* =0 avoids gcc -Wall glitch.  */
    964   struct internal_nlist nlist;
    965   CORE_ADDR text_addr;
    966   int text_size;
    967   const char *sym_name;
    968   int sym_len;
    969 
    970   const char *namestring;
    971   int nsl;
    972   int past_first_source_file = 0;
    973   CORE_ADDR last_function_start = 0;
    974   bfd *abfd;
    975   int textlow_not_set;
    976   int data_sect_index;
    977 
    978   /* Current partial symtab.  */
    979   legacy_psymtab *pst;
    980 
    981   /* List of current psymtab's include files.  */
    982   const char **psymtab_include_list;
    983   int includes_allocated;
    984   int includes_used;
    985 
    986   /* Index within current psymtab dependency list.  */
    987   legacy_psymtab **dependency_list;
    988   int dependencies_used, dependencies_allocated;
    989 
    990   text_addr = DBX_TEXT_ADDR (objfile);
    991   text_size = DBX_TEXT_SIZE (objfile);
    992 
    993   /* FIXME.  We probably want to change stringtab_global rather than add this
    994      while processing every symbol entry.  FIXME.  */
    995   file_string_table_offset = 0;
    996   next_file_string_table_offset = 0;
    997 
    998   stringtab_global = DBX_STRINGTAB (objfile);
    999 
   1000   pst = (legacy_psymtab *) 0;
   1001 
   1002   includes_allocated = 30;
   1003   includes_used = 0;
   1004   psymtab_include_list = (const char **) alloca (includes_allocated *
   1005 						 sizeof (const char *));
   1006 
   1007   dependencies_allocated = 30;
   1008   dependencies_used = 0;
   1009   dependency_list =
   1010     (legacy_psymtab **) alloca (dependencies_allocated *
   1011 				sizeof (legacy_psymtab *));
   1012 
   1013   /* Init bincl list */
   1014   std::vector<struct header_file_location> bincl_storage;
   1015   scoped_restore restore_bincl_global
   1016     = make_scoped_restore (&bincl_list, &bincl_storage);
   1017 
   1018   set_last_source_file (NULL);
   1019 
   1020   lowest_text_address = (CORE_ADDR) -1;
   1021 
   1022   symfile_bfd = objfile->obfd;	/* For next_text_symbol.  */
   1023   abfd = objfile->obfd;
   1024   symbuf_end = symbuf_idx = 0;
   1025   next_symbol_text_func = dbx_next_symbol_text;
   1026   textlow_not_set = 1;
   1027   has_line_numbers = 0;
   1028 
   1029   /* FIXME: jimb/2003-09-12: We don't apply the right section's offset
   1030      to global and static variables.  The stab for a global or static
   1031      variable doesn't give us any indication of which section it's in,
   1032      so we can't tell immediately which offset in
   1033      objfile->section_offsets we should apply to the variable's
   1034      address.
   1035 
   1036      We could certainly find out which section contains the variable
   1037      by looking up the variable's unrelocated address with
   1038      find_pc_section, but that would be expensive; this is the
   1039      function that constructs the partial symbol tables by examining
   1040      every symbol in the entire executable, and it's
   1041      performance-critical.  So that expense would not be welcome.  I'm
   1042      not sure what to do about this at the moment.
   1043 
   1044      What we have done for years is to simply assume that the .data
   1045      section's offset is appropriate for all global and static
   1046      variables.  Recently, this was expanded to fall back to the .bss
   1047      section's offset if there is no .data section, and then to the
   1048      .rodata section's offset.  */
   1049   data_sect_index = objfile->sect_index_data;
   1050   if (data_sect_index == -1)
   1051     data_sect_index = SECT_OFF_BSS (objfile);
   1052   if (data_sect_index == -1)
   1053     data_sect_index = SECT_OFF_RODATA (objfile);
   1054 
   1055   /* If data_sect_index is still -1, that's okay.  It's perfectly fine
   1056      for the file to have no .data, no .bss, and no .text at all, if
   1057      it also has no global or static variables.  */
   1058 
   1059   for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
   1060     {
   1061       /* Get the symbol for this run and pull out some info.  */
   1062       QUIT;			/* Allow this to be interruptable.  */
   1063       if (symbuf_idx == symbuf_end)
   1064 	fill_symbuf (abfd);
   1065       bufp = &symbuf[symbuf_idx++];
   1066 
   1067       /*
   1068        * Special case to speed up readin.
   1069        */
   1070       if (bfd_h_get_8 (abfd, bufp->e_type) == N_SLINE)
   1071 	{
   1072 	  has_line_numbers = 1;
   1073 	  continue;
   1074 	}
   1075 
   1076       INTERNALIZE_SYMBOL (nlist, bufp, abfd);
   1077       OBJSTAT (objfile, n_stabs++);
   1078 
   1079       /* Ok.  There is a lot of code duplicated in the rest of this
   1080          switch statement (for efficiency reasons).  Since I don't
   1081          like duplicating code, I will do my penance here, and
   1082          describe the code which is duplicated:
   1083 
   1084          *) The assignment to namestring.
   1085          *) The call to strchr.
   1086          *) The addition of a partial symbol the two partial
   1087          symbol lists.  This last is a large section of code, so
   1088          I've imbedded it in the following macro.  */
   1089 
   1090       switch (nlist.n_type)
   1091 	{
   1092 	  /*
   1093 	   * Standard, external, non-debugger, symbols
   1094 	   */
   1095 
   1096 	case N_TEXT | N_EXT:
   1097 	case N_NBTEXT | N_EXT:
   1098 	  goto record_it;
   1099 
   1100 	case N_DATA | N_EXT:
   1101 	case N_NBDATA | N_EXT:
   1102 	  goto record_it;
   1103 
   1104 	case N_BSS:
   1105 	case N_BSS | N_EXT:
   1106 	case N_NBBSS | N_EXT:
   1107 	case N_SETV | N_EXT:		/* FIXME, is this in BSS? */
   1108 	  goto record_it;
   1109 
   1110 	case N_ABS | N_EXT:
   1111 	  record_it:
   1112 	  namestring = set_namestring (objfile, &nlist);
   1113 
   1114 	  record_minimal_symbol (reader, namestring, nlist.n_value,
   1115 				 nlist.n_type, objfile);	/* Always */
   1116 	  continue;
   1117 
   1118 	  /* Standard, local, non-debugger, symbols.  */
   1119 
   1120 	case N_NBTEXT:
   1121 
   1122 	  /* We need to be able to deal with both N_FN or N_TEXT,
   1123 	     because we have no way of knowing whether the sys-supplied ld
   1124 	     or GNU ld was used to make the executable.  Sequents throw
   1125 	     in another wrinkle -- they renumbered N_FN.  */
   1126 
   1127 	case N_FN:
   1128 	case N_FN_SEQ:
   1129 	case N_TEXT:
   1130 	  namestring = set_namestring (objfile, &nlist);
   1131 
   1132 	  if ((namestring[0] == '-' && namestring[1] == 'l')
   1133 	      || (namestring[(nsl = strlen (namestring)) - 1] == 'o'
   1134 		  && namestring[nsl - 2] == '.'))
   1135 	    {
   1136 	      if (past_first_source_file && pst
   1137 		  /* The gould NP1 uses low values for .o and -l symbols
   1138 		     which are not the address.  */
   1139 		  && nlist.n_value >= pst->raw_text_low ())
   1140 		{
   1141 		  dbx_end_psymtab (objfile, pst, psymtab_include_list,
   1142 				   includes_used, symnum * symbol_size,
   1143 				   nlist.n_value > pst->raw_text_high ()
   1144 				   ? nlist.n_value : pst->raw_text_high (),
   1145 				   dependency_list, dependencies_used,
   1146 				   textlow_not_set);
   1147 		  pst = (legacy_psymtab *) 0;
   1148 		  includes_used = 0;
   1149 		  dependencies_used = 0;
   1150 		  has_line_numbers = 0;
   1151 		}
   1152 	      else
   1153 		past_first_source_file = 1;
   1154 	    }
   1155 	  else
   1156 	    goto record_it;
   1157 	  continue;
   1158 
   1159 	case N_DATA:
   1160 	  goto record_it;
   1161 
   1162 	case N_UNDF | N_EXT:
   1163 	  /* The case (nlist.n_value != 0) is a "Fortran COMMON" symbol.
   1164 	     We used to rely on the target to tell us whether it knows
   1165 	     where the symbol has been relocated to, but none of the
   1166 	     target implementations actually provided that operation.
   1167 	     So we just ignore the symbol, the same way we would do if
   1168 	     we had a target-side symbol lookup which returned no match.
   1169 
   1170 	     All other symbols (with nlist.n_value == 0), are really
   1171 	     undefined, and so we ignore them too.  */
   1172 	  continue;
   1173 
   1174 	case N_UNDF:
   1175 	  if (processing_acc_compilation && nlist.n_strx == 1)
   1176 	    {
   1177 	      /* Deal with relative offsets in the string table
   1178 		 used in ELF+STAB under Solaris.  If we want to use the
   1179 		 n_strx field, which contains the name of the file,
   1180 		 we must adjust file_string_table_offset *before* calling
   1181 		 set_namestring().  */
   1182 	      past_first_source_file = 1;
   1183 	      file_string_table_offset = next_file_string_table_offset;
   1184 	      next_file_string_table_offset =
   1185 		file_string_table_offset + nlist.n_value;
   1186 	      if (next_file_string_table_offset < file_string_table_offset)
   1187 		error (_("string table offset backs up at %d"), symnum);
   1188 	      /* FIXME -- replace error() with complaint.  */
   1189 	      continue;
   1190 	    }
   1191 	  continue;
   1192 
   1193 	  /* Lots of symbol types we can just ignore.  */
   1194 
   1195 	case N_ABS:
   1196 	case N_NBDATA:
   1197 	case N_NBBSS:
   1198 	  continue;
   1199 
   1200 	  /* Keep going . . .  */
   1201 
   1202 	  /*
   1203 	   * Special symbol types for GNU
   1204 	   */
   1205 	case N_INDR:
   1206 	case N_INDR | N_EXT:
   1207 	case N_SETA:
   1208 	case N_SETA | N_EXT:
   1209 	case N_SETT:
   1210 	case N_SETT | N_EXT:
   1211 	case N_SETD:
   1212 	case N_SETD | N_EXT:
   1213 	case N_SETB:
   1214 	case N_SETB | N_EXT:
   1215 	case N_SETV:
   1216 	  continue;
   1217 
   1218 	  /*
   1219 	   * Debugger symbols
   1220 	   */
   1221 
   1222 	case N_SO:
   1223 	  {
   1224 	    CORE_ADDR valu;
   1225 	    static int prev_so_symnum = -10;
   1226 	    static int first_so_symnum;
   1227 	    const char *p;
   1228 	    static const char *dirname_nso;
   1229 	    int prev_textlow_not_set;
   1230 
   1231 	    valu = nlist.n_value;
   1232 
   1233 	    prev_textlow_not_set = textlow_not_set;
   1234 
   1235 	    /* A zero value is probably an indication for the SunPRO 3.0
   1236 	       compiler.  dbx_end_psymtab explicitly tests for zero, so
   1237 	       don't relocate it.  */
   1238 
   1239 	    if (nlist.n_value == 0
   1240 		&& gdbarch_sofun_address_maybe_missing (gdbarch))
   1241 	      {
   1242 		textlow_not_set = 1;
   1243 		valu = 0;
   1244 	      }
   1245 	    else
   1246 	      textlow_not_set = 0;
   1247 
   1248 	    past_first_source_file = 1;
   1249 
   1250 	    if (prev_so_symnum != symnum - 1)
   1251 	      {			/* Here if prev stab wasn't N_SO.  */
   1252 		first_so_symnum = symnum;
   1253 
   1254 		if (pst)
   1255 		  {
   1256 		    dbx_end_psymtab (objfile, pst, psymtab_include_list,
   1257 				     includes_used, symnum * symbol_size,
   1258 				     (valu > pst->raw_text_high ()
   1259 				      ? valu : pst->raw_text_high ()),
   1260 				     dependency_list, dependencies_used,
   1261 				     prev_textlow_not_set);
   1262 		    pst = (legacy_psymtab *) 0;
   1263 		    includes_used = 0;
   1264 		    dependencies_used = 0;
   1265 		    has_line_numbers = 0;
   1266 		  }
   1267 	      }
   1268 
   1269 	    prev_so_symnum = symnum;
   1270 
   1271 	    /* End the current partial symtab and start a new one.  */
   1272 
   1273 	    namestring = set_namestring (objfile, &nlist);
   1274 
   1275 	    /* Null name means end of .o file.  Don't start a new one.  */
   1276 	    if (*namestring == '\000')
   1277 	      continue;
   1278 
   1279 	    /* Some compilers (including gcc) emit a pair of initial N_SOs.
   1280 	       The first one is a directory name; the second the file name.
   1281 	       If pst exists, is empty, and has a filename ending in '/',
   1282 	       we assume the previous N_SO was a directory name.  */
   1283 
   1284 	    p = lbasename (namestring);
   1285 	    if (p != namestring && *p == '\000')
   1286 	      {
   1287 		/* Save the directory name SOs locally, then save it into
   1288 		   the psymtab when it's created below.  */
   1289 	        dirname_nso = namestring;
   1290 	        continue;
   1291 	      }
   1292 
   1293 	    /* Some other compilers (C++ ones in particular) emit useless
   1294 	       SOs for non-existant .c files.  We ignore all subsequent SOs
   1295 	       that immediately follow the first.  */
   1296 
   1297 	    if (!pst)
   1298 	      {
   1299 		pst = start_psymtab (objfile,
   1300 				     namestring, valu,
   1301 				     first_so_symnum * symbol_size);
   1302 		pst->dirname = dirname_nso;
   1303 		dirname_nso = NULL;
   1304 	      }
   1305 	    continue;
   1306 	  }
   1307 
   1308 	case N_BINCL:
   1309 	  {
   1310 	    enum language tmp_language;
   1311 
   1312 	    /* Add this bincl to the bincl_list for future EXCLs.  No
   1313 	       need to save the string; it'll be around until
   1314 	       read_dbx_symtab function returns.  */
   1315 
   1316 	    namestring = set_namestring (objfile, &nlist);
   1317 	    tmp_language = deduce_language_from_filename (namestring);
   1318 
   1319 	    /* Only change the psymtab's language if we've learned
   1320 	       something useful (eg. tmp_language is not language_unknown).
   1321 	       In addition, to match what start_subfile does, never change
   1322 	       from C++ to C.  */
   1323 	    if (tmp_language != language_unknown
   1324 		&& (tmp_language != language_c
   1325 		    || psymtab_language != language_cplus))
   1326 	      psymtab_language = tmp_language;
   1327 
   1328 	    if (pst == NULL)
   1329 	      {
   1330 		/* FIXME: we should not get here without a PST to work on.
   1331 		   Attempt to recover.  */
   1332 		complaint (_("N_BINCL %s not in entries for "
   1333 			     "any file, at symtab pos %d"),
   1334 			   namestring, symnum);
   1335 		continue;
   1336 	      }
   1337 	    bincl_list->emplace_back (namestring, nlist.n_value, pst);
   1338 
   1339 	    /* Mark down an include file in the current psymtab.  */
   1340 
   1341 	    goto record_include_file;
   1342 	  }
   1343 
   1344 	case N_SOL:
   1345 	  {
   1346 	    enum language tmp_language;
   1347 
   1348 	    /* Mark down an include file in the current psymtab.  */
   1349 	    namestring = set_namestring (objfile, &nlist);
   1350 	    tmp_language = deduce_language_from_filename (namestring);
   1351 
   1352 	    /* Only change the psymtab's language if we've learned
   1353 	       something useful (eg. tmp_language is not language_unknown).
   1354 	       In addition, to match what start_subfile does, never change
   1355 	       from C++ to C.  */
   1356 	    if (tmp_language != language_unknown
   1357 		&& (tmp_language != language_c
   1358 		    || psymtab_language != language_cplus))
   1359 	      psymtab_language = tmp_language;
   1360 
   1361 	    /* In C++, one may expect the same filename to come round many
   1362 	       times, when code is coming alternately from the main file
   1363 	       and from inline functions in other files.  So I check to see
   1364 	       if this is a file we've seen before -- either the main
   1365 	       source file, or a previously included file.
   1366 
   1367 	       This seems to be a lot of time to be spending on N_SOL, but
   1368 	       things like "break c-exp.y:435" need to work (I
   1369 	       suppose the psymtab_include_list could be hashed or put
   1370 	       in a binary tree, if profiling shows this is a major hog).  */
   1371 	    if (pst && filename_cmp (namestring, pst->filename) == 0)
   1372 	      continue;
   1373 	    {
   1374 	      int i;
   1375 
   1376 	      for (i = 0; i < includes_used; i++)
   1377 		if (filename_cmp (namestring, psymtab_include_list[i]) == 0)
   1378 		  {
   1379 		    i = -1;
   1380 		    break;
   1381 		  }
   1382 	      if (i == -1)
   1383 		continue;
   1384 	    }
   1385 
   1386 	  record_include_file:
   1387 
   1388 	    psymtab_include_list[includes_used++] = namestring;
   1389 	    if (includes_used >= includes_allocated)
   1390 	      {
   1391 		const char **orig = psymtab_include_list;
   1392 
   1393 		psymtab_include_list = (const char **)
   1394 		  alloca ((includes_allocated *= 2) * sizeof (const char *));
   1395 		memcpy (psymtab_include_list, orig,
   1396 			includes_used * sizeof (const char *));
   1397 	      }
   1398 	    continue;
   1399 	  }
   1400 	case N_LSYM:		/* Typedef or automatic variable.  */
   1401 	case N_STSYM:		/* Data seg var -- static.  */
   1402 	case N_LCSYM:		/* BSS      "  */
   1403 	case N_ROSYM:		/* Read-only data seg var -- static.  */
   1404 	case N_NBSTS:		/* Gould nobase.  */
   1405 	case N_NBLCS:		/* symbols.  */
   1406 	case N_FUN:
   1407 	case N_GSYM:		/* Global (extern) variable; can be
   1408 				   data or bss (sigh FIXME).  */
   1409 
   1410 	  /* Following may probably be ignored; I'll leave them here
   1411 	     for now (until I do Pascal and Modula 2 extensions).  */
   1412 
   1413 	case N_PC:		/* I may or may not need this; I
   1414 				   suspect not.  */
   1415 	case N_M2C:		/* I suspect that I can ignore this here.  */
   1416 	case N_SCOPE:		/* Same.   */
   1417 	{
   1418 	  const char *p;
   1419 
   1420 	  namestring = set_namestring (objfile, &nlist);
   1421 
   1422 	  /* See if this is an end of function stab.  */
   1423 	  if (pst && nlist.n_type == N_FUN && *namestring == '\000')
   1424 	    {
   1425 	      CORE_ADDR valu;
   1426 
   1427 	      /* It's value is the size (in bytes) of the function for
   1428 		 function relative stabs, or the address of the function's
   1429 		 end for old style stabs.  */
   1430 	      valu = nlist.n_value + last_function_start;
   1431 	      if (pst->raw_text_high () == 0 || valu > pst->raw_text_high ())
   1432 		pst->set_text_high (valu);
   1433 	      break;
   1434 	    }
   1435 
   1436 	  p = (char *) strchr (namestring, ':');
   1437 	  if (!p)
   1438 	    continue;		/* Not a debugging symbol.   */
   1439 
   1440  	  sym_len = 0;
   1441 	  sym_name = NULL;	/* pacify "gcc -Werror" */
   1442  	  if (psymtab_language == language_cplus)
   1443  	    {
   1444 	      std::string name (namestring, p - namestring);
   1445 	      gdb::unique_xmalloc_ptr<char> new_name
   1446 		= cp_canonicalize_string (name.c_str ());
   1447 	      if (new_name != nullptr)
   1448 		{
   1449 		  sym_len = strlen (new_name.get ());
   1450 		  sym_name = obstack_strdup (&objfile->objfile_obstack,
   1451 					     new_name.get ());
   1452 		}
   1453 	    }
   1454 
   1455  	  if (sym_len == 0)
   1456  	    {
   1457  	      sym_name = namestring;
   1458  	      sym_len = p - namestring;
   1459  	    }
   1460 
   1461 	  /* Main processing section for debugging symbols which
   1462 	     the initial read through the symbol tables needs to worry
   1463 	     about.  If we reach this point, the symbol which we are
   1464 	     considering is definitely one we are interested in.
   1465 	     p must also contain the (valid) index into the namestring
   1466 	     which indicates the debugging type symbol.  */
   1467 
   1468 	  switch (p[1])
   1469 	    {
   1470 	    case 'S':
   1471 	      add_psymbol_to_list (gdb::string_view (sym_name, sym_len), true,
   1472 				   VAR_DOMAIN, LOC_STATIC,
   1473 				   data_sect_index,
   1474 				   psymbol_placement::STATIC,
   1475 				   nlist.n_value, psymtab_language, objfile);
   1476 	      continue;
   1477 
   1478 	    case 'G':
   1479 	      /* The addresses in these entries are reported to be
   1480 		 wrong.  See the code that reads 'G's for symtabs.  */
   1481 	      add_psymbol_to_list (gdb::string_view (sym_name, sym_len), true,
   1482 				   VAR_DOMAIN, LOC_STATIC,
   1483 				   data_sect_index,
   1484 				   psymbol_placement::GLOBAL,
   1485 				   nlist.n_value, psymtab_language, objfile);
   1486 	      continue;
   1487 
   1488 	    case 'T':
   1489 	      /* When a 'T' entry is defining an anonymous enum, it
   1490 		 may have a name which is the empty string, or a
   1491 		 single space.  Since they're not really defining a
   1492 		 symbol, those shouldn't go in the partial symbol
   1493 		 table.  We do pick up the elements of such enums at
   1494 		 'check_enum:', below.  */
   1495 	      if (p >= namestring + 2
   1496 		  || (p == namestring + 1
   1497 		      && namestring[0] != ' '))
   1498 		{
   1499 		  add_psymbol_to_list (gdb::string_view (sym_name, sym_len),
   1500 				       true, STRUCT_DOMAIN, LOC_TYPEDEF, -1,
   1501 				       psymbol_placement::STATIC,
   1502 				       0, psymtab_language, objfile);
   1503 		  if (p[2] == 't')
   1504 		    {
   1505 		      /* Also a typedef with the same name.  */
   1506 		      add_psymbol_to_list (gdb::string_view (sym_name, sym_len),
   1507 					   true, VAR_DOMAIN, LOC_TYPEDEF, -1,
   1508 					   psymbol_placement::STATIC,
   1509 					   0, psymtab_language, objfile);
   1510 		      p += 1;
   1511 		    }
   1512 		}
   1513 	      goto check_enum;
   1514 
   1515 	    case 't':
   1516 	      if (p != namestring)	/* a name is there, not just :T...  */
   1517 		{
   1518 		  add_psymbol_to_list (gdb::string_view (sym_name, sym_len),
   1519 				       true, VAR_DOMAIN, LOC_TYPEDEF, -1,
   1520 				       psymbol_placement::STATIC,
   1521 				       0, psymtab_language, objfile);
   1522 		}
   1523 	    check_enum:
   1524 	      /* If this is an enumerated type, we need to
   1525 		 add all the enum constants to the partial symbol
   1526 		 table.  This does not cover enums without names, e.g.
   1527 		 "enum {a, b} c;" in C, but fortunately those are
   1528 		 rare.  There is no way for GDB to find those from the
   1529 		 enum type without spending too much time on it.  Thus
   1530 		 to solve this problem, the compiler needs to put out the
   1531 		 enum in a nameless type.  GCC2 does this.  */
   1532 
   1533 	      /* We are looking for something of the form
   1534 		 <name> ":" ("t" | "T") [<number> "="] "e"
   1535 		 {<constant> ":" <value> ","} ";".  */
   1536 
   1537 	      /* Skip over the colon and the 't' or 'T'.  */
   1538 	      p += 2;
   1539 	      /* This type may be given a number.  Also, numbers can come
   1540 		 in pairs like (0,26).  Skip over it.  */
   1541 	      while ((*p >= '0' && *p <= '9')
   1542 		     || *p == '(' || *p == ',' || *p == ')'
   1543 		     || *p == '=')
   1544 		p++;
   1545 
   1546 	      if (*p++ == 'e')
   1547 		{
   1548 		  /* The aix4 compiler emits extra crud before the members.  */
   1549 		  if (*p == '-')
   1550 		    {
   1551 		      /* Skip over the type (?).  */
   1552 		      while (*p != ':')
   1553 			p++;
   1554 
   1555 		      /* Skip over the colon.  */
   1556 		      p++;
   1557 		    }
   1558 
   1559 		  /* We have found an enumerated type.  */
   1560 		  /* According to comments in read_enum_type
   1561 		     a comma could end it instead of a semicolon.
   1562 		     I don't know where that happens.
   1563 		     Accept either.  */
   1564 		  while (*p && *p != ';' && *p != ',')
   1565 		    {
   1566 		      const char *q;
   1567 
   1568 		      /* Check for and handle cretinous dbx symbol name
   1569 			 continuation!  */
   1570 		      if (*p == '\\' || (*p == '?' && p[1] == '\0'))
   1571 			p = next_symbol_text (objfile);
   1572 
   1573 		      /* Point to the character after the name
   1574 			 of the enum constant.  */
   1575 		      for (q = p; *q && *q != ':'; q++)
   1576 			;
   1577 		      /* Note that the value doesn't matter for
   1578 			 enum constants in psymtabs, just in symtabs.  */
   1579 		      add_psymbol_to_list (gdb::string_view (p, q - p), true,
   1580 					   VAR_DOMAIN, LOC_CONST, -1,
   1581 					   psymbol_placement::STATIC, 0,
   1582 					   psymtab_language, objfile);
   1583 		      /* Point past the name.  */
   1584 		      p = q;
   1585 		      /* Skip over the value.  */
   1586 		      while (*p && *p != ',')
   1587 			p++;
   1588 		      /* Advance past the comma.  */
   1589 		      if (*p)
   1590 			p++;
   1591 		    }
   1592 		}
   1593 	      continue;
   1594 
   1595 	    case 'c':
   1596 	      /* Constant, e.g. from "const" in Pascal.  */
   1597 	      add_psymbol_to_list (gdb::string_view (sym_name, sym_len), true,
   1598 				   VAR_DOMAIN, LOC_CONST, -1,
   1599 				   psymbol_placement::STATIC, 0,
   1600 				   psymtab_language, objfile);
   1601 	      continue;
   1602 
   1603 	    case 'f':
   1604 	      if (! pst)
   1605 		{
   1606 		  int name_len = p - namestring;
   1607 		  char *name = (char *) xmalloc (name_len + 1);
   1608 
   1609 		  memcpy (name, namestring, name_len);
   1610 		  name[name_len] = '\0';
   1611 		  function_outside_compilation_unit_complaint (name);
   1612 		  xfree (name);
   1613 		}
   1614 	      /* Kludges for ELF/STABS with Sun ACC.  */
   1615 	      last_function_name = namestring;
   1616 	      /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
   1617 		 value for the bottom of the text seg in those cases.  */
   1618 	      if (nlist.n_value == 0
   1619 		  && gdbarch_sofun_address_maybe_missing (gdbarch))
   1620 		{
   1621 		  struct bound_minimal_symbol minsym
   1622 		    = find_stab_function (namestring,
   1623 					  pst ? pst->filename : NULL,
   1624 					  objfile);
   1625 		  if (minsym.minsym != NULL)
   1626 		    nlist.n_value = MSYMBOL_VALUE_RAW_ADDRESS (minsym.minsym);
   1627 		}
   1628 	      if (pst && textlow_not_set
   1629 		  && gdbarch_sofun_address_maybe_missing (gdbarch))
   1630 		{
   1631 		  pst->set_text_low (nlist.n_value);
   1632 		  textlow_not_set = 0;
   1633 		}
   1634 	      /* End kludge.  */
   1635 
   1636 	      /* Keep track of the start of the last function so we
   1637 		 can handle end of function symbols.  */
   1638 	      last_function_start = nlist.n_value;
   1639 
   1640 	      /* In reordered executables this function may lie outside
   1641 		 the bounds created by N_SO symbols.  If that's the case
   1642 		 use the address of this function as the low bound for
   1643 		 the partial symbol table.  */
   1644 	      if (pst
   1645 		  && (textlow_not_set
   1646 		      || (nlist.n_value < pst->raw_text_low ()
   1647 			  && (nlist.n_value != 0))))
   1648 		{
   1649 		  pst->set_text_low (nlist.n_value);
   1650 		  textlow_not_set = 0;
   1651 		}
   1652 	      add_psymbol_to_list (gdb::string_view (sym_name, sym_len), true,
   1653 				   VAR_DOMAIN, LOC_BLOCK,
   1654 				   SECT_OFF_TEXT (objfile),
   1655 				   psymbol_placement::STATIC,
   1656 				   nlist.n_value, psymtab_language, objfile);
   1657 	      continue;
   1658 
   1659 	      /* Global functions were ignored here, but now they
   1660 		 are put into the global psymtab like one would expect.
   1661 		 They're also in the minimal symbol table.  */
   1662 	    case 'F':
   1663 	      if (! pst)
   1664 		{
   1665 		  int name_len = p - namestring;
   1666 		  char *name = (char *) xmalloc (name_len + 1);
   1667 
   1668 		  memcpy (name, namestring, name_len);
   1669 		  name[name_len] = '\0';
   1670 		  function_outside_compilation_unit_complaint (name);
   1671 		  xfree (name);
   1672 		}
   1673 	      /* Kludges for ELF/STABS with Sun ACC.  */
   1674 	      last_function_name = namestring;
   1675 	      /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
   1676 		 value for the bottom of the text seg in those cases.  */
   1677 	      if (nlist.n_value == 0
   1678 		  && gdbarch_sofun_address_maybe_missing (gdbarch))
   1679 		{
   1680 		  struct bound_minimal_symbol minsym
   1681 		    = find_stab_function (namestring,
   1682 					  pst ? pst->filename : NULL,
   1683 					  objfile);
   1684 		  if (minsym.minsym != NULL)
   1685 		    nlist.n_value = MSYMBOL_VALUE_RAW_ADDRESS (minsym.minsym);
   1686 		}
   1687 	      if (pst && textlow_not_set
   1688 		  && gdbarch_sofun_address_maybe_missing (gdbarch))
   1689 		{
   1690 		  pst->set_text_low (nlist.n_value);
   1691 		  textlow_not_set = 0;
   1692 		}
   1693 	      /* End kludge.  */
   1694 
   1695 	      /* Keep track of the start of the last function so we
   1696 		 can handle end of function symbols.  */
   1697 	      last_function_start = nlist.n_value;
   1698 
   1699 	      /* In reordered executables this function may lie outside
   1700 		 the bounds created by N_SO symbols.  If that's the case
   1701 		 use the address of this function as the low bound for
   1702 		 the partial symbol table.  */
   1703 	      if (pst
   1704 		  && (textlow_not_set
   1705 		      || (nlist.n_value < pst->raw_text_low ()
   1706 			  && (nlist.n_value != 0))))
   1707 		{
   1708 		  pst->set_text_low (nlist.n_value);
   1709 		  textlow_not_set = 0;
   1710 		}
   1711 	      add_psymbol_to_list (gdb::string_view (sym_name, sym_len), true,
   1712 				   VAR_DOMAIN, LOC_BLOCK,
   1713 				   SECT_OFF_TEXT (objfile),
   1714 				   psymbol_placement::GLOBAL,
   1715 				   nlist.n_value, psymtab_language, objfile);
   1716 	      continue;
   1717 
   1718 	      /* Two things show up here (hopefully); static symbols of
   1719 		 local scope (static used inside braces) or extensions
   1720 		 of structure symbols.  We can ignore both.  */
   1721 	    case 'V':
   1722 	    case '(':
   1723 	    case '0':
   1724 	    case '1':
   1725 	    case '2':
   1726 	    case '3':
   1727 	    case '4':
   1728 	    case '5':
   1729 	    case '6':
   1730 	    case '7':
   1731 	    case '8':
   1732 	    case '9':
   1733 	    case '-':
   1734 	    case '#':	/* For symbol identification (used in live ranges).  */
   1735 	      continue;
   1736 
   1737 	    case ':':
   1738 	      /* It is a C++ nested symbol.  We don't need to record it
   1739 		 (I don't think); if we try to look up foo::bar::baz,
   1740 		 then symbols for the symtab containing foo should get
   1741 		 read in, I think.  */
   1742 	      /* Someone says sun cc puts out symbols like
   1743 		 /foo/baz/maclib::/usr/local/bin/maclib,
   1744 		 which would get here with a symbol type of ':'.  */
   1745 	      continue;
   1746 
   1747 	    default:
   1748 	      /* Unexpected symbol descriptor.  The second and subsequent stabs
   1749 		 of a continued stab can show up here.  The question is
   1750 		 whether they ever can mimic a normal stab--it would be
   1751 		 nice if not, since we certainly don't want to spend the
   1752 		 time searching to the end of every string looking for
   1753 		 a backslash.  */
   1754 
   1755 	      complaint (_("unknown symbol descriptor `%c'"),
   1756 			 p[1]);
   1757 
   1758 	      /* Ignore it; perhaps it is an extension that we don't
   1759 		 know about.  */
   1760 	      continue;
   1761 	    }
   1762 	}
   1763 
   1764 	case N_EXCL:
   1765 
   1766 	  namestring = set_namestring (objfile, &nlist);
   1767 
   1768 	  /* Find the corresponding bincl and mark that psymtab on the
   1769 	     psymtab dependency list.  */
   1770 	  {
   1771 	    legacy_psymtab *needed_pst =
   1772 	      find_corresponding_bincl_psymtab (namestring, nlist.n_value);
   1773 
   1774 	    /* If this include file was defined earlier in this file,
   1775 	       leave it alone.  */
   1776 	    if (needed_pst == pst)
   1777 	      continue;
   1778 
   1779 	    if (needed_pst)
   1780 	      {
   1781 		int i;
   1782 		int found = 0;
   1783 
   1784 		for (i = 0; i < dependencies_used; i++)
   1785 		  if (dependency_list[i] == needed_pst)
   1786 		    {
   1787 		      found = 1;
   1788 		      break;
   1789 		    }
   1790 
   1791 		/* If it's already in the list, skip the rest.  */
   1792 		if (found)
   1793 		  continue;
   1794 
   1795 		dependency_list[dependencies_used++] = needed_pst;
   1796 		if (dependencies_used >= dependencies_allocated)
   1797 		  {
   1798 		    legacy_psymtab **orig = dependency_list;
   1799 
   1800 		    dependency_list =
   1801 		      (legacy_psymtab **)
   1802 		      alloca ((dependencies_allocated *= 2)
   1803 			      * sizeof (legacy_psymtab *));
   1804 		    memcpy (dependency_list, orig,
   1805 			    (dependencies_used
   1806 			     * sizeof (legacy_psymtab *)));
   1807 #ifdef DEBUG_INFO
   1808 		    fprintf_unfiltered (gdb_stderr,
   1809 					"Had to reallocate "
   1810 					"dependency list.\n");
   1811 		    fprintf_unfiltered (gdb_stderr,
   1812 					"New dependencies allocated: %d\n",
   1813 					dependencies_allocated);
   1814 #endif
   1815 		  }
   1816 	      }
   1817 	  }
   1818 	  continue;
   1819 
   1820 	case N_ENDM:
   1821 	  /* Solaris 2 end of module, finish current partial symbol
   1822 	     table.  dbx_end_psymtab will set the high text address of
   1823 	     PST to the proper value, which is necessary if a module
   1824 	     compiled without debugging info follows this module.  */
   1825 	  if (pst && gdbarch_sofun_address_maybe_missing (gdbarch))
   1826 	    {
   1827 	      dbx_end_psymtab (objfile, pst,
   1828 			       psymtab_include_list, includes_used,
   1829 			       symnum * symbol_size,
   1830 			       (CORE_ADDR) 0, dependency_list,
   1831 			       dependencies_used, textlow_not_set);
   1832 	      pst = (legacy_psymtab *) 0;
   1833 	      includes_used = 0;
   1834 	      dependencies_used = 0;
   1835 	      has_line_numbers = 0;
   1836 	    }
   1837 	  continue;
   1838 
   1839 	case N_RBRAC:
   1840 #ifdef HANDLE_RBRAC
   1841 	  HANDLE_RBRAC (nlist.n_value);
   1842 	  continue;
   1843 #endif
   1844 	case N_EINCL:
   1845 	case N_DSLINE:
   1846 	case N_BSLINE:
   1847 	case N_SSYM:		/* Claim: Structure or union element.
   1848 				   Hopefully, I can ignore this.  */
   1849 	case N_ENTRY:		/* Alternate entry point; can ignore.  */
   1850 	case N_MAIN:		/* Can definitely ignore this.   */
   1851 	case N_CATCH:		/* These are GNU C++ extensions */
   1852 	case N_EHDECL:		/* that can safely be ignored here.  */
   1853 	case N_LENG:
   1854 	case N_BCOMM:
   1855 	case N_ECOMM:
   1856 	case N_ECOML:
   1857 	case N_FNAME:
   1858 	case N_SLINE:
   1859 	case N_RSYM:
   1860 	case N_PSYM:
   1861 	case N_BNSYM:
   1862 	case N_ENSYM:
   1863 	case N_LBRAC:
   1864 	case N_NSYMS:		/* Ultrix 4.0: symbol count */
   1865 	case N_DEFD:		/* GNU Modula-2 */
   1866 	case N_ALIAS:		/* SunPro F77: alias name, ignore for now.  */
   1867 
   1868 	case N_OBJ:		/* Useless types from Solaris.  */
   1869 	case N_OPT:
   1870 	case N_PATCH:
   1871 	  /* These symbols aren't interesting; don't worry about them.  */
   1872 	  continue;
   1873 
   1874 	default:
   1875 	  /* If we haven't found it yet, ignore it.  It's probably some
   1876 	     new type we don't know about yet.  */
   1877 	  unknown_symtype_complaint (hex_string (nlist.n_type));
   1878 	  continue;
   1879 	}
   1880     }
   1881 
   1882   /* If there's stuff to be cleaned up, clean it up.  */
   1883   if (pst)
   1884     {
   1885       /* Don't set high text address of PST lower than it already
   1886 	 is.  */
   1887       CORE_ADDR text_end =
   1888 	(lowest_text_address == (CORE_ADDR) -1
   1889 	 ? text_addr
   1890 	 : lowest_text_address)
   1891 	+ text_size;
   1892 
   1893       dbx_end_psymtab (objfile, pst, psymtab_include_list, includes_used,
   1894 		       symnum * symbol_size,
   1895 		       (text_end > pst->raw_text_high ()
   1896 			? text_end : pst->raw_text_high ()),
   1897 		       dependency_list, dependencies_used, textlow_not_set);
   1898     }
   1899 }
   1900 
   1901 /* Allocate and partially fill a partial symtab.  It will be
   1902    completely filled at the end of the symbol list.
   1903 
   1904    SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
   1905    is the address relative to which its symbols are (incremental) or 0
   1906    (normal).  */
   1907 
   1908 static legacy_psymtab *
   1909 start_psymtab (struct objfile *objfile, const char *filename, CORE_ADDR textlow,
   1910 	       int ldsymoff)
   1911 {
   1912   legacy_psymtab *result = new legacy_psymtab (filename, objfile, textlow);
   1913 
   1914   result->read_symtab_private =
   1915     XOBNEW (&objfile->objfile_obstack, struct symloc);
   1916   LDSYMOFF (result) = ldsymoff;
   1917   result->legacy_read_symtab = dbx_read_symtab;
   1918   result->legacy_expand_psymtab = dbx_expand_psymtab;
   1919   SYMBOL_SIZE (result) = symbol_size;
   1920   SYMBOL_OFFSET (result) = symbol_table_offset;
   1921   STRING_OFFSET (result) = string_table_offset;
   1922   FILE_STRING_OFFSET (result) = file_string_table_offset;
   1923 
   1924   /* Deduce the source language from the filename for this psymtab.  */
   1925   psymtab_language = deduce_language_from_filename (filename);
   1926   PST_LANGUAGE (result) = psymtab_language;
   1927 
   1928   return result;
   1929 }
   1930 
   1931 /* Close off the current usage of PST.
   1932    Returns PST or NULL if the partial symtab was empty and thrown away.
   1933 
   1934    FIXME:  List variables and peculiarities of same.  */
   1935 
   1936 legacy_psymtab *
   1937 dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst,
   1938 		 const char **include_list, int num_includes,
   1939 		 int capping_symbol_offset, CORE_ADDR capping_text,
   1940 		 legacy_psymtab **dependency_list,
   1941 		 int number_dependencies,
   1942 		 int textlow_not_set)
   1943 {
   1944   int i;
   1945   struct gdbarch *gdbarch = objfile->arch ();
   1946 
   1947   if (capping_symbol_offset != -1)
   1948     LDSYMLEN (pst) = capping_symbol_offset - LDSYMOFF (pst);
   1949   pst->set_text_high (capping_text);
   1950 
   1951   /* Under Solaris, the N_SO symbols always have a value of 0,
   1952      instead of the usual address of the .o file.  Therefore,
   1953      we have to do some tricks to fill in texthigh and textlow.
   1954      The first trick is: if we see a static
   1955      or global function, and the textlow for the current pst
   1956      is not set (ie: textlow_not_set), then we use that function's
   1957      address for the textlow of the pst.  */
   1958 
   1959   /* Now, to fill in texthigh, we remember the last function seen
   1960      in the .o file.  Also, there's a hack in
   1961      bfd/elf.c and gdb/elfread.c to pass the ELF st_size field
   1962      to here via the misc_info field.  Therefore, we can fill in
   1963      a reliable texthigh by taking the address plus size of the
   1964      last function in the file.  */
   1965 
   1966   if (!pst->text_high_valid && last_function_name
   1967       && gdbarch_sofun_address_maybe_missing (gdbarch))
   1968     {
   1969       int n;
   1970       struct bound_minimal_symbol minsym;
   1971 
   1972       const char *colon = strchr (last_function_name, ':');
   1973       if (colon == NULL)
   1974 	n = 0;
   1975       else
   1976 	n = colon - last_function_name;
   1977       char *p = (char *) alloca (n + 2);
   1978       strncpy (p, last_function_name, n);
   1979       p[n] = 0;
   1980 
   1981       minsym = lookup_minimal_symbol (p, pst->filename, objfile);
   1982       if (minsym.minsym == NULL)
   1983 	{
   1984 	  /* Sun Fortran appends an underscore to the minimal symbol name,
   1985 	     try again with an appended underscore if the minimal symbol
   1986 	     was not found.  */
   1987 	  p[n] = '_';
   1988 	  p[n + 1] = 0;
   1989 	  minsym = lookup_minimal_symbol (p, pst->filename, objfile);
   1990 	}
   1991 
   1992       if (minsym.minsym)
   1993 	pst->set_text_high (MSYMBOL_VALUE_RAW_ADDRESS (minsym.minsym)
   1994 			    + MSYMBOL_SIZE (minsym.minsym));
   1995 
   1996       last_function_name = NULL;
   1997     }
   1998 
   1999   if (!gdbarch_sofun_address_maybe_missing (gdbarch))
   2000     ;
   2001   /* This test will be true if the last .o file is only data.  */
   2002   else if (textlow_not_set)
   2003     pst->set_text_low (pst->raw_text_high ());
   2004   else
   2005     {
   2006       /* If we know our own starting text address, then walk through all other
   2007          psymtabs for this objfile, and if any didn't know their ending text
   2008          address, set it to our starting address.  Take care to not set our
   2009          own ending address to our starting address.  */
   2010 
   2011       for (partial_symtab *p1 : objfile->psymtabs ())
   2012 	if (!p1->text_high_valid && p1->text_low_valid && p1 != pst)
   2013 	  p1->set_text_high (pst->raw_text_low ());
   2014     }
   2015 
   2016   /* End of kludge for patching Solaris textlow and texthigh.  */
   2017 
   2018   end_psymtab_common (objfile, pst);
   2019 
   2020   pst->number_of_dependencies = number_dependencies;
   2021   if (number_dependencies)
   2022     {
   2023       pst->dependencies
   2024 	= objfile->partial_symtabs->allocate_dependencies (number_dependencies);
   2025       memcpy (pst->dependencies, dependency_list,
   2026 	      number_dependencies * sizeof (legacy_psymtab *));
   2027     }
   2028   else
   2029     pst->dependencies = 0;
   2030 
   2031   for (i = 0; i < num_includes; i++)
   2032     {
   2033       legacy_psymtab *subpst =
   2034 	new legacy_psymtab (include_list[i], objfile);
   2035 
   2036       subpst->read_symtab_private =
   2037 	XOBNEW (&objfile->objfile_obstack, struct symloc);
   2038       LDSYMOFF (subpst) =
   2039 	LDSYMLEN (subpst) = 0;
   2040 
   2041       /* We could save slight bits of space by only making one of these,
   2042          shared by the entire set of include files.  FIXME-someday.  */
   2043       subpst->dependencies =
   2044 	objfile->partial_symtabs->allocate_dependencies (1);
   2045       subpst->dependencies[0] = pst;
   2046       subpst->number_of_dependencies = 1;
   2047 
   2048       subpst->legacy_read_symtab = pst->legacy_read_symtab;
   2049       subpst->legacy_expand_psymtab = pst->legacy_expand_psymtab;
   2050     }
   2051 
   2052   if (num_includes == 0
   2053       && number_dependencies == 0
   2054       && pst->n_global_syms == 0
   2055       && pst->n_static_syms == 0
   2056       && has_line_numbers == 0)
   2057     {
   2058       /* Throw away this psymtab, it's empty.  */
   2059       /* Empty psymtabs happen as a result of header files which don't have
   2060          any symbols in them.  There can be a lot of them.  But this check
   2061          is wrong, in that a psymtab with N_SLINE entries but nothing else
   2062          is not empty, but we don't realize that.  Fixing that without slowing
   2063          things down might be tricky.  */
   2064 
   2065       objfile->partial_symtabs->discard_psymtab (pst);
   2066 
   2067       /* Indicate that psymtab was thrown away.  */
   2068       pst = NULL;
   2069     }
   2070   return pst;
   2071 }
   2072 
   2073 static void
   2075 dbx_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile)
   2076 {
   2077   gdb_assert (!pst->readin);
   2078 
   2079   /* Read in all partial symtabs on which this one is dependent.  */
   2080   pst->expand_dependencies (objfile);
   2081 
   2082   if (LDSYMLEN (pst))		/* Otherwise it's a dummy.  */
   2083     {
   2084       /* Init stuff necessary for reading in symbols */
   2085       stabsread_init ();
   2086       scoped_free_pendings free_pending;
   2087       file_string_table_offset = FILE_STRING_OFFSET (pst);
   2088       symbol_size = SYMBOL_SIZE (pst);
   2089 
   2090       /* Read in this file's symbols.  */
   2091       bfd_seek (objfile->obfd, SYMBOL_OFFSET (pst), SEEK_SET);
   2092       read_ofile_symtab (objfile, pst);
   2093     }
   2094 
   2095   pst->readin = true;
   2096 }
   2097 
   2098 /* Read in all of the symbols for a given psymtab for real.
   2099    Be verbose about it if the user wants that.  SELF is not NULL.  */
   2100 
   2101 static void
   2102 dbx_read_symtab (legacy_psymtab *self, struct objfile *objfile)
   2103 {
   2104   gdb_assert (!self->readin);
   2105 
   2106   if (LDSYMLEN (self) || self->number_of_dependencies)
   2107     {
   2108       next_symbol_text_func = dbx_next_symbol_text;
   2109 
   2110       {
   2111 	scoped_restore restore_stabs_data = make_scoped_restore (&stabs_data);
   2112 	gdb::unique_xmalloc_ptr<gdb_byte> data_holder;
   2113 	if (DBX_STAB_SECTION (objfile))
   2114 	  {
   2115 	    stabs_data
   2116 	      = symfile_relocate_debug_section (objfile,
   2117 						DBX_STAB_SECTION (objfile),
   2118 						NULL);
   2119 	    data_holder.reset (stabs_data);
   2120 	  }
   2121 
   2122 	self->expand_psymtab (objfile);
   2123       }
   2124 
   2125       /* Match with global symbols.  This only needs to be done once,
   2126          after all of the symtabs and dependencies have been read in.   */
   2127       scan_file_globals (objfile);
   2128     }
   2129 }
   2130 
   2131 /* Read in a defined section of a specific object file's symbols.  */
   2132 
   2133 static void
   2134 read_ofile_symtab (struct objfile *objfile, legacy_psymtab *pst)
   2135 {
   2136   const char *namestring;
   2137   struct external_nlist *bufp;
   2138   struct internal_nlist nlist;
   2139   unsigned char type;
   2140   unsigned max_symnum;
   2141   bfd *abfd;
   2142   int sym_offset;		/* Offset to start of symbols to read */
   2143   int sym_size;			/* Size of symbols to read */
   2144   CORE_ADDR text_offset;	/* Start of text segment for symbols */
   2145   int text_size;		/* Size of text segment for symbols */
   2146 
   2147   sym_offset = LDSYMOFF (pst);
   2148   sym_size = LDSYMLEN (pst);
   2149   text_offset = pst->text_low (objfile);
   2150   text_size = pst->text_high (objfile) - pst->text_low (objfile);
   2151   const section_offsets &section_offsets = objfile->section_offsets;
   2152 
   2153   dbxread_objfile = objfile;
   2154 
   2155   stringtab_global = DBX_STRINGTAB (objfile);
   2156   set_last_source_file (NULL);
   2157 
   2158   abfd = objfile->obfd;
   2159   symfile_bfd = objfile->obfd;	/* Implicit param to next_text_symbol.  */
   2160   symbuf_end = symbuf_idx = 0;
   2161   symbuf_read = 0;
   2162   symbuf_left = sym_offset + sym_size;
   2163 
   2164   /* It is necessary to actually read one symbol *before* the start
   2165      of this symtab's symbols, because the GCC_COMPILED_FLAG_SYMBOL
   2166      occurs before the N_SO symbol.
   2167 
   2168      Detecting this in read_dbx_symtab
   2169      would slow down initial readin, so we look for it here instead.  */
   2170   if (!processing_acc_compilation && sym_offset >= (int) symbol_size)
   2171     {
   2172       stabs_seek (sym_offset - symbol_size);
   2173       fill_symbuf (abfd);
   2174       bufp = &symbuf[symbuf_idx++];
   2175       INTERNALIZE_SYMBOL (nlist, bufp, abfd);
   2176       OBJSTAT (objfile, n_stabs++);
   2177 
   2178       namestring = set_namestring (objfile, &nlist);
   2179 
   2180       processing_gcc_compilation = 0;
   2181       if (nlist.n_type == N_TEXT)
   2182 	{
   2183 	  const char *tempstring = namestring;
   2184 
   2185 	  if (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0)
   2186 	    processing_gcc_compilation = 1;
   2187 	  else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0)
   2188 	    processing_gcc_compilation = 2;
   2189 	  if (tempstring[0] == bfd_get_symbol_leading_char (symfile_bfd))
   2190 	    ++tempstring;
   2191 	  if (startswith (tempstring, "__gnu_compiled"))
   2192 	    processing_gcc_compilation = 2;
   2193 	}
   2194     }
   2195   else
   2196     {
   2197       /* The N_SO starting this symtab is the first symbol, so we
   2198          better not check the symbol before it.  I'm not this can
   2199          happen, but it doesn't hurt to check for it.  */
   2200       stabs_seek (sym_offset);
   2201       processing_gcc_compilation = 0;
   2202     }
   2203 
   2204   if (symbuf_idx == symbuf_end)
   2205     fill_symbuf (abfd);
   2206   bufp = &symbuf[symbuf_idx];
   2207   if (bfd_h_get_8 (abfd, bufp->e_type) != N_SO)
   2208     error (_("First symbol in segment of executable not a source symbol"));
   2209 
   2210   max_symnum = sym_size / symbol_size;
   2211 
   2212   for (symnum = 0;
   2213        symnum < max_symnum;
   2214        symnum++)
   2215     {
   2216       QUIT;			/* Allow this to be interruptable.  */
   2217       if (symbuf_idx == symbuf_end)
   2218 	fill_symbuf (abfd);
   2219       bufp = &symbuf[symbuf_idx++];
   2220       INTERNALIZE_SYMBOL (nlist, bufp, abfd);
   2221       OBJSTAT (objfile, n_stabs++);
   2222 
   2223       type = bfd_h_get_8 (abfd, bufp->e_type);
   2224 
   2225       namestring = set_namestring (objfile, &nlist);
   2226 
   2227       if (type & N_STAB)
   2228 	{
   2229 	  if (sizeof (nlist.n_value) > 4
   2230 	      /* We are a 64-bit debugger debugging a 32-bit program.  */
   2231 	      && (type == N_LSYM || type == N_PSYM))
   2232 	      /* We have to be careful with the n_value in the case of N_LSYM
   2233 		 and N_PSYM entries, because they are signed offsets from frame
   2234 		 pointer, but we actually read them as unsigned 32-bit values.
   2235 		 This is not a problem for 32-bit debuggers, for which negative
   2236 		 values end up being interpreted correctly (as negative
   2237 		 offsets) due to integer overflow.
   2238 		 But we need to sign-extend the value for 64-bit debuggers,
   2239 		 or we'll end up interpreting negative values as very large
   2240 		 positive offsets.  */
   2241 	    nlist.n_value = (nlist.n_value ^ 0x80000000) - 0x80000000;
   2242 	  process_one_symbol (type, nlist.n_desc, nlist.n_value,
   2243 			      namestring, section_offsets, objfile,
   2244 			      PST_LANGUAGE (pst));
   2245 	}
   2246       /* We skip checking for a new .o or -l file; that should never
   2247          happen in this routine.  */
   2248       else if (type == N_TEXT)
   2249 	{
   2250 	  /* I don't think this code will ever be executed, because
   2251 	     the GCC_COMPILED_FLAG_SYMBOL usually is right before
   2252 	     the N_SO symbol which starts this source file.
   2253 	     However, there is no reason not to accept
   2254 	     the GCC_COMPILED_FLAG_SYMBOL anywhere.  */
   2255 
   2256 	  if (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0)
   2257 	    processing_gcc_compilation = 1;
   2258 	  else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0)
   2259 	    processing_gcc_compilation = 2;
   2260 	}
   2261       else if (type & N_EXT || type == (unsigned char) N_TEXT
   2262 	       || type == (unsigned char) N_NBTEXT)
   2263 	{
   2264 	  /* Global symbol: see if we came across a dbx definition for
   2265 	     a corresponding symbol.  If so, store the value.  Remove
   2266 	     syms from the chain when their values are stored, but
   2267 	     search the whole chain, as there may be several syms from
   2268 	     different files with the same name.  */
   2269 	  /* This is probably not true.  Since the files will be read
   2270 	     in one at a time, each reference to a global symbol will
   2271 	     be satisfied in each file as it appears.  So we skip this
   2272 	     section.  */
   2273 	  ;
   2274 	}
   2275     }
   2276 
   2277   /* In a Solaris elf file, this variable, which comes from the value
   2278      of the N_SO symbol, will still be 0.  Luckily, text_offset, which
   2279      comes from low text address of PST, is correct.  */
   2280   if (get_last_source_start_addr () == 0)
   2281     set_last_source_start_addr (text_offset);
   2282 
   2283   /* In reordered executables last_source_start_addr may not be the
   2284      lower bound for this symtab, instead use text_offset which comes
   2285      from the low text address of PST, which is correct.  */
   2286   if (get_last_source_start_addr () > text_offset)
   2287     set_last_source_start_addr (text_offset);
   2288 
   2289   pst->compunit_symtab = end_symtab (text_offset + text_size,
   2290 				     SECT_OFF_TEXT (objfile));
   2291 
   2292   end_stabs ();
   2293 
   2294   dbxread_objfile = NULL;
   2295 }
   2296 
   2297 
   2299 /* Record the namespace that the function defined by SYMBOL was
   2300    defined in, if necessary.  BLOCK is the associated block; use
   2301    OBSTACK for allocation.  */
   2302 
   2303 static void
   2304 cp_set_block_scope (const struct symbol *symbol,
   2305 		    struct block *block,
   2306 		    struct obstack *obstack)
   2307 {
   2308   if (symbol->demangled_name () != NULL)
   2309     {
   2310       /* Try to figure out the appropriate namespace from the
   2311 	 demangled name.  */
   2312 
   2313       /* FIXME: carlton/2003-04-15: If the function in question is
   2314 	 a method of a class, the name will actually include the
   2315 	 name of the class as well.  This should be harmless, but
   2316 	 is a little unfortunate.  */
   2317 
   2318       const char *name = symbol->demangled_name ();
   2319       unsigned int prefix_len = cp_entire_prefix_len (name);
   2320 
   2321       block_set_scope (block, obstack_strndup (obstack, name, prefix_len),
   2322 		       obstack);
   2323     }
   2324 }
   2325 
   2326 /* This handles a single symbol from the symbol-file, building symbols
   2327    into a GDB symtab.  It takes these arguments and an implicit argument.
   2328 
   2329    TYPE is the type field of the ".stab" symbol entry.
   2330    DESC is the desc field of the ".stab" entry.
   2331    VALU is the value field of the ".stab" entry.
   2332    NAME is the symbol name, in our address space.
   2333    SECTION_OFFSETS is a set of amounts by which the sections of this
   2334    object file were relocated when it was loaded into memory.  Note
   2335    that these section_offsets are not the objfile->section_offsets but
   2336    the pst->section_offsets.  All symbols that refer to memory
   2337    locations need to be offset by these amounts.
   2338    OBJFILE is the object file from which we are reading symbols.  It
   2339    is used in end_symtab.
   2340    LANGUAGE is the language of the symtab.
   2341 */
   2342 
   2343 void
   2344 process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
   2345 		    const section_offsets &section_offsets,
   2346 		    struct objfile *objfile, enum language language)
   2347 {
   2348   struct gdbarch *gdbarch = objfile->arch ();
   2349   struct context_stack *newobj;
   2350   struct context_stack cstk;
   2351   /* This remembers the address of the start of a function.  It is
   2352      used because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries
   2353      are relative to the current function's start address.  On systems
   2354      other than Solaris 2, this just holds the SECT_OFF_TEXT value,
   2355      and is used to relocate these symbol types rather than
   2356      SECTION_OFFSETS.  */
   2357   static CORE_ADDR function_start_offset;
   2358 
   2359   /* This holds the address of the start of a function, without the
   2360      system peculiarities of function_start_offset.  */
   2361   static CORE_ADDR last_function_start;
   2362 
   2363   /* If this is nonzero, we've seen an N_SLINE since the start of the
   2364      current function.  We use this to tell us to move the first sline
   2365      to the beginning of the function regardless of what its given
   2366      value is.  */
   2367   static int sline_found_in_function = 1;
   2368 
   2369   /* If this is nonzero, we've seen a non-gcc N_OPT symbol for this
   2370      source file.  Used to detect the SunPRO solaris compiler.  */
   2371   static int n_opt_found;
   2372 
   2373   /* Something is wrong if we see real data before seeing a source
   2374      file name.  */
   2375 
   2376   if (get_last_source_file () == NULL && type != (unsigned char) N_SO)
   2377     {
   2378       /* Ignore any symbols which appear before an N_SO symbol.
   2379          Currently no one puts symbols there, but we should deal
   2380          gracefully with the case.  A complain()t might be in order,
   2381          but this should not be an error ().  */
   2382       return;
   2383     }
   2384 
   2385   switch (type)
   2386     {
   2387     case N_FUN:
   2388     case N_FNAME:
   2389 
   2390       if (*name == '\000')
   2391 	{
   2392 	  /* This N_FUN marks the end of a function.  This closes off
   2393 	     the current block.  */
   2394 	  struct block *block;
   2395 
   2396 	  if (outermost_context_p ())
   2397  	    {
   2398 	      lbrac_mismatch_complaint (symnum);
   2399  	      break;
   2400  	    }
   2401 
   2402 	  /* The following check is added before recording line 0 at
   2403 	     end of function so as to handle hand-generated stabs
   2404 	     which may have an N_FUN stabs at the end of the function,
   2405 	     but no N_SLINE stabs.  */
   2406 	  if (sline_found_in_function)
   2407 	    {
   2408 	      CORE_ADDR addr = last_function_start + valu;
   2409 
   2410 	      record_line (get_current_subfile (), 0,
   2411 			   gdbarch_addr_bits_remove (gdbarch, addr));
   2412 	    }
   2413 
   2414 	  within_function = 0;
   2415 	  cstk = pop_context ();
   2416 
   2417 	  /* Make a block for the local symbols within.  */
   2418 	  block = finish_block (cstk.name,
   2419 				cstk.old_blocks, NULL,
   2420 				cstk.start_addr, cstk.start_addr + valu);
   2421 
   2422 	  /* For C++, set the block's scope.  */
   2423 	  if (cstk.name->language () == language_cplus)
   2424 	    cp_set_block_scope (cstk.name, block, &objfile->objfile_obstack);
   2425 
   2426 	  /* May be switching to an assembler file which may not be using
   2427 	     block relative stabs, so reset the offset.  */
   2428 	  function_start_offset = 0;
   2429 
   2430 	  break;
   2431 	}
   2432 
   2433       sline_found_in_function = 0;
   2434 
   2435       /* Relocate for dynamic loading.  */
   2436       valu += section_offsets[SECT_OFF_TEXT (objfile)];
   2437       valu = gdbarch_addr_bits_remove (gdbarch, valu);
   2438       last_function_start = valu;
   2439 
   2440       goto define_a_symbol;
   2441 
   2442     case N_LBRAC:
   2443       /* This "symbol" just indicates the start of an inner lexical
   2444          context within a function.  */
   2445 
   2446       /* Ignore extra outermost context from SunPRO cc and acc.  */
   2447       if (n_opt_found && desc == 1)
   2448 	break;
   2449 
   2450       valu += function_start_offset;
   2451 
   2452       push_context (desc, valu);
   2453       break;
   2454 
   2455     case N_RBRAC:
   2456       /* This "symbol" just indicates the end of an inner lexical
   2457          context that was started with N_LBRAC.  */
   2458 
   2459       /* Ignore extra outermost context from SunPRO cc and acc.  */
   2460       if (n_opt_found && desc == 1)
   2461 	break;
   2462 
   2463       valu += function_start_offset;
   2464 
   2465       if (outermost_context_p ())
   2466 	{
   2467 	  lbrac_mismatch_complaint (symnum);
   2468 	  break;
   2469 	}
   2470 
   2471       cstk = pop_context ();
   2472       if (desc != cstk.depth)
   2473 	lbrac_mismatch_complaint (symnum);
   2474 
   2475       if (*get_local_symbols () != NULL)
   2476 	{
   2477 	  /* GCC development snapshots from March to December of
   2478 	     2000 would output N_LSYM entries after N_LBRAC
   2479 	     entries.  As a consequence, these symbols are simply
   2480 	     discarded.  Complain if this is the case.  */
   2481 	  complaint (_("misplaced N_LBRAC entry; discarding local "
   2482 		       "symbols which have no enclosing block"));
   2483 	}
   2484       *get_local_symbols () = cstk.locals;
   2485 
   2486       if (get_context_stack_depth () > 1)
   2487 	{
   2488 	  /* This is not the outermost LBRAC...RBRAC pair in the
   2489 	     function, its local symbols preceded it, and are the ones
   2490 	     just recovered from the context stack.  Define the block
   2491 	     for them (but don't bother if the block contains no
   2492 	     symbols.  Should we complain on blocks without symbols?
   2493 	     I can't think of any useful purpose for them).  */
   2494 	  if (*get_local_symbols () != NULL)
   2495 	    {
   2496 	      /* Muzzle a compiler bug that makes end < start.
   2497 
   2498 		 ??? Which compilers?  Is this ever harmful?.  */
   2499 	      if (cstk.start_addr > valu)
   2500 		{
   2501 		  complaint (_("block start larger than block end"));
   2502 		  cstk.start_addr = valu;
   2503 		}
   2504 	      /* Make a block for the local symbols within.  */
   2505 	      finish_block (0, cstk.old_blocks, NULL,
   2506 			    cstk.start_addr, valu);
   2507 	    }
   2508 	}
   2509       else
   2510 	{
   2511 	  /* This is the outermost LBRAC...RBRAC pair.  There is no
   2512 	     need to do anything; leave the symbols that preceded it
   2513 	     to be attached to the function's own block.  We need to
   2514 	     indicate that we just moved outside of the function.  */
   2515 	  within_function = 0;
   2516 	}
   2517 
   2518       break;
   2519 
   2520     case N_FN:
   2521     case N_FN_SEQ:
   2522       /* This kind of symbol indicates the start of an object file.
   2523          Relocate for dynamic loading.  */
   2524       valu += section_offsets[SECT_OFF_TEXT (objfile)];
   2525       break;
   2526 
   2527     case N_SO:
   2528       /* This type of symbol indicates the start of data for one
   2529          source file.  Finish the symbol table of the previous source
   2530          file (if any) and start accumulating a new symbol table.
   2531          Relocate for dynamic loading.  */
   2532       valu += section_offsets[SECT_OFF_TEXT (objfile)];
   2533 
   2534       n_opt_found = 0;
   2535 
   2536       if (get_last_source_file ())
   2537 	{
   2538 	  /* Check if previous symbol was also an N_SO (with some
   2539 	     sanity checks).  If so, that one was actually the
   2540 	     directory name, and the current one is the real file
   2541 	     name.  Patch things up.  */
   2542 	  if (previous_stab_code == (unsigned char) N_SO)
   2543 	    {
   2544 	      patch_subfile_names (get_current_subfile (), name);
   2545 	      break;		/* Ignore repeated SOs.  */
   2546 	    }
   2547 	  end_symtab (valu, SECT_OFF_TEXT (objfile));
   2548 	  end_stabs ();
   2549 	}
   2550 
   2551       /* Null name means this just marks the end of text for this .o
   2552          file.  Don't start a new symtab in this case.  */
   2553       if (*name == '\000')
   2554 	break;
   2555 
   2556       function_start_offset = 0;
   2557 
   2558       start_stabs ();
   2559       start_symtab (objfile, name, NULL, valu, language);
   2560       record_debugformat ("stabs");
   2561       break;
   2562 
   2563     case N_SOL:
   2564       /* This type of symbol indicates the start of data for a
   2565          sub-source-file, one whose contents were copied or included
   2566          in the compilation of the main source file (whose name was
   2567          given in the N_SO symbol).  Relocate for dynamic loading.  */
   2568       valu += section_offsets[SECT_OFF_TEXT (objfile)];
   2569       start_subfile (name);
   2570       break;
   2571 
   2572     case N_BINCL:
   2573       push_subfile ();
   2574       add_new_header_file (name, valu);
   2575       start_subfile (name);
   2576       break;
   2577 
   2578     case N_EINCL:
   2579       start_subfile (pop_subfile ());
   2580       break;
   2581 
   2582     case N_EXCL:
   2583       add_old_header_file (name, valu);
   2584       break;
   2585 
   2586     case N_SLINE:
   2587       /* This type of "symbol" really just records one line-number --
   2588          core-address correspondence.  Enter it in the line list for
   2589          this symbol table.  */
   2590 
   2591       /* Relocate for dynamic loading and for ELF acc
   2592          function-relative symbols.  */
   2593       valu += function_start_offset;
   2594 
   2595       /* GCC 2.95.3 emits the first N_SLINE stab somewhere in the
   2596 	 middle of the prologue instead of right at the start of the
   2597 	 function.  To deal with this we record the address for the
   2598 	 first N_SLINE stab to be the start of the function instead of
   2599 	 the listed location.  We really shouldn't to this.  When
   2600 	 compiling with optimization, this first N_SLINE stab might be
   2601 	 optimized away.  Other (non-GCC) compilers don't emit this
   2602 	 stab at all.  There is no real harm in having an extra
   2603 	 numbered line, although it can be a bit annoying for the
   2604 	 user.  However, it totally screws up our testsuite.
   2605 
   2606 	 So for now, keep adjusting the address of the first N_SLINE
   2607 	 stab, but only for code compiled with GCC.  */
   2608 
   2609       if (within_function && sline_found_in_function == 0)
   2610 	{
   2611 	  CORE_ADDR addr = processing_gcc_compilation == 2 ?
   2612 			   last_function_start : valu;
   2613 
   2614 	  record_line (get_current_subfile (), desc,
   2615 		       gdbarch_addr_bits_remove (gdbarch, addr));
   2616 	  sline_found_in_function = 1;
   2617 	}
   2618       else
   2619 	record_line (get_current_subfile (), desc,
   2620 		     gdbarch_addr_bits_remove (gdbarch, valu));
   2621       break;
   2622 
   2623     case N_BCOMM:
   2624       common_block_start (name, objfile);
   2625       break;
   2626 
   2627     case N_ECOMM:
   2628       common_block_end (objfile);
   2629       break;
   2630 
   2631       /* The following symbol types need to have the appropriate
   2632          offset added to their value; then we process symbol
   2633          definitions in the name.  */
   2634 
   2635     case N_STSYM:		/* Static symbol in data segment.  */
   2636     case N_LCSYM:		/* Static symbol in BSS segment.  */
   2637     case N_ROSYM:		/* Static symbol in read-only data segment.  */
   2638       /* HORRID HACK DEPT.  However, it's Sun's furgin' fault.
   2639          Solaris 2's stabs-in-elf makes *most* symbols relative but
   2640          leaves a few absolute (at least for Solaris 2.1 and version
   2641          2.0.1 of the SunPRO compiler).  N_STSYM and friends sit on
   2642          the fence.  .stab "foo:S...",N_STSYM is absolute (ld
   2643          relocates it) .stab "foo:V...",N_STSYM is relative (section
   2644          base subtracted).  This leaves us no choice but to search for
   2645          the 'S' or 'V'...  (or pass the whole section_offsets stuff
   2646          down ONE MORE function call level, which we really don't want
   2647          to do).  */
   2648       {
   2649 	const char *p;
   2650 
   2651 	/* Normal object file and NLMs have non-zero text seg offsets,
   2652 	   but don't need their static syms offset in this fashion.
   2653 	   XXX - This is really a crock that should be fixed in the
   2654 	   solib handling code so that I don't have to work around it
   2655 	   here.  */
   2656 
   2657 	if (!symfile_relocatable)
   2658 	  {
   2659 	    p = strchr (name, ':');
   2660 	    if (p != 0 && p[1] == 'S')
   2661 	      {
   2662 		/* The linker relocated it.  We don't want to add a
   2663 		   Sun-stabs Tfoo.foo-like offset, but we *do*
   2664 		   want to add whatever solib.c passed to
   2665 		   symbol_file_add as addr (this is known to affect
   2666 		   SunOS 4, and I suspect ELF too).  Since there is no
   2667 		   Ttext.text symbol, we can get addr from the text offset.  */
   2668 		valu += section_offsets[SECT_OFF_TEXT (objfile)];
   2669 		goto define_a_symbol;
   2670 	      }
   2671 	  }
   2672 	/* Since it's not the kludge case, re-dispatch to the right
   2673            handler.  */
   2674 	switch (type)
   2675 	  {
   2676 	  case N_STSYM:
   2677 	    goto case_N_STSYM;
   2678 	  case N_LCSYM:
   2679 	    goto case_N_LCSYM;
   2680 	  case N_ROSYM:
   2681 	    goto case_N_ROSYM;
   2682 	  default:
   2683 	    internal_error (__FILE__, __LINE__,
   2684 			    _("failed internal consistency check"));
   2685 	  }
   2686       }
   2687 
   2688     case_N_STSYM:		/* Static symbol in data segment.  */
   2689     case N_DSLINE:		/* Source line number, data segment.  */
   2690       valu += section_offsets[SECT_OFF_DATA (objfile)];
   2691       goto define_a_symbol;
   2692 
   2693     case_N_LCSYM:		/* Static symbol in BSS segment.  */
   2694     case N_BSLINE:		/* Source line number, BSS segment.  */
   2695       /* N_BROWS: overlaps with N_BSLINE.  */
   2696       valu += section_offsets[SECT_OFF_BSS (objfile)];
   2697       goto define_a_symbol;
   2698 
   2699     case_N_ROSYM:		/* Static symbol in read-only data segment.  */
   2700       valu += section_offsets[SECT_OFF_RODATA (objfile)];
   2701       goto define_a_symbol;
   2702 
   2703     case N_ENTRY:		/* Alternate entry point.  */
   2704       /* Relocate for dynamic loading.  */
   2705       valu += section_offsets[SECT_OFF_TEXT (objfile)];
   2706       goto define_a_symbol;
   2707 
   2708       /* The following symbol types we don't know how to process.
   2709          Handle them in a "default" way, but complain to people who
   2710          care.  */
   2711     default:
   2712     case N_CATCH:		/* Exception handler catcher.  */
   2713     case N_EHDECL:		/* Exception handler name.  */
   2714     case N_PC:			/* Global symbol in Pascal.  */
   2715     case N_M2C:			/* Modula-2 compilation unit.  */
   2716       /* N_MOD2: overlaps with N_EHDECL.  */
   2717     case N_SCOPE:		/* Modula-2 scope information.  */
   2718     case N_ECOML:		/* End common (local name).  */
   2719     case N_NBTEXT:		/* Gould Non-Base-Register symbols???  */
   2720     case N_NBDATA:
   2721     case N_NBBSS:
   2722     case N_NBSTS:
   2723     case N_NBLCS:
   2724       unknown_symtype_complaint (hex_string (type));
   2725       /* FALLTHROUGH */
   2726 
   2727     define_a_symbol:
   2728       /* These symbol types don't need the address field relocated,
   2729          since it is either unused, or is absolute.  */
   2730     case N_GSYM:		/* Global variable.  */
   2731     case N_NSYMS:		/* Number of symbols (Ultrix).  */
   2732     case N_NOMAP:		/* No map?  (Ultrix).  */
   2733     case N_RSYM:		/* Register variable.  */
   2734     case N_DEFD:		/* Modula-2 GNU module dependency.  */
   2735     case N_SSYM:		/* Struct or union element.  */
   2736     case N_LSYM:		/* Local symbol in stack.  */
   2737     case N_PSYM:		/* Parameter variable.  */
   2738     case N_LENG:		/* Length of preceding symbol type.  */
   2739       if (name)
   2740 	{
   2741 	  int deftype;
   2742 	  const char *colon_pos = strchr (name, ':');
   2743 
   2744 	  if (colon_pos == NULL)
   2745 	    deftype = '\0';
   2746 	  else
   2747 	    deftype = colon_pos[1];
   2748 
   2749 	  switch (deftype)
   2750 	    {
   2751 	    case 'f':
   2752 	    case 'F':
   2753 	      /* Deal with the SunPRO 3.0 compiler which omits the
   2754 	         address from N_FUN symbols.  */
   2755 	      if (type == N_FUN
   2756 		  && valu == section_offsets[SECT_OFF_TEXT (objfile)]
   2757 		  && gdbarch_sofun_address_maybe_missing (gdbarch))
   2758 		{
   2759 		  struct bound_minimal_symbol minsym
   2760 		    = find_stab_function (name, get_last_source_file (),
   2761 					  objfile);
   2762 		  if (minsym.minsym != NULL)
   2763 		    valu = BMSYMBOL_VALUE_ADDRESS (minsym);
   2764 		}
   2765 
   2766 	      /* These addresses are absolute.  */
   2767 	      function_start_offset = valu;
   2768 
   2769 	      within_function = 1;
   2770 
   2771 	      if (get_context_stack_depth () > 1)
   2772 		{
   2773 		  complaint (_("unmatched N_LBRAC before symtab pos %d"),
   2774 			     symnum);
   2775 		  break;
   2776 		}
   2777 
   2778 	      if (!outermost_context_p ())
   2779 		{
   2780 		  struct block *block;
   2781 
   2782 		  cstk = pop_context ();
   2783 		  /* Make a block for the local symbols within.  */
   2784 		  block = finish_block (cstk.name,
   2785 					cstk.old_blocks, NULL,
   2786 					cstk.start_addr, valu);
   2787 
   2788 		  /* For C++, set the block's scope.  */
   2789 		  if (cstk.name->language () == language_cplus)
   2790 		    cp_set_block_scope (cstk.name, block,
   2791 					&objfile->objfile_obstack);
   2792 		}
   2793 
   2794 	      newobj = push_context (0, valu);
   2795 	      newobj->name = define_symbol (valu, name, desc, type, objfile);
   2796 	      break;
   2797 
   2798 	    default:
   2799 	      define_symbol (valu, name, desc, type, objfile);
   2800 	      break;
   2801 	    }
   2802 	}
   2803       break;
   2804 
   2805       /* We use N_OPT to carry the gcc2_compiled flag.  Sun uses it
   2806          for a bunch of other flags, too.  Someday we may parse their
   2807          flags; for now we ignore theirs and hope they'll ignore ours.  */
   2808     case N_OPT:			/* Solaris 2: Compiler options.  */
   2809       if (name)
   2810 	{
   2811 	  if (strcmp (name, GCC2_COMPILED_FLAG_SYMBOL) == 0)
   2812 	    {
   2813 	      processing_gcc_compilation = 2;
   2814 	    }
   2815 	  else
   2816 	    n_opt_found = 1;
   2817 	}
   2818       break;
   2819 
   2820     case N_MAIN:		/* Name of main routine.  */
   2821       /* FIXME: If one has a symbol file with N_MAIN and then replaces
   2822 	 it with a symbol file with "main" and without N_MAIN.  I'm
   2823 	 not sure exactly what rule to follow but probably something
   2824 	 like: N_MAIN takes precedence over "main" no matter what
   2825 	 objfile it is in; If there is more than one N_MAIN, choose
   2826 	 the one in the symfile_objfile; If there is more than one
   2827 	 N_MAIN within a given objfile, complain() and choose
   2828 	 arbitrarily.  (kingdon) */
   2829       if (name != NULL)
   2830 	set_objfile_main_name (objfile, name, language_unknown);
   2831       break;
   2832 
   2833       /* The following symbol types can be ignored.  */
   2834     case N_OBJ:			/* Solaris 2: Object file dir and name.  */
   2835     case N_PATCH:		/* Solaris 2: Patch Run Time Checker.  */
   2836       /* N_UNDF:                   Solaris 2: File separator mark.  */
   2837       /* N_UNDF: -- we will never encounter it, since we only process
   2838          one file's symbols at once.  */
   2839     case N_ENDM:		/* Solaris 2: End of module.  */
   2840     case N_ALIAS:		/* SunPro F77: alias name, ignore for now.  */
   2841       break;
   2842     }
   2843 
   2844   /* '#' is a GNU C extension to allow one symbol to refer to another
   2845      related symbol.
   2846 
   2847      Generally this is used so that an alias can refer to its main
   2848      symbol.  */
   2849   gdb_assert (name);
   2850   if (name[0] == '#')
   2851     {
   2852       /* Initialize symbol reference names and determine if this is a
   2853          definition.  If a symbol reference is being defined, go ahead
   2854          and add it.  Otherwise, just return.  */
   2855 
   2856       const char *s = name;
   2857       int refnum;
   2858 
   2859       /* If this stab defines a new reference ID that is not on the
   2860          reference list, then put it on the reference list.
   2861 
   2862          We go ahead and advance NAME past the reference, even though
   2863          it is not strictly necessary at this time.  */
   2864       refnum = symbol_reference_defined (&s);
   2865       if (refnum >= 0)
   2866 	if (!ref_search (refnum))
   2867 	  ref_add (refnum, 0, name, valu);
   2868       name = s;
   2869     }
   2870 
   2871   previous_stab_code = type;
   2872 }
   2873 
   2874 /* FIXME: The only difference between this and elfstab_build_psymtabs
   2876    is the call to install_minimal_symbols for elf, and the support for
   2877    split sections.  If the differences are really that small, the code
   2878    should be shared.  */
   2879 
   2880 /* Scan and build partial symbols for an coff symbol file.
   2881    The coff file has already been processed to get its minimal symbols.
   2882 
   2883    This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
   2884    rolled into one.
   2885 
   2886    OBJFILE is the object file we are reading symbols from.
   2887    ADDR is the address relative to which the symbols are (e.g.
   2888    the base address of the text segment).
   2889    TEXTADDR is the address of the text section.
   2890    TEXTSIZE is the size of the text section.
   2891    STABSECTS is the list of .stab sections in OBJFILE.
   2892    STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
   2893    .stabstr section exists.
   2894 
   2895    This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
   2896    adjusted for coff details.  */
   2897 
   2898 void
   2899 coffstab_build_psymtabs (struct objfile *objfile,
   2900 			 CORE_ADDR textaddr, unsigned int textsize,
   2901 			 const std::vector<asection *> &stabsects,
   2902 			 file_ptr stabstroffset, unsigned int stabstrsize)
   2903 {
   2904   int val;
   2905   bfd *sym_bfd = objfile->obfd;
   2906   const char *name = bfd_get_filename (sym_bfd);
   2907   unsigned int stabsize;
   2908 
   2909   /* Allocate struct to keep track of stab reading.  */
   2910   dbx_objfile_data_key.emplace (objfile);
   2911 
   2912   DBX_TEXT_ADDR (objfile) = textaddr;
   2913   DBX_TEXT_SIZE (objfile) = textsize;
   2914 
   2915 #define	COFF_STABS_SYMBOL_SIZE	12	/* XXX FIXME XXX */
   2916   DBX_SYMBOL_SIZE (objfile) = COFF_STABS_SYMBOL_SIZE;
   2917   DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
   2918 
   2919   if (stabstrsize > bfd_get_size (sym_bfd))
   2920     error (_("ridiculous string table size: %d bytes"), stabstrsize);
   2921   DBX_STRINGTAB (objfile) = (char *)
   2922     obstack_alloc (&objfile->objfile_obstack, stabstrsize + 1);
   2923   OBJSTAT (objfile, sz_strtab += stabstrsize + 1);
   2924 
   2925   /* Now read in the string table in one big gulp.  */
   2926 
   2927   val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
   2928   if (val < 0)
   2929     perror_with_name (name);
   2930   val = bfd_bread (DBX_STRINGTAB (objfile), stabstrsize, sym_bfd);
   2931   if (val != stabstrsize)
   2932     perror_with_name (name);
   2933 
   2934   stabsread_new_init ();
   2935   free_header_files ();
   2936   init_header_files ();
   2937 
   2938   processing_acc_compilation = 1;
   2939 
   2940   /* In a coff file, we've already installed the minimal symbols that came
   2941      from the coff (non-stab) symbol table, so always act like an
   2942      incremental load here.  */
   2943   scoped_restore save_symbuf_sections
   2944     = make_scoped_restore (&symbuf_sections);
   2945   if (stabsects.size () == 1)
   2946     {
   2947       stabsize = bfd_section_size (stabsects[0]);
   2948       DBX_SYMCOUNT (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
   2949       DBX_SYMTAB_OFFSET (objfile) = stabsects[0]->filepos;
   2950     }
   2951   else
   2952     {
   2953       DBX_SYMCOUNT (objfile) = 0;
   2954       for (asection *section : stabsects)
   2955 	{
   2956 	  stabsize = bfd_section_size (section);
   2957 	  DBX_SYMCOUNT (objfile) += stabsize / DBX_SYMBOL_SIZE (objfile);
   2958 	}
   2959 
   2960       DBX_SYMTAB_OFFSET (objfile) = stabsects[0]->filepos;
   2961 
   2962       sect_idx = 1;
   2963       symbuf_sections = &stabsects;
   2964       symbuf_left = bfd_section_size (stabsects[0]);
   2965       symbuf_read = 0;
   2966     }
   2967 
   2968   dbx_symfile_read (objfile, 0);
   2969 }
   2970 
   2971 /* Scan and build partial symbols for an ELF symbol file.
   2973    This ELF file has already been processed to get its minimal symbols.
   2974 
   2975    This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
   2976    rolled into one.
   2977 
   2978    OBJFILE is the object file we are reading symbols from.
   2979    ADDR is the address relative to which the symbols are (e.g.
   2980    the base address of the text segment).
   2981    STABSECT is the BFD section information for the .stab section.
   2982    STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
   2983    .stabstr section exists.
   2984 
   2985    This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
   2986    adjusted for elf details.  */
   2987 
   2988 void
   2989 elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect,
   2990 			file_ptr stabstroffset, unsigned int stabstrsize)
   2991 {
   2992   int val;
   2993   bfd *sym_bfd = objfile->obfd;
   2994   const char *name = bfd_get_filename (sym_bfd);
   2995 
   2996   stabsread_new_init ();
   2997 
   2998   /* Allocate struct to keep track of stab reading.  */
   2999   dbx_objfile_data_key.emplace (objfile);
   3000 
   3001   /* Find the first and last text address.  dbx_symfile_read seems to
   3002      want this.  */
   3003   find_text_range (sym_bfd, objfile);
   3004 
   3005 #define	ELF_STABS_SYMBOL_SIZE	12	/* XXX FIXME XXX */
   3006   DBX_SYMBOL_SIZE (objfile) = ELF_STABS_SYMBOL_SIZE;
   3007   DBX_SYMCOUNT (objfile)
   3008     = bfd_section_size (stabsect) / DBX_SYMBOL_SIZE (objfile);
   3009   DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
   3010   DBX_SYMTAB_OFFSET (objfile) = stabsect->filepos;
   3011   DBX_STAB_SECTION (objfile) = stabsect;
   3012 
   3013   if (stabstrsize > bfd_get_size (sym_bfd))
   3014     error (_("ridiculous string table size: %d bytes"), stabstrsize);
   3015   DBX_STRINGTAB (objfile) = (char *)
   3016     obstack_alloc (&objfile->objfile_obstack, stabstrsize + 1);
   3017   OBJSTAT (objfile, sz_strtab += stabstrsize + 1);
   3018 
   3019   /* Now read in the string table in one big gulp.  */
   3020 
   3021   val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
   3022   if (val < 0)
   3023     perror_with_name (name);
   3024   val = bfd_bread (DBX_STRINGTAB (objfile), stabstrsize, sym_bfd);
   3025   if (val != stabstrsize)
   3026     perror_with_name (name);
   3027 
   3028   stabsread_new_init ();
   3029   free_header_files ();
   3030   init_header_files ();
   3031 
   3032   processing_acc_compilation = 1;
   3033 
   3034   symbuf_read = 0;
   3035   symbuf_left = bfd_section_size (stabsect);
   3036 
   3037   scoped_restore restore_stabs_data = make_scoped_restore (&stabs_data);
   3038   gdb::unique_xmalloc_ptr<gdb_byte> data_holder;
   3039 
   3040   stabs_data = symfile_relocate_debug_section (objfile, stabsect, NULL);
   3041   if (stabs_data)
   3042     data_holder.reset (stabs_data);
   3043 
   3044   /* In an elf file, we've already installed the minimal symbols that came
   3045      from the elf (non-stab) symbol table, so always act like an
   3046      incremental load here.  dbx_symfile_read should not generate any new
   3047      minimal symbols, since we will have already read the ELF dynamic symbol
   3048      table and normal symbol entries won't be in the ".stab" section; but in
   3049      case it does, it will install them itself.  */
   3050   dbx_symfile_read (objfile, 0);
   3051 }
   3052 
   3053 /* Scan and build partial symbols for a file with special sections for stabs
   3055    and stabstrings.  The file has already been processed to get its minimal
   3056    symbols, and any other symbols that might be necessary to resolve GSYMs.
   3057 
   3058    This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
   3059    rolled into one.
   3060 
   3061    OBJFILE is the object file we are reading symbols from.
   3062    ADDR is the address relative to which the symbols are (e.g. the base address
   3063    of the text segment).
   3064    STAB_NAME is the name of the section that contains the stabs.
   3065    STABSTR_NAME is the name of the section that contains the stab strings.
   3066 
   3067    This routine is mostly copied from dbx_symfile_init and
   3068    dbx_symfile_read.  */
   3069 
   3070 void
   3071 stabsect_build_psymtabs (struct objfile *objfile, char *stab_name,
   3072 			 char *stabstr_name, char *text_name)
   3073 {
   3074   int val;
   3075   bfd *sym_bfd = objfile->obfd;
   3076   const char *name = bfd_get_filename (sym_bfd);
   3077   asection *stabsect;
   3078   asection *stabstrsect;
   3079   asection *text_sect;
   3080 
   3081   stabsect = bfd_get_section_by_name (sym_bfd, stab_name);
   3082   stabstrsect = bfd_get_section_by_name (sym_bfd, stabstr_name);
   3083 
   3084   if (!stabsect)
   3085     return;
   3086 
   3087   if (!stabstrsect)
   3088     error (_("stabsect_build_psymtabs:  Found stabs (%s), "
   3089 	     "but not string section (%s)"),
   3090 	   stab_name, stabstr_name);
   3091 
   3092   dbx_objfile_data_key.emplace (objfile);
   3093 
   3094   text_sect = bfd_get_section_by_name (sym_bfd, text_name);
   3095   if (!text_sect)
   3096     error (_("Can't find %s section in symbol file"), text_name);
   3097   DBX_TEXT_ADDR (objfile) = bfd_section_vma (text_sect);
   3098   DBX_TEXT_SIZE (objfile) = bfd_section_size (text_sect);
   3099 
   3100   DBX_SYMBOL_SIZE (objfile) = sizeof (struct external_nlist);
   3101   DBX_SYMCOUNT (objfile) = bfd_section_size (stabsect)
   3102     / DBX_SYMBOL_SIZE (objfile);
   3103   DBX_STRINGTAB_SIZE (objfile) = bfd_section_size (stabstrsect);
   3104   DBX_SYMTAB_OFFSET (objfile) = stabsect->filepos;	/* XXX - FIXME: POKING
   3105 							   INSIDE BFD DATA
   3106 							   STRUCTURES */
   3107 
   3108   if (DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
   3109     error (_("ridiculous string table size: %d bytes"),
   3110 	   DBX_STRINGTAB_SIZE (objfile));
   3111   DBX_STRINGTAB (objfile) = (char *)
   3112     obstack_alloc (&objfile->objfile_obstack,
   3113 		   DBX_STRINGTAB_SIZE (objfile) + 1);
   3114   OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile) + 1);
   3115 
   3116   /* Now read in the string table in one big gulp.  */
   3117 
   3118   val = bfd_get_section_contents (sym_bfd,	/* bfd */
   3119 				  stabstrsect,	/* bfd section */
   3120 				  DBX_STRINGTAB (objfile), /* input buffer */
   3121 				  0,		/* offset into section */
   3122 				  DBX_STRINGTAB_SIZE (objfile)); /* amount to
   3123 								    read */
   3124 
   3125   if (!val)
   3126     perror_with_name (name);
   3127 
   3128   stabsread_new_init ();
   3129   free_header_files ();
   3130   init_header_files ();
   3131 
   3132   /* Now, do an incremental load.  */
   3133 
   3134   processing_acc_compilation = 1;
   3135   dbx_symfile_read (objfile, 0);
   3136 }
   3137 
   3138 static const struct sym_fns aout_sym_fns =
   3140 {
   3141   dbx_new_init,			/* init anything gbl to entire symtab */
   3142   dbx_symfile_init,		/* read initial info, setup for sym_read() */
   3143   dbx_symfile_read,		/* read a symbol file into symtab */
   3144   NULL,				/* sym_read_psymbols */
   3145   dbx_symfile_finish,		/* finished with file, cleanup */
   3146   default_symfile_offsets, 	/* parse user's offsets to internal form */
   3147   default_symfile_segments,	/* Get segment information from a file.  */
   3148   NULL,
   3149   default_symfile_relocate,	/* Relocate a debug section.  */
   3150   NULL,				/* sym_probe_fns */
   3151   &psym_functions
   3152 };
   3153 
   3154 void _initialize_dbxread ();
   3155 void
   3156 _initialize_dbxread ()
   3157 {
   3158   add_symtab_fns (bfd_target_aout_flavour, &aout_sym_fns);
   3159 }
   3160