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