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