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