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