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