* coffread.c: Replace all occurrences of bfd_read with bfd_bread.
[external/binutils.git] / gdb / dbxread.c
1 /* Read dbx symbol tables and convert to internal format, for GDB.
2    Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
3    1996, 1997, 1998, 1999, 2000, 2001
4    Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 59 Temple Place - Suite 330,
21    Boston, MA 02111-1307, USA.  */
22
23 /* This module provides three functions: dbx_symfile_init,
24    which initializes to read a symbol file; dbx_new_init, which 
25    discards existing cached information when all symbols are being
26    discarded; and dbx_symfile_read, which reads a symbol table
27    from a file.
28
29    dbx_symfile_read only does the minimum work necessary for letting the
30    user "name" things symbolically; it does not read the entire symtab.
31    Instead, it reads the external and static symbols and puts them in partial
32    symbol tables.  When more extensive information is requested of a
33    file, the corresponding partial symbol table is mutated into a full
34    fledged symbol table by going back and reading the symbols
35    for real.  dbx_psymtab_to_symtab() is the function that does this */
36
37 #include "defs.h"
38 #include "gdb_string.h"
39
40 #if defined(USG) || defined(__CYGNUSCLIB__)
41 #include <sys/types.h>
42 #include <fcntl.h>
43 #endif
44
45 #include "obstack.h"
46 #include "gdb_stat.h"
47 #include "symtab.h"
48 #include "breakpoint.h"
49 #include "target.h"
50 #include "gdbcore.h"            /* for bfd stuff */
51 #include "libaout.h"            /* FIXME Secret internal BFD stuff for a.out */
52 #include "symfile.h"
53 #include "objfiles.h"
54 #include "buildsym.h"
55 #include "stabsread.h"
56 #include "gdb-stabs.h"
57 #include "demangle.h"
58 #include "language.h"           /* Needed inside partial-stab.h */
59 #include "complaints.h"
60 #include "cp-abi.h"
61
62 #include "aout/aout64.h"
63 #include "aout/stab_gnu.h"      /* We always use GNU stabs, not native, now */
64 \f
65
66 /* This macro returns the size field of a minimal symbol, which is normally
67    stored in the "info" field.  The macro can be overridden for specific
68    targets (e.g. MIPS16) that use the info field for other purposes.  */
69 #ifndef MSYMBOL_SIZE
70 #define MSYMBOL_SIZE(msym) ((long) MSYMBOL_INFO (msym))
71 #endif
72
73
74 /* We put a pointer to this structure in the read_symtab_private field
75    of the psymtab.  */
76
77 struct symloc
78   {
79
80     /* Offset within the file symbol table of first local symbol for this
81        file.  */
82
83     int ldsymoff;
84
85     /* Length (in bytes) of the section of the symbol table devoted to
86        this file's symbols (actually, the section bracketed may contain
87        more than just this file's symbols).  If ldsymlen is 0, the only
88        reason for this thing's existence is the dependency list.  Nothing
89        else will happen when it is read in.  */
90
91     int ldsymlen;
92
93     /* The size of each symbol in the symbol file (in external form).  */
94
95     int symbol_size;
96
97     /* Further information needed to locate the symbols if they are in
98        an ELF file.  */
99
100     int symbol_offset;
101     int string_offset;
102     int file_string_offset;
103   };
104
105 #define LDSYMOFF(p) (((struct symloc *)((p)->read_symtab_private))->ldsymoff)
106 #define LDSYMLEN(p) (((struct symloc *)((p)->read_symtab_private))->ldsymlen)
107 #define SYMLOC(p) ((struct symloc *)((p)->read_symtab_private))
108 #define SYMBOL_SIZE(p) (SYMLOC(p)->symbol_size)
109 #define SYMBOL_OFFSET(p) (SYMLOC(p)->symbol_offset)
110 #define STRING_OFFSET(p) (SYMLOC(p)->string_offset)
111 #define FILE_STRING_OFFSET(p) (SYMLOC(p)->file_string_offset)
112 \f
113
114 /* Remember what we deduced to be the source language of this psymtab. */
115
116 static enum language psymtab_language = language_unknown;
117
118 /* Nonzero means give verbose info on gdb action.  From main.c.  */
119
120 extern int info_verbose;
121
122 /* The BFD for this file -- implicit parameter to next_symbol_text.  */
123
124 static bfd *symfile_bfd;
125
126 /* The size of each symbol in the symbol file (in external form).
127    This is set by dbx_symfile_read when building psymtabs, and by
128    dbx_psymtab_to_symtab when building symtabs.  */
129
130 static unsigned symbol_size;
131
132 /* This is the offset of the symbol table in the executable file. */
133
134 static unsigned symbol_table_offset;
135
136 /* This is the offset of the string table in the executable file. */
137
138 static unsigned string_table_offset;
139
140 /* For elf+stab executables, the n_strx field is not a simple index
141    into the string table.  Instead, each .o file has a base offset in
142    the string table, and the associated symbols contain offsets from
143    this base.  The following two variables contain the base offset for
144    the current and next .o files. */
145
146 static unsigned int file_string_table_offset;
147 static unsigned int next_file_string_table_offset;
148
149 /* .o and NLM files contain unrelocated addresses which are based at
150    0.  When non-zero, this flag disables some of the special cases for
151    Solaris elf+stab text addresses at location 0. */
152
153 static int symfile_relocatable = 0;
154
155 /* If this is nonzero, N_LBRAC, N_RBRAC, and N_SLINE entries are
156    relative to the function start address.  */
157
158 static int block_address_function_relative = 0;
159 \f
160 /* The lowest text address we have yet encountered.  This is needed
161    because in an a.out file, there is no header field which tells us
162    what address the program is actually going to be loaded at, so we
163    need to make guesses based on the symbols (which *are* relocated to
164    reflect the address it will be loaded at).  */
165
166 static CORE_ADDR lowest_text_address;
167
168 /* Non-zero if there is any line number info in the objfile.  Prevents
169    end_psymtab from discarding an otherwise empty psymtab.  */
170
171 static int has_line_numbers;
172
173 /* Complaints about the symbols we have encountered.  */
174
175 struct complaint lbrac_complaint =
176 {"bad block start address patched", 0, 0};
177
178 struct complaint string_table_offset_complaint =
179 {"bad string table offset in symbol %d", 0, 0};
180
181 struct complaint unknown_symtype_complaint =
182 {"unknown symbol type %s", 0, 0};
183
184 struct complaint unknown_symchar_complaint =
185 {"unknown symbol descriptor `%c'", 0, 0};
186
187 struct complaint lbrac_rbrac_complaint =
188 {"block start larger than block end", 0, 0};
189
190 struct complaint lbrac_unmatched_complaint =
191 {"unmatched N_LBRAC before symtab pos %d", 0, 0};
192
193 struct complaint lbrac_mismatch_complaint =
194 {"N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d", 0, 0};
195
196 struct complaint repeated_header_complaint =
197 {"\"repeated\" header file %s not previously seen, at symtab pos %d", 0, 0};
198
199 struct complaint unclaimed_bincl_complaint =
200 {"N_BINCL %s not in entries for any file, at symtab pos %d", 0, 0};
201 \f
202 /* find_text_range --- find start and end of loadable code sections
203
204    The find_text_range function finds the shortest address range that
205    encloses all sections containing executable code, and stores it in
206    objfile's text_addr and text_size members.
207
208    dbx_symfile_read will use this to finish off the partial symbol
209    table, in some cases.  */
210
211 static void
212 find_text_range (bfd * sym_bfd, struct objfile *objfile)
213 {
214   asection *sec;
215   int found_any = 0;
216   CORE_ADDR start = 0;
217   CORE_ADDR end = 0;
218
219   for (sec = sym_bfd->sections; sec; sec = sec->next)
220     if (bfd_get_section_flags (sym_bfd, sec) & SEC_CODE)
221       {
222         CORE_ADDR sec_start = bfd_section_vma (sym_bfd, sec);
223         CORE_ADDR sec_end = sec_start + bfd_section_size (sym_bfd, sec);
224
225         if (found_any)
226           {
227             if (sec_start < start)
228               start = sec_start;
229             if (sec_end > end)
230               end = sec_end;
231           }
232         else
233           {
234             start = sec_start;
235             end = sec_end;
236           }
237
238         found_any = 1;
239       }
240
241   if (!found_any)
242     error ("Can't find any code sections in symbol file");
243
244   DBX_TEXT_ADDR (objfile) = start;
245   DBX_TEXT_SIZE (objfile) = end - start;
246 }
247 \f
248
249
250 /* During initial symbol readin, we need to have a structure to keep
251    track of which psymtabs have which bincls in them.  This structure
252    is used during readin to setup the list of dependencies within each
253    partial symbol table. */
254
255 struct header_file_location
256 {
257   char *name;                   /* Name of header file */
258   int instance;                 /* See above */
259   struct partial_symtab *pst;   /* Partial symtab that has the
260                                    BINCL/EINCL defs for this file */
261 };
262
263 /* The actual list and controling variables */
264 static struct header_file_location *bincl_list, *next_bincl;
265 static int bincls_allocated;
266
267 /* Local function prototypes */
268
269 extern void _initialize_dbxread (void);
270
271 static void process_now (struct objfile *);
272
273 static void read_ofile_symtab (struct partial_symtab *);
274
275 static void dbx_psymtab_to_symtab (struct partial_symtab *);
276
277 static void dbx_psymtab_to_symtab_1 (struct partial_symtab *);
278
279 static void read_dbx_dynamic_symtab (struct objfile *objfile);
280
281 static void read_dbx_symtab (struct objfile *);
282
283 static void free_bincl_list (struct objfile *);
284
285 static struct partial_symtab *find_corresponding_bincl_psymtab (char *, int);
286
287 static void add_bincl_to_list (struct partial_symtab *, char *, int);
288
289 static void init_bincl_list (int, struct objfile *);
290
291 static char *dbx_next_symbol_text (struct objfile *);
292
293 static void fill_symbuf (bfd *);
294
295 static void dbx_symfile_init (struct objfile *);
296
297 static void dbx_new_init (struct objfile *);
298
299 static void dbx_symfile_read (struct objfile *, int);
300
301 static void dbx_symfile_finish (struct objfile *);
302
303 static void record_minimal_symbol (char *, CORE_ADDR, int, struct objfile *);
304
305 static void add_new_header_file (char *, int);
306
307 static void add_old_header_file (char *, int);
308
309 static void add_this_object_header_file (int);
310
311 static struct partial_symtab *start_psymtab (struct objfile *, char *,
312                                              CORE_ADDR, int,
313                                              struct partial_symbol **,
314                                              struct partial_symbol **);
315
316 /* Free up old header file tables */
317
318 void
319 free_header_files (void)
320 {
321   if (this_object_header_files)
322     {
323       xfree (this_object_header_files);
324       this_object_header_files = NULL;
325     }
326   n_allocated_this_object_header_files = 0;
327 }
328
329 /* Allocate new header file tables */
330
331 void
332 init_header_files (void)
333 {
334   n_allocated_this_object_header_files = 10;
335   this_object_header_files = (int *) xmalloc (10 * sizeof (int));
336 }
337
338 /* Add header file number I for this object file
339    at the next successive FILENUM.  */
340
341 static void
342 add_this_object_header_file (int i)
343 {
344   if (n_this_object_header_files == n_allocated_this_object_header_files)
345     {
346       n_allocated_this_object_header_files *= 2;
347       this_object_header_files
348         = (int *) xrealloc ((char *) this_object_header_files,
349                        n_allocated_this_object_header_files * sizeof (int));
350     }
351
352   this_object_header_files[n_this_object_header_files++] = i;
353 }
354
355 /* Add to this file an "old" header file, one already seen in
356    a previous object file.  NAME is the header file's name.
357    INSTANCE is its instance code, to select among multiple
358    symbol tables for the same header file.  */
359
360 static void
361 add_old_header_file (char *name, int instance)
362 {
363   register struct header_file *p = HEADER_FILES (current_objfile);
364   register int i;
365
366   for (i = 0; i < N_HEADER_FILES (current_objfile); i++)
367     if (STREQ (p[i].name, name) && instance == p[i].instance)
368       {
369         add_this_object_header_file (i);
370         return;
371       }
372   complain (&repeated_header_complaint, name, symnum);
373 }
374
375 /* Add to this file a "new" header file: definitions for its types follow.
376    NAME is the header file's name.
377    Most often this happens only once for each distinct header file,
378    but not necessarily.  If it happens more than once, INSTANCE has
379    a different value each time, and references to the header file
380    use INSTANCE values to select among them.
381
382    dbx output contains "begin" and "end" markers for each new header file,
383    but at this level we just need to know which files there have been;
384    so we record the file when its "begin" is seen and ignore the "end".  */
385
386 static void
387 add_new_header_file (char *name, int instance)
388 {
389   register int i;
390   register struct header_file *hfile;
391
392   /* Make sure there is room for one more header file.  */
393
394   i = N_ALLOCATED_HEADER_FILES (current_objfile);
395
396   if (N_HEADER_FILES (current_objfile) == i)
397     {
398       if (i == 0)
399         {
400           N_ALLOCATED_HEADER_FILES (current_objfile) = 10;
401           HEADER_FILES (current_objfile) = (struct header_file *)
402             xmalloc (10 * sizeof (struct header_file));
403         }
404       else
405         {
406           i *= 2;
407           N_ALLOCATED_HEADER_FILES (current_objfile) = i;
408           HEADER_FILES (current_objfile) = (struct header_file *)
409             xrealloc ((char *) HEADER_FILES (current_objfile),
410                       (i * sizeof (struct header_file)));
411         }
412     }
413
414   /* Create an entry for this header file.  */
415
416   i = N_HEADER_FILES (current_objfile)++;
417   hfile = HEADER_FILES (current_objfile) + i;
418   hfile->name = savestring (name, strlen (name));
419   hfile->instance = instance;
420   hfile->length = 10;
421   hfile->vector
422     = (struct type **) xmalloc (10 * sizeof (struct type *));
423   memset (hfile->vector, 0, 10 * sizeof (struct type *));
424
425   add_this_object_header_file (i);
426 }
427
428 #if 0
429 static struct type **
430 explicit_lookup_type (int real_filenum, int index)
431 {
432   register struct header_file *f = &HEADER_FILES (current_objfile)[real_filenum];
433
434   if (index >= f->length)
435     {
436       f->length *= 2;
437       f->vector = (struct type **)
438         xrealloc (f->vector, f->length * sizeof (struct type *));
439       memset (&f->vector[f->length / 2],
440               '\0', f->length * sizeof (struct type *) / 2);
441     }
442   return &f->vector[index];
443 }
444 #endif
445 \f
446 static void
447 record_minimal_symbol (char *name, CORE_ADDR address, int type,
448                        struct objfile *objfile)
449 {
450   enum minimal_symbol_type ms_type;
451   int section;
452   asection *bfd_section;
453
454   switch (type)
455     {
456     case N_TEXT | N_EXT:
457       ms_type = mst_text;
458       section = SECT_OFF_TEXT (objfile);
459       bfd_section = DBX_TEXT_SECTION (objfile);
460       break;
461     case N_DATA | N_EXT:
462       ms_type = mst_data;
463       section = SECT_OFF_DATA (objfile);
464       bfd_section = DBX_DATA_SECTION (objfile);
465       break;
466     case N_BSS | N_EXT:
467       ms_type = mst_bss;
468       section = SECT_OFF_BSS (objfile);
469       bfd_section = DBX_BSS_SECTION (objfile);
470       break;
471     case N_ABS | N_EXT:
472       ms_type = mst_abs;
473       section = -1;
474       bfd_section = NULL;
475       break;
476 #ifdef N_SETV
477     case N_SETV | N_EXT:
478       ms_type = mst_data;
479       section = SECT_OFF_DATA (objfile);
480       bfd_section = DBX_DATA_SECTION (objfile);
481       break;
482     case N_SETV:
483       /* I don't think this type actually exists; since a N_SETV is the result
484          of going over many .o files, it doesn't make sense to have one
485          file local.  */
486       ms_type = mst_file_data;
487       section = SECT_OFF_DATA (objfile);
488       bfd_section = DBX_DATA_SECTION (objfile);
489       break;
490 #endif
491     case N_TEXT:
492     case N_NBTEXT:
493     case N_FN:
494     case N_FN_SEQ:
495       ms_type = mst_file_text;
496       section = SECT_OFF_TEXT (objfile);
497       bfd_section = DBX_TEXT_SECTION (objfile);
498       break;
499     case N_DATA:
500       ms_type = mst_file_data;
501
502       /* Check for __DYNAMIC, which is used by Sun shared libraries. 
503          Record it as global even if it's local, not global, so
504          lookup_minimal_symbol can find it.  We don't check symbol_leading_char
505          because for SunOS4 it always is '_'.  */
506       if (name[8] == 'C' && STREQ ("__DYNAMIC", name))
507         ms_type = mst_data;
508
509       /* Same with virtual function tables, both global and static.  */
510       {
511         char *tempstring = name;
512         if (tempstring[0] == bfd_get_symbol_leading_char (objfile->obfd))
513           ++tempstring;
514         if (is_vtable_name (tempstring))
515           ms_type = mst_data;
516       }
517       section = SECT_OFF_DATA (objfile);
518       bfd_section = DBX_DATA_SECTION (objfile);
519       break;
520     case N_BSS:
521       ms_type = mst_file_bss;
522       section = SECT_OFF_BSS (objfile);
523       bfd_section = DBX_BSS_SECTION (objfile);
524       break;
525     default:
526       ms_type = mst_unknown;
527       section = -1;
528       bfd_section = NULL;
529       break;
530     }
531
532   if ((ms_type == mst_file_text || ms_type == mst_text)
533       && address < lowest_text_address)
534     lowest_text_address = address;
535
536   prim_record_minimal_symbol_and_info
537     (name, address, ms_type, NULL, section, bfd_section, objfile);
538 }
539 \f
540 /* Scan and build partial symbols for a symbol file.
541    We have been initialized by a call to dbx_symfile_init, which 
542    put all the relevant info into a "struct dbx_symfile_info",
543    hung off the objfile structure.
544
545    MAINLINE is true if we are reading the main symbol
546    table (as opposed to a shared lib or dynamically loaded file).  */
547
548 static void
549 dbx_symfile_read (struct objfile *objfile, int mainline)
550 {
551   bfd *sym_bfd;
552   int val;
553   struct cleanup *back_to;
554
555   sym_bfd = objfile->obfd;
556
557   /* .o and .nlm files are relocatables with text, data and bss segs based at
558      0.  This flag disables special (Solaris stabs-in-elf only) fixups for
559      symbols with a value of 0.  */
560
561   symfile_relocatable = bfd_get_file_flags (sym_bfd) & HAS_RELOC;
562
563   /* This is true for Solaris (and all other systems which put stabs
564      in sections, hopefully, since it would be silly to do things
565      differently from Solaris), and false for SunOS4 and other a.out
566      file formats.  */
567   block_address_function_relative =
568     ((0 == strncmp (bfd_get_target (sym_bfd), "elf", 3))
569      || (0 == strncmp (bfd_get_target (sym_bfd), "som", 3))
570      || (0 == strncmp (bfd_get_target (sym_bfd), "coff", 4))
571      || (0 == strncmp (bfd_get_target (sym_bfd), "pe", 2))
572      || (0 == strncmp (bfd_get_target (sym_bfd), "epoc-pe", 7))
573      || (0 == strncmp (bfd_get_target (sym_bfd), "nlm", 3)));
574
575   val = bfd_seek (sym_bfd, DBX_SYMTAB_OFFSET (objfile), SEEK_SET);
576   if (val < 0)
577     perror_with_name (objfile->name);
578
579   /* If we are reinitializing, or if we have never loaded syms yet, init */
580   if (mainline
581       || (objfile->global_psymbols.size == 0
582           &&  objfile->static_psymbols.size == 0))
583     init_psymbol_list (objfile, DBX_SYMCOUNT (objfile));
584
585   symbol_size = DBX_SYMBOL_SIZE (objfile);
586   symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
587
588   free_pending_blocks ();
589   back_to = make_cleanup (really_free_pendings, 0);
590
591   init_minimal_symbol_collection ();
592   make_cleanup_discard_minimal_symbols ();
593
594   /* Read stabs data from executable file and define symbols. */
595
596   read_dbx_symtab (objfile);
597
598   /* Add the dynamic symbols.  */
599
600   read_dbx_dynamic_symtab (objfile);
601
602   /* Install any minimal symbols that have been collected as the current
603      minimal symbols for this objfile. */
604
605   install_minimal_symbols (objfile);
606
607   do_cleanups (back_to);
608 }
609
610 /* Initialize anything that needs initializing when a completely new
611    symbol file is specified (not just adding some symbols from another
612    file, e.g. a shared library).  */
613
614 static void
615 dbx_new_init (struct objfile *ignore)
616 {
617   stabsread_new_init ();
618   buildsym_new_init ();
619   init_header_files ();
620 }
621
622
623 /* dbx_symfile_init ()
624    is the dbx-specific initialization routine for reading symbols.
625    It is passed a struct objfile which contains, among other things,
626    the BFD for the file whose symbols are being read, and a slot for a pointer
627    to "private data" which we fill with goodies.
628
629    We read the string table into malloc'd space and stash a pointer to it.
630
631    Since BFD doesn't know how to read debug symbols in a format-independent
632    way (and may never do so...), we have to do it ourselves.  We will never
633    be called unless this is an a.out (or very similar) file. 
634    FIXME, there should be a cleaner peephole into the BFD environment here.  */
635
636 #define DBX_STRINGTAB_SIZE_SIZE sizeof(long)    /* FIXME */
637
638 static void
639 dbx_symfile_init (struct objfile *objfile)
640 {
641   int val;
642   bfd *sym_bfd = objfile->obfd;
643   char *name = bfd_get_filename (sym_bfd);
644   asection *text_sect;
645   unsigned char size_temp[DBX_STRINGTAB_SIZE_SIZE];
646
647   /* Allocate struct to keep track of the symfile */
648   objfile->sym_stab_info = (struct dbx_symfile_info *)
649     xmmalloc (objfile->md, sizeof (struct dbx_symfile_info));
650   memset ((PTR) objfile->sym_stab_info, 0, sizeof (struct dbx_symfile_info));
651
652   DBX_TEXT_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
653   DBX_DATA_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".data");
654   DBX_BSS_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".bss");
655
656   /* FIXME POKING INSIDE BFD DATA STRUCTURES */
657 #define STRING_TABLE_OFFSET     (sym_bfd->origin + obj_str_filepos (sym_bfd))
658 #define SYMBOL_TABLE_OFFSET     (sym_bfd->origin + obj_sym_filepos (sym_bfd))
659
660   /* FIXME POKING INSIDE BFD DATA STRUCTURES */
661
662   DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL;
663
664   text_sect = bfd_get_section_by_name (sym_bfd, ".text");
665   if (!text_sect)
666     error ("Can't find .text section in symbol file");
667   DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
668   DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
669
670   DBX_SYMBOL_SIZE (objfile) = obj_symbol_entry_size (sym_bfd);
671   DBX_SYMCOUNT (objfile) = bfd_get_symcount (sym_bfd);
672   DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
673
674   /* Read the string table and stash it away in the psymbol_obstack.  It is
675      only needed as long as we need to expand psymbols into full symbols,
676      so when we blow away the psymbol the string table goes away as well.
677      Note that gdb used to use the results of attempting to malloc the
678      string table, based on the size it read, as a form of sanity check
679      for botched byte swapping, on the theory that a byte swapped string
680      table size would be so totally bogus that the malloc would fail.  Now
681      that we put in on the psymbol_obstack, we can't do this since gdb gets
682      a fatal error (out of virtual memory) if the size is bogus.  We can
683      however at least check to see if the size is less than the size of
684      the size field itself, or larger than the size of the entire file.
685      Note that all valid string tables have a size greater than zero, since
686      the bytes used to hold the size are included in the count. */
687
688   if (STRING_TABLE_OFFSET == 0)
689     {
690       /* It appears that with the existing bfd code, STRING_TABLE_OFFSET
691          will never be zero, even when there is no string table.  This
692          would appear to be a bug in bfd. */
693       DBX_STRINGTAB_SIZE (objfile) = 0;
694       DBX_STRINGTAB (objfile) = NULL;
695     }
696   else
697     {
698       val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
699       if (val < 0)
700         perror_with_name (name);
701
702       memset ((PTR) size_temp, 0, sizeof (size_temp));
703       val = bfd_bread ((PTR) size_temp, sizeof (size_temp), sym_bfd);
704       if (val < 0)
705         {
706           perror_with_name (name);
707         }
708       else if (val == 0)
709         {
710           /* With the existing bfd code, STRING_TABLE_OFFSET will be set to
711              EOF if there is no string table, and attempting to read the size
712              from EOF will read zero bytes. */
713           DBX_STRINGTAB_SIZE (objfile) = 0;
714           DBX_STRINGTAB (objfile) = NULL;
715         }
716       else
717         {
718           /* Read some data that would appear to be the string table size.
719              If there really is a string table, then it is probably the right
720              size.  Byteswap if necessary and validate the size.  Note that
721              the minimum is DBX_STRINGTAB_SIZE_SIZE.  If we just read some
722              random data that happened to be at STRING_TABLE_OFFSET, because
723              bfd can't tell us there is no string table, the sanity checks may
724              or may not catch this. */
725           DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
726
727           if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp)
728               || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
729             error ("ridiculous string table size (%d bytes).",
730                    DBX_STRINGTAB_SIZE (objfile));
731
732           DBX_STRINGTAB (objfile) =
733             (char *) obstack_alloc (&objfile->psymbol_obstack,
734                                     DBX_STRINGTAB_SIZE (objfile));
735           OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile));
736
737           /* Now read in the string table in one big gulp.  */
738
739           val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
740           if (val < 0)
741             perror_with_name (name);
742           val = bfd_bread (DBX_STRINGTAB (objfile),
743                            DBX_STRINGTAB_SIZE (objfile),
744                            sym_bfd);
745           if (val != DBX_STRINGTAB_SIZE (objfile))
746             perror_with_name (name);
747         }
748     }
749 }
750
751 /* Perform any local cleanups required when we are done with a particular
752    objfile.  I.E, we are in the process of discarding all symbol information
753    for an objfile, freeing up all memory held for it, and unlinking the
754    objfile struct from the global list of known objfiles. */
755
756 static void
757 dbx_symfile_finish (struct objfile *objfile)
758 {
759   if (objfile->sym_stab_info != NULL)
760     {
761       if (HEADER_FILES (objfile) != NULL)
762         {
763           register int i = N_HEADER_FILES (objfile);
764           register struct header_file *hfiles = HEADER_FILES (objfile);
765
766           while (--i >= 0)
767             {
768               xfree (hfiles[i].name);
769               xfree (hfiles[i].vector);
770             }
771           xfree (hfiles);
772         }
773       mfree (objfile->md, objfile->sym_stab_info);
774     }
775   free_header_files ();
776 }
777 \f
778
779 /* Buffer for reading the symbol table entries.  */
780 static struct external_nlist symbuf[4096];
781 static int symbuf_idx;
782 static int symbuf_end;
783
784 /* cont_elem is used for continuing information in cfront.
785    It saves information about which types need to be fixed up and 
786    completed after all the stabs are read.  */
787 struct cont_elem
788   {
789     /* sym and stabstring for continuing information in cfront */
790     struct symbol *sym;
791     char *stabs;
792     /* state dependencies (statics that must be preserved) */
793     int sym_idx;
794     int sym_end;
795     int symnum;
796     int (*func) (struct objfile *, struct symbol *, char *);
797     /* other state dependencies include:
798        (assumption is that these will not change since process_now FIXME!!)
799        stringtab_global
800        n_stabs
801        objfile
802        symfile_bfd */
803   };
804
805 static struct cont_elem *cont_list = 0;
806 static int cont_limit = 0;
807 static int cont_count = 0;
808
809 /* Arrange for function F to be called with arguments SYM and P later
810    in the stabs reading process.  */
811 void
812 process_later (struct symbol *sym, char *p,
813                int (*f) (struct objfile *, struct symbol *, char *))
814 {
815
816   /* Allocate more space for the deferred list.  */
817   if (cont_count >= cont_limit - 1)
818     {
819       cont_limit += 32;         /* chunk size */
820
821       cont_list
822         = (struct cont_elem *) xrealloc (cont_list,
823                                          (cont_limit
824                                           * sizeof (struct cont_elem)));
825       if (!cont_list)
826         error ("Virtual memory exhausted\n");
827     }
828
829   /* Save state variables so we can process these stabs later.  */
830   cont_list[cont_count].sym_idx = symbuf_idx;
831   cont_list[cont_count].sym_end = symbuf_end;
832   cont_list[cont_count].symnum = symnum;
833   cont_list[cont_count].sym = sym;
834   cont_list[cont_count].stabs = p;
835   cont_list[cont_count].func = f;
836   cont_count++;
837 }
838
839 /* Call deferred funtions in CONT_LIST.  */
840
841 static void
842 process_now (struct objfile *objfile)
843 {
844   int i;
845   int save_symbuf_idx;
846   int save_symbuf_end;
847   int save_symnum;
848   struct symbol *sym;
849   char *stabs;
850   int err;
851   int (*func) (struct objfile *, struct symbol *, char *);
852
853   /* Save the state of our caller, we'll want to restore it before
854      returning.  */
855   save_symbuf_idx = symbuf_idx;
856   save_symbuf_end = symbuf_end;
857   save_symnum = symnum;
858
859   /* Iterate over all the deferred stabs.  */
860   for (i = 0; i < cont_count; i++)
861     {
862       /* Restore the state for this deferred stab.  */
863       symbuf_idx = cont_list[i].sym_idx;
864       symbuf_end = cont_list[i].sym_end;
865       symnum = cont_list[i].symnum;
866       sym = cont_list[i].sym;
867       stabs = cont_list[i].stabs;
868       func = cont_list[i].func;
869
870       /* Call the function to handle this deferrd stab.  */
871       err = (*func) (objfile, sym, stabs);
872       if (err)
873         error ("Internal error: unable to resolve stab.\n");
874     }
875
876   /* Restore our caller's state.  */
877   symbuf_idx = save_symbuf_idx;
878   symbuf_end = save_symbuf_end;
879   symnum = save_symnum;
880   cont_count = 0;
881 }
882
883
884 /* Name of last function encountered.  Used in Solaris to approximate
885    object file boundaries.  */
886 static char *last_function_name;
887
888 /* The address in memory of the string table of the object file we are
889    reading (which might not be the "main" object file, but might be a
890    shared library or some other dynamically loaded thing).  This is
891    set by read_dbx_symtab when building psymtabs, and by
892    read_ofile_symtab when building symtabs, and is used only by
893    next_symbol_text.  FIXME: If that is true, we don't need it when
894    building psymtabs, right?  */
895 static char *stringtab_global;
896
897 /* These variables are used to control fill_symbuf when the stabs
898    symbols are not contiguous (as may be the case when a COFF file is
899    linked using --split-by-reloc).  */
900 static struct stab_section_list *symbuf_sections;
901 static unsigned int symbuf_left;
902 static unsigned int symbuf_read;
903
904 /* Refill the symbol table input buffer
905    and set the variables that control fetching entries from it.
906    Reports an error if no data available.
907    This function can read past the end of the symbol table
908    (into the string table) but this does no harm.  */
909
910 static void
911 fill_symbuf (bfd *sym_bfd)
912 {
913   unsigned int count;
914   int nbytes;
915
916   if (symbuf_sections == NULL)
917     count = sizeof (symbuf);
918   else
919     {
920       if (symbuf_left <= 0)
921         {
922           file_ptr filepos = symbuf_sections->section->filepos;
923           if (bfd_seek (sym_bfd, filepos, SEEK_SET) != 0)
924             perror_with_name (bfd_get_filename (sym_bfd));
925           symbuf_left = bfd_section_size (sym_bfd, symbuf_sections->section);
926           symbol_table_offset = filepos - symbuf_read;
927           symbuf_sections = symbuf_sections->next;
928         }
929
930       count = symbuf_left;
931       if (count > sizeof (symbuf))
932         count = sizeof (symbuf);
933     }
934
935   nbytes = bfd_bread ((PTR) symbuf, count, sym_bfd);
936   if (nbytes < 0)
937     perror_with_name (bfd_get_filename (sym_bfd));
938   else if (nbytes == 0)
939     error ("Premature end of file reading symbol table");
940   symbuf_end = nbytes / symbol_size;
941   symbuf_idx = 0;
942   symbuf_left -= nbytes;
943   symbuf_read += nbytes;
944 }
945
946 #define INTERNALIZE_SYMBOL(intern, extern, abfd)                        \
947   {                                                                     \
948     (intern).n_type = bfd_h_get_8 (abfd, (extern)->e_type);             \
949     (intern).n_strx = bfd_h_get_32 (abfd, (extern)->e_strx);            \
950     (intern).n_desc = bfd_h_get_16 (abfd, (extern)->e_desc);            \
951     if (bfd_get_sign_extend_vma (abfd))                                 \
952       (intern).n_value = bfd_h_get_signed_32 (abfd, (extern)->e_value); \
953     else                                                                \
954       (intern).n_value = bfd_h_get_32 (abfd, (extern)->e_value);        \
955   }
956
957 /* Invariant: The symbol pointed to by symbuf_idx is the first one
958    that hasn't been swapped.  Swap the symbol at the same time
959    that symbuf_idx is incremented.  */
960
961 /* dbx allows the text of a symbol name to be continued into the
962    next symbol name!  When such a continuation is encountered
963    (a \ at the end of the text of a name)
964    call this function to get the continuation.  */
965
966 static char *
967 dbx_next_symbol_text (struct objfile *objfile)
968 {
969   struct internal_nlist nlist;
970
971   if (symbuf_idx == symbuf_end)
972     fill_symbuf (symfile_bfd);
973
974   symnum++;
975   INTERNALIZE_SYMBOL (nlist, &symbuf[symbuf_idx], symfile_bfd);
976   OBJSTAT (objfile, n_stabs++);
977
978   symbuf_idx++;
979
980   return nlist.n_strx + stringtab_global + file_string_table_offset;
981 }
982 \f
983 /* Initialize the list of bincls to contain none and have some
984    allocated.  */
985
986 static void
987 init_bincl_list (int number, struct objfile *objfile)
988 {
989   bincls_allocated = number;
990   next_bincl = bincl_list = (struct header_file_location *)
991     xmmalloc (objfile->md, bincls_allocated * sizeof (struct header_file_location));
992 }
993
994 /* Add a bincl to the list.  */
995
996 static void
997 add_bincl_to_list (struct partial_symtab *pst, char *name, int instance)
998 {
999   if (next_bincl >= bincl_list + bincls_allocated)
1000     {
1001       int offset = next_bincl - bincl_list;
1002       bincls_allocated *= 2;
1003       bincl_list = (struct header_file_location *)
1004         xmrealloc (pst->objfile->md, (char *) bincl_list,
1005                    bincls_allocated * sizeof (struct header_file_location));
1006       next_bincl = bincl_list + offset;
1007     }
1008   next_bincl->pst = pst;
1009   next_bincl->instance = instance;
1010   next_bincl++->name = name;
1011 }
1012
1013 /* Given a name, value pair, find the corresponding
1014    bincl in the list.  Return the partial symtab associated
1015    with that header_file_location.  */
1016
1017 static struct partial_symtab *
1018 find_corresponding_bincl_psymtab (char *name, int instance)
1019 {
1020   struct header_file_location *bincl;
1021
1022   for (bincl = bincl_list; bincl < next_bincl; bincl++)
1023     if (bincl->instance == instance
1024         && STREQ (name, bincl->name))
1025       return bincl->pst;
1026
1027   complain (&repeated_header_complaint, name, symnum);
1028   return (struct partial_symtab *) 0;
1029 }
1030
1031 /* Free the storage allocated for the bincl list.  */
1032
1033 static void
1034 free_bincl_list (struct objfile *objfile)
1035 {
1036   mfree (objfile->md, (PTR) bincl_list);
1037   bincls_allocated = 0;
1038 }
1039
1040 static void
1041 do_free_bincl_list_cleanup (void *objfile)
1042 {
1043   free_bincl_list (objfile);
1044 }
1045
1046 static struct cleanup *
1047 make_cleanup_free_bincl_list (struct objfile *objfile)
1048 {
1049   return make_cleanup (do_free_bincl_list_cleanup, objfile);
1050 }
1051
1052 /* Scan a SunOs dynamic symbol table for symbols of interest and
1053    add them to the minimal symbol table.  */
1054
1055 static void
1056 read_dbx_dynamic_symtab (struct objfile *objfile)
1057 {
1058   bfd *abfd = objfile->obfd;
1059   struct cleanup *back_to;
1060   int counter;
1061   long dynsym_size;
1062   long dynsym_count;
1063   asymbol **dynsyms;
1064   asymbol **symptr;
1065   arelent **relptr;
1066   long dynrel_size;
1067   long dynrel_count;
1068   arelent **dynrels;
1069   CORE_ADDR sym_value;
1070   char *name;
1071
1072   /* Check that the symbol file has dynamic symbols that we know about.
1073      bfd_arch_unknown can happen if we are reading a sun3 symbol file
1074      on a sun4 host (and vice versa) and bfd is not configured
1075      --with-target=all.  This would trigger an assertion in bfd/sunos.c,
1076      so we ignore the dynamic symbols in this case.  */
1077   if (bfd_get_flavour (abfd) != bfd_target_aout_flavour
1078       || (bfd_get_file_flags (abfd) & DYNAMIC) == 0
1079       || bfd_get_arch (abfd) == bfd_arch_unknown)
1080     return;
1081
1082   dynsym_size = bfd_get_dynamic_symtab_upper_bound (abfd);
1083   if (dynsym_size < 0)
1084     return;
1085
1086   dynsyms = (asymbol **) xmalloc (dynsym_size);
1087   back_to = make_cleanup (xfree, dynsyms);
1088
1089   dynsym_count = bfd_canonicalize_dynamic_symtab (abfd, dynsyms);
1090   if (dynsym_count < 0)
1091     {
1092       do_cleanups (back_to);
1093       return;
1094     }
1095
1096   /* Enter dynamic symbols into the minimal symbol table
1097      if this is a stripped executable.  */
1098   if (bfd_get_symcount (abfd) <= 0)
1099     {
1100       symptr = dynsyms;
1101       for (counter = 0; counter < dynsym_count; counter++, symptr++)
1102         {
1103           asymbol *sym = *symptr;
1104           asection *sec;
1105           int type;
1106
1107           sec = bfd_get_section (sym);
1108
1109           /* BFD symbols are section relative.  */
1110           sym_value = sym->value + sec->vma;
1111
1112           if (bfd_get_section_flags (abfd, sec) & SEC_CODE)
1113             {
1114               sym_value += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
1115               type = N_TEXT;
1116             }
1117           else if (bfd_get_section_flags (abfd, sec) & SEC_DATA)
1118             {
1119               sym_value += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
1120               type = N_DATA;
1121             }
1122           else if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC)
1123             {
1124               sym_value += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
1125               type = N_BSS;
1126             }
1127           else
1128             continue;
1129
1130           if (sym->flags & BSF_GLOBAL)
1131             type |= N_EXT;
1132
1133           record_minimal_symbol ((char *) bfd_asymbol_name (sym), sym_value,
1134                                  type, objfile);
1135         }
1136     }
1137
1138   /* Symbols from shared libraries have a dynamic relocation entry
1139      that points to the associated slot in the procedure linkage table.
1140      We make a mininal symbol table entry with type mst_solib_trampoline
1141      at the address in the procedure linkage table.  */
1142   dynrel_size = bfd_get_dynamic_reloc_upper_bound (abfd);
1143   if (dynrel_size < 0)
1144     {
1145       do_cleanups (back_to);
1146       return;
1147     }
1148
1149   dynrels = (arelent **) xmalloc (dynrel_size);
1150   make_cleanup (xfree, dynrels);
1151
1152   dynrel_count = bfd_canonicalize_dynamic_reloc (abfd, dynrels, dynsyms);
1153   if (dynrel_count < 0)
1154     {
1155       do_cleanups (back_to);
1156       return;
1157     }
1158
1159   for (counter = 0, relptr = dynrels;
1160        counter < dynrel_count;
1161        counter++, relptr++)
1162     {
1163       arelent *rel = *relptr;
1164       CORE_ADDR address =
1165       rel->address + ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
1166
1167       switch (bfd_get_arch (abfd))
1168         {
1169         case bfd_arch_sparc:
1170           if (rel->howto->type != RELOC_JMP_SLOT)
1171             continue;
1172           break;
1173         case bfd_arch_m68k:
1174           /* `16' is the type BFD produces for a jump table relocation.  */
1175           if (rel->howto->type != 16)
1176             continue;
1177
1178           /* Adjust address in the jump table to point to
1179              the start of the bsr instruction.  */
1180           address -= 2;
1181           break;
1182         default:
1183           continue;
1184         }
1185
1186       name = (char *) bfd_asymbol_name (*rel->sym_ptr_ptr);
1187       prim_record_minimal_symbol (name, address, mst_solib_trampoline,
1188                                   objfile);
1189     }
1190
1191   do_cleanups (back_to);
1192 }
1193
1194 /* Setup partial_symtab's describing each source file for which
1195    debugging information is available. */
1196
1197 static void
1198 read_dbx_symtab (struct objfile *objfile)
1199 {
1200   register struct external_nlist *bufp = 0;     /* =0 avoids gcc -Wall glitch */
1201   struct internal_nlist nlist;
1202   CORE_ADDR text_addr;
1203   int text_size;
1204
1205   register char *namestring;
1206   int nsl;
1207   int past_first_source_file = 0;
1208   CORE_ADDR last_o_file_start = 0;
1209   CORE_ADDR last_function_start = 0;
1210   struct cleanup *back_to;
1211   bfd *abfd;
1212   int textlow_not_set;
1213
1214   /* Current partial symtab */
1215   struct partial_symtab *pst;
1216
1217   /* List of current psymtab's include files */
1218   char **psymtab_include_list;
1219   int includes_allocated;
1220   int includes_used;
1221
1222   /* Index within current psymtab dependency list */
1223   struct partial_symtab **dependency_list;
1224   int dependencies_used, dependencies_allocated;
1225
1226   text_addr = DBX_TEXT_ADDR (objfile);
1227   text_size = DBX_TEXT_SIZE (objfile);
1228
1229   /* FIXME.  We probably want to change stringtab_global rather than add this
1230      while processing every symbol entry.  FIXME.  */
1231   file_string_table_offset = 0;
1232   next_file_string_table_offset = 0;
1233
1234   stringtab_global = DBX_STRINGTAB (objfile);
1235
1236   pst = (struct partial_symtab *) 0;
1237
1238   includes_allocated = 30;
1239   includes_used = 0;
1240   psymtab_include_list = (char **) alloca (includes_allocated *
1241                                            sizeof (char *));
1242
1243   dependencies_allocated = 30;
1244   dependencies_used = 0;
1245   dependency_list =
1246     (struct partial_symtab **) alloca (dependencies_allocated *
1247                                        sizeof (struct partial_symtab *));
1248
1249   /* Init bincl list */
1250   init_bincl_list (20, objfile);
1251   back_to = make_cleanup_free_bincl_list (objfile);
1252
1253   last_source_file = NULL;
1254
1255   lowest_text_address = (CORE_ADDR) -1;
1256
1257   symfile_bfd = objfile->obfd;  /* For next_text_symbol */
1258   abfd = objfile->obfd;
1259   symbuf_end = symbuf_idx = 0;
1260   next_symbol_text_func = dbx_next_symbol_text;
1261   textlow_not_set = 1;
1262   has_line_numbers = 0;
1263
1264   for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
1265     {
1266       /* Get the symbol for this run and pull out some info */
1267       QUIT;                     /* allow this to be interruptable */
1268       if (symbuf_idx == symbuf_end)
1269         fill_symbuf (abfd);
1270       bufp = &symbuf[symbuf_idx++];
1271
1272       /*
1273        * Special case to speed up readin.
1274        */
1275       if (bfd_h_get_8 (abfd, bufp->e_type) == N_SLINE)
1276         {
1277           has_line_numbers = 1;
1278           continue;
1279         }
1280
1281       INTERNALIZE_SYMBOL (nlist, bufp, abfd);
1282       OBJSTAT (objfile, n_stabs++);
1283
1284       /* Ok.  There is a lot of code duplicated in the rest of this
1285          switch statement (for efficiency reasons).  Since I don't
1286          like duplicating code, I will do my penance here, and
1287          describe the code which is duplicated:
1288
1289          *) The assignment to namestring.
1290          *) The call to strchr.
1291          *) The addition of a partial symbol the the two partial
1292          symbol lists.  This last is a large section of code, so
1293          I've imbedded it in the following macro.
1294        */
1295
1296 /* Set namestring based on nlist.  If the string table index is invalid, 
1297    give a fake name, and print a single error message per symbol file read,
1298    rather than abort the symbol reading or flood the user with messages.  */
1299
1300 /*FIXME: Too many adds and indirections in here for the inner loop.  */
1301 #define SET_NAMESTRING()\
1302   if (((unsigned)CUR_SYMBOL_STRX + file_string_table_offset) >=         \
1303       DBX_STRINGTAB_SIZE (objfile)) {                                   \
1304     complain (&string_table_offset_complaint, symnum);                  \
1305     namestring = "<bad string table offset>";                           \
1306   } else                                                                \
1307     namestring = CUR_SYMBOL_STRX + file_string_table_offset +           \
1308                  DBX_STRINGTAB (objfile)
1309
1310 #define CUR_SYMBOL_TYPE nlist.n_type
1311 #define CUR_SYMBOL_VALUE nlist.n_value
1312 #define CUR_SYMBOL_STRX nlist.n_strx
1313 #define DBXREAD_ONLY
1314 #define START_PSYMTAB(ofile,fname,low,symoff,global_syms,static_syms)\
1315   start_psymtab(ofile, fname, low, symoff, global_syms, static_syms)
1316 #define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps,textlow_not_set)\
1317   end_psymtab(pst,ilist,ninc,c_off,c_text,dep_list,n_deps,textlow_not_set)
1318
1319 #include "partial-stab.h"
1320     }
1321
1322   /* If there's stuff to be cleaned up, clean it up.  */
1323   if (DBX_SYMCOUNT (objfile) > 0        /* We have some syms */
1324 /*FIXME, does this have a bug at start address 0? */
1325       && last_o_file_start
1326       && objfile->ei.entry_point < nlist.n_value
1327       && objfile->ei.entry_point >= last_o_file_start)
1328     {
1329       objfile->ei.entry_file_lowpc = last_o_file_start;
1330       objfile->ei.entry_file_highpc = nlist.n_value;
1331     }
1332
1333   if (pst)
1334     {
1335       /* Don't set pst->texthigh lower than it already is.  */
1336       CORE_ADDR text_end =
1337       (lowest_text_address == (CORE_ADDR) -1
1338        ? (text_addr + ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)))
1339        : lowest_text_address)
1340       + text_size;
1341
1342       end_psymtab (pst, psymtab_include_list, includes_used,
1343                    symnum * symbol_size,
1344                    text_end > pst->texthigh ? text_end : pst->texthigh,
1345                    dependency_list, dependencies_used, textlow_not_set);
1346     }
1347
1348   do_cleanups (back_to);
1349 }
1350
1351 /* Allocate and partially fill a partial symtab.  It will be
1352    completely filled at the end of the symbol list.
1353
1354    SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
1355    is the address relative to which its symbols are (incremental) or 0
1356    (normal). */
1357
1358
1359 static struct partial_symtab *
1360 start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow,
1361                int ldsymoff, struct partial_symbol **global_syms,
1362                struct partial_symbol **static_syms)
1363 {
1364   struct partial_symtab *result =
1365   start_psymtab_common (objfile, objfile->section_offsets,
1366                         filename, textlow, global_syms, static_syms);
1367
1368   result->read_symtab_private = (char *)
1369     obstack_alloc (&objfile->psymbol_obstack, sizeof (struct symloc));
1370   LDSYMOFF (result) = ldsymoff;
1371   result->read_symtab = dbx_psymtab_to_symtab;
1372   SYMBOL_SIZE (result) = symbol_size;
1373   SYMBOL_OFFSET (result) = symbol_table_offset;
1374   STRING_OFFSET (result) = string_table_offset;
1375   FILE_STRING_OFFSET (result) = file_string_table_offset;
1376
1377   /* If we're handling an ELF file, drag some section-relocation info
1378      for this source file out of the ELF symbol table, to compensate for
1379      Sun brain death.  This replaces the section_offsets in this psymtab,
1380      if successful.  */
1381   elfstab_offset_sections (objfile, result);
1382
1383   /* Deduce the source language from the filename for this psymtab. */
1384   psymtab_language = deduce_language_from_filename (filename);
1385
1386   return result;
1387 }
1388
1389 /* Close off the current usage of PST.  
1390    Returns PST or NULL if the partial symtab was empty and thrown away.
1391
1392    FIXME:  List variables and peculiarities of same.  */
1393
1394 struct partial_symtab *
1395 end_psymtab (struct partial_symtab *pst, char **include_list, int num_includes,
1396              int capping_symbol_offset, CORE_ADDR capping_text,
1397              struct partial_symtab **dependency_list, int number_dependencies,
1398              int textlow_not_set)
1399 {
1400   int i;
1401   struct objfile *objfile = pst->objfile;
1402
1403   if (capping_symbol_offset != -1)
1404     LDSYMLEN (pst) = capping_symbol_offset - LDSYMOFF (pst);
1405   pst->texthigh = capping_text;
1406
1407 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
1408   /* Under Solaris, the N_SO symbols always have a value of 0,
1409      instead of the usual address of the .o file.  Therefore,
1410      we have to do some tricks to fill in texthigh and textlow.
1411      The first trick is in partial-stab.h: if we see a static
1412      or global function, and the textlow for the current pst
1413      is not set (ie: textlow_not_set), then we use that function's
1414      address for the textlow of the pst.  */
1415
1416   /* Now, to fill in texthigh, we remember the last function seen
1417      in the .o file (also in partial-stab.h).  Also, there's a hack in
1418      bfd/elf.c and gdb/elfread.c to pass the ELF st_size field
1419      to here via the misc_info field.  Therefore, we can fill in
1420      a reliable texthigh by taking the address plus size of the
1421      last function in the file.  */
1422
1423   if (pst->texthigh == 0 && last_function_name)
1424     {
1425       char *p;
1426       int n;
1427       struct minimal_symbol *minsym;
1428
1429       p = strchr (last_function_name, ':');
1430       if (p == NULL)
1431         p = last_function_name;
1432       n = p - last_function_name;
1433       p = alloca (n + 2);
1434       strncpy (p, last_function_name, n);
1435       p[n] = 0;
1436
1437       minsym = lookup_minimal_symbol (p, pst->filename, objfile);
1438       if (minsym == NULL)
1439         {
1440           /* Sun Fortran appends an underscore to the minimal symbol name,
1441              try again with an appended underscore if the minimal symbol
1442              was not found.  */
1443           p[n] = '_';
1444           p[n + 1] = 0;
1445           minsym = lookup_minimal_symbol (p, pst->filename, objfile);
1446         }
1447
1448       if (minsym)
1449         pst->texthigh = SYMBOL_VALUE_ADDRESS (minsym) + MSYMBOL_SIZE (minsym);
1450
1451       last_function_name = NULL;
1452     }
1453
1454   /* this test will be true if the last .o file is only data */
1455   if (textlow_not_set)
1456     pst->textlow = pst->texthigh;
1457   else
1458     {
1459       struct partial_symtab *p1;
1460
1461       /* If we know our own starting text address, then walk through all other
1462          psymtabs for this objfile, and if any didn't know their ending text
1463          address, set it to our starting address.  Take care to not set our
1464          own ending address to our starting address, nor to set addresses on
1465          `dependency' files that have both textlow and texthigh zero.  */
1466
1467       ALL_OBJFILE_PSYMTABS (objfile, p1)
1468       {
1469         if (p1->texthigh == 0 && p1->textlow != 0 && p1 != pst)
1470           {
1471             p1->texthigh = pst->textlow;
1472             /* if this file has only data, then make textlow match texthigh */
1473             if (p1->textlow == 0)
1474               p1->textlow = p1->texthigh;
1475           }
1476       }
1477     }
1478
1479   /* End of kludge for patching Solaris textlow and texthigh.  */
1480 #endif /* SOFUN_ADDRESS_MAYBE_MISSING.  */
1481
1482   pst->n_global_syms =
1483     objfile->global_psymbols.next - (objfile->global_psymbols.list + pst->globals_offset);
1484   pst->n_static_syms =
1485     objfile->static_psymbols.next - (objfile->static_psymbols.list + pst->statics_offset);
1486
1487   pst->number_of_dependencies = number_dependencies;
1488   if (number_dependencies)
1489     {
1490       pst->dependencies = (struct partial_symtab **)
1491         obstack_alloc (&objfile->psymbol_obstack,
1492                     number_dependencies * sizeof (struct partial_symtab *));
1493       memcpy (pst->dependencies, dependency_list,
1494               number_dependencies * sizeof (struct partial_symtab *));
1495     }
1496   else
1497     pst->dependencies = 0;
1498
1499   for (i = 0; i < num_includes; i++)
1500     {
1501       struct partial_symtab *subpst =
1502       allocate_psymtab (include_list[i], objfile);
1503
1504       /* Copy the sesction_offsets array from the main psymtab. */
1505       subpst->section_offsets = pst->section_offsets;
1506       subpst->read_symtab_private =
1507         (char *) obstack_alloc (&objfile->psymbol_obstack,
1508                                 sizeof (struct symloc));
1509       LDSYMOFF (subpst) =
1510         LDSYMLEN (subpst) =
1511         subpst->textlow =
1512         subpst->texthigh = 0;
1513
1514       /* We could save slight bits of space by only making one of these,
1515          shared by the entire set of include files.  FIXME-someday.  */
1516       subpst->dependencies = (struct partial_symtab **)
1517         obstack_alloc (&objfile->psymbol_obstack,
1518                        sizeof (struct partial_symtab *));
1519       subpst->dependencies[0] = pst;
1520       subpst->number_of_dependencies = 1;
1521
1522       subpst->globals_offset =
1523         subpst->n_global_syms =
1524         subpst->statics_offset =
1525         subpst->n_static_syms = 0;
1526
1527       subpst->readin = 0;
1528       subpst->symtab = 0;
1529       subpst->read_symtab = pst->read_symtab;
1530     }
1531
1532   sort_pst_symbols (pst);
1533
1534   /* If there is already a psymtab or symtab for a file of this name, remove it.
1535      (If there is a symtab, more drastic things also happen.)
1536      This happens in VxWorks.  */
1537   free_named_symtabs (pst->filename);
1538
1539   if (num_includes == 0
1540       && number_dependencies == 0
1541       && pst->n_global_syms == 0
1542       && pst->n_static_syms == 0
1543       && has_line_numbers == 0)
1544     {
1545       /* Throw away this psymtab, it's empty.  We can't deallocate it, since
1546          it is on the obstack, but we can forget to chain it on the list.  */
1547       /* Empty psymtabs happen as a result of header files which don't have
1548          any symbols in them.  There can be a lot of them.  But this check
1549          is wrong, in that a psymtab with N_SLINE entries but nothing else
1550          is not empty, but we don't realize that.  Fixing that without slowing
1551          things down might be tricky.  */
1552
1553       discard_psymtab (pst);
1554
1555       /* Indicate that psymtab was thrown away.  */
1556       pst = (struct partial_symtab *) NULL;
1557     }
1558   return pst;
1559 }
1560 \f
1561 static void
1562 dbx_psymtab_to_symtab_1 (struct partial_symtab *pst)
1563 {
1564   struct cleanup *old_chain;
1565   int i;
1566
1567   if (!pst)
1568     return;
1569
1570   if (pst->readin)
1571     {
1572       fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in.  Shouldn't happen.\n",
1573                           pst->filename);
1574       return;
1575     }
1576
1577   /* Read in all partial symtabs on which this one is dependent */
1578   for (i = 0; i < pst->number_of_dependencies; i++)
1579     if (!pst->dependencies[i]->readin)
1580       {
1581         /* Inform about additional files that need to be read in.  */
1582         if (info_verbose)
1583           {
1584             fputs_filtered (" ", gdb_stdout);
1585             wrap_here ("");
1586             fputs_filtered ("and ", gdb_stdout);
1587             wrap_here ("");
1588             printf_filtered ("%s...", pst->dependencies[i]->filename);
1589             wrap_here ("");     /* Flush output */
1590             gdb_flush (gdb_stdout);
1591           }
1592         dbx_psymtab_to_symtab_1 (pst->dependencies[i]);
1593       }
1594
1595   if (LDSYMLEN (pst))           /* Otherwise it's a dummy */
1596     {
1597       /* Init stuff necessary for reading in symbols */
1598       stabsread_init ();
1599       buildsym_init ();
1600       old_chain = make_cleanup (really_free_pendings, 0);
1601       file_string_table_offset = FILE_STRING_OFFSET (pst);
1602       symbol_size = SYMBOL_SIZE (pst);
1603
1604       /* Read in this file's symbols */
1605       bfd_seek (pst->objfile->obfd, SYMBOL_OFFSET (pst), SEEK_SET);
1606       read_ofile_symtab (pst);
1607       sort_symtab_syms (pst->symtab);
1608
1609       do_cleanups (old_chain);
1610     }
1611
1612   pst->readin = 1;
1613 }
1614
1615 /* Read in all of the symbols for a given psymtab for real.
1616    Be verbose about it if the user wants that.  */
1617
1618 static void
1619 dbx_psymtab_to_symtab (struct partial_symtab *pst)
1620 {
1621   bfd *sym_bfd;
1622
1623   if (!pst)
1624     return;
1625
1626   if (pst->readin)
1627     {
1628       fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in.  Shouldn't happen.\n",
1629                           pst->filename);
1630       return;
1631     }
1632
1633   if (LDSYMLEN (pst) || pst->number_of_dependencies)
1634     {
1635       /* Print the message now, before reading the string table,
1636          to avoid disconcerting pauses.  */
1637       if (info_verbose)
1638         {
1639           printf_filtered ("Reading in symbols for %s...", pst->filename);
1640           gdb_flush (gdb_stdout);
1641         }
1642
1643       sym_bfd = pst->objfile->obfd;
1644
1645       next_symbol_text_func = dbx_next_symbol_text;
1646
1647       dbx_psymtab_to_symtab_1 (pst);
1648
1649       /* Match with global symbols.  This only needs to be done once,
1650          after all of the symtabs and dependencies have been read in.   */
1651       scan_file_globals (pst->objfile);
1652
1653       /* Finish up the debug error message.  */
1654       if (info_verbose)
1655         printf_filtered ("done.\n");
1656     }
1657 }
1658
1659 /* Read in a defined section of a specific object file's symbols. */
1660
1661 static void
1662 read_ofile_symtab (struct partial_symtab *pst)
1663 {
1664   register char *namestring;
1665   register struct external_nlist *bufp;
1666   struct internal_nlist nlist;
1667   unsigned char type;
1668   unsigned max_symnum;
1669   register bfd *abfd;
1670   struct objfile *objfile;
1671   int sym_offset;               /* Offset to start of symbols to read */
1672   int sym_size;                 /* Size of symbols to read */
1673   CORE_ADDR text_offset;        /* Start of text segment for symbols */
1674   int text_size;                /* Size of text segment for symbols */
1675   struct section_offsets *section_offsets;
1676
1677   objfile = pst->objfile;
1678   sym_offset = LDSYMOFF (pst);
1679   sym_size = LDSYMLEN (pst);
1680   text_offset = pst->textlow;
1681   text_size = pst->texthigh - pst->textlow;
1682   /* This cannot be simply objfile->section_offsets because of
1683      elfstab_offset_sections() which initializes the psymtab section
1684      offsets information in a special way, and that is different from
1685      objfile->section_offsets. */ 
1686   section_offsets = pst->section_offsets;
1687
1688   current_objfile = objfile;
1689   subfile_stack = NULL;
1690
1691   stringtab_global = DBX_STRINGTAB (objfile);
1692   last_source_file = NULL;
1693
1694   abfd = objfile->obfd;
1695   symfile_bfd = objfile->obfd;  /* Implicit param to next_text_symbol */
1696   symbuf_end = symbuf_idx = 0;
1697
1698   /* It is necessary to actually read one symbol *before* the start
1699      of this symtab's symbols, because the GCC_COMPILED_FLAG_SYMBOL
1700      occurs before the N_SO symbol.
1701
1702      Detecting this in read_dbx_symtab
1703      would slow down initial readin, so we look for it here instead.  */
1704   if (!processing_acc_compilation && sym_offset >= (int) symbol_size)
1705     {
1706       bfd_seek (symfile_bfd, sym_offset - symbol_size, SEEK_CUR);
1707       fill_symbuf (abfd);
1708       bufp = &symbuf[symbuf_idx++];
1709       INTERNALIZE_SYMBOL (nlist, bufp, abfd);
1710       OBJSTAT (objfile, n_stabs++);
1711
1712       SET_NAMESTRING ();
1713
1714       processing_gcc_compilation = 0;
1715       if (nlist.n_type == N_TEXT)
1716         {
1717           const char *tempstring = namestring;
1718
1719           if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1720             processing_gcc_compilation = 1;
1721           else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1722             processing_gcc_compilation = 2;
1723           if (tempstring[0] == bfd_get_symbol_leading_char (symfile_bfd))
1724             ++tempstring;
1725           if (STREQN (tempstring, "__gnu_compiled", 14))
1726             processing_gcc_compilation = 2;
1727         }
1728
1729       /* Try to select a C++ demangling based on the compilation unit
1730          producer. */
1731
1732 #if 0
1733       /* For now, stay with AUTO_DEMANGLING for g++ output, as we don't
1734          know whether it will use the old style or v3 mangling.  */
1735       if (processing_gcc_compilation)
1736         {
1737           if (AUTO_DEMANGLING)
1738             {
1739               set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1740             }
1741         }
1742 #endif
1743     }
1744   else
1745     {
1746       /* The N_SO starting this symtab is the first symbol, so we
1747          better not check the symbol before it.  I'm not this can
1748          happen, but it doesn't hurt to check for it.  */
1749       bfd_seek (symfile_bfd, sym_offset, SEEK_CUR);
1750       processing_gcc_compilation = 0;
1751     }
1752
1753   if (symbuf_idx == symbuf_end)
1754     fill_symbuf (abfd);
1755   bufp = &symbuf[symbuf_idx];
1756   if (bfd_h_get_8 (abfd, bufp->e_type) != N_SO)
1757     error ("First symbol in segment of executable not a source symbol");
1758
1759   max_symnum = sym_size / symbol_size;
1760
1761   for (symnum = 0;
1762        symnum < max_symnum;
1763        symnum++)
1764     {
1765       QUIT;                     /* Allow this to be interruptable */
1766       if (symbuf_idx == symbuf_end)
1767         fill_symbuf (abfd);
1768       bufp = &symbuf[symbuf_idx++];
1769       INTERNALIZE_SYMBOL (nlist, bufp, abfd);
1770       OBJSTAT (objfile, n_stabs++);
1771
1772       type = bfd_h_get_8 (abfd, bufp->e_type);
1773
1774       SET_NAMESTRING ();
1775
1776       if (type & N_STAB)
1777         {
1778           process_one_symbol (type, nlist.n_desc, nlist.n_value,
1779                               namestring, section_offsets, objfile);
1780         }
1781       /* We skip checking for a new .o or -l file; that should never
1782          happen in this routine. */
1783       else if (type == N_TEXT)
1784         {
1785           /* I don't think this code will ever be executed, because
1786              the GCC_COMPILED_FLAG_SYMBOL usually is right before
1787              the N_SO symbol which starts this source file.
1788              However, there is no reason not to accept
1789              the GCC_COMPILED_FLAG_SYMBOL anywhere.  */
1790
1791           if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1792             processing_gcc_compilation = 1;
1793           else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1794             processing_gcc_compilation = 2;
1795
1796 #if 0
1797           /* For now, stay with AUTO_DEMANGLING for g++ output, as we don't
1798              know whether it will use the old style or v3 mangling.  */
1799           if (AUTO_DEMANGLING)
1800             {
1801               set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1802             }
1803 #endif
1804         }
1805       else if (type & N_EXT || type == (unsigned char) N_TEXT
1806                || type == (unsigned char) N_NBTEXT
1807         )
1808         {
1809           /* Global symbol: see if we came across a dbx defintion for
1810              a corresponding symbol.  If so, store the value.  Remove
1811              syms from the chain when their values are stored, but
1812              search the whole chain, as there may be several syms from
1813              different files with the same name. */
1814           /* This is probably not true.  Since the files will be read
1815              in one at a time, each reference to a global symbol will
1816              be satisfied in each file as it appears. So we skip this
1817              section. */
1818           ;
1819         }
1820     }
1821
1822   current_objfile = NULL;
1823
1824   /* In a Solaris elf file, this variable, which comes from the
1825      value of the N_SO symbol, will still be 0.  Luckily, text_offset,
1826      which comes from pst->textlow is correct. */
1827   if (last_source_start_addr == 0)
1828     last_source_start_addr = text_offset;
1829
1830   /* In reordered executables last_source_start_addr may not be the
1831      lower bound for this symtab, instead use text_offset which comes
1832      from pst->textlow which is correct.  */
1833   if (last_source_start_addr > text_offset)
1834     last_source_start_addr = text_offset;
1835
1836   pst->symtab = end_symtab (text_offset + text_size, objfile, SECT_OFF_TEXT (objfile));
1837
1838   /* Process items which we had to "process_later" due to dependencies 
1839      on other stabs.  */
1840   process_now (objfile);
1841
1842   end_stabs ();
1843 }
1844 \f
1845
1846 /* This handles a single symbol from the symbol-file, building symbols
1847    into a GDB symtab.  It takes these arguments and an implicit argument.
1848
1849    TYPE is the type field of the ".stab" symbol entry.
1850    DESC is the desc field of the ".stab" entry.
1851    VALU is the value field of the ".stab" entry.
1852    NAME is the symbol name, in our address space.
1853    SECTION_OFFSETS is a set of amounts by which the sections of this object
1854    file were relocated when it was loaded into memory.
1855    Note that these section_offsets are not the 
1856    objfile->section_offsets but the pst->section_offsets.
1857    All symbols that refer
1858    to memory locations need to be offset by these amounts.
1859    OBJFILE is the object file from which we are reading symbols.
1860    It is used in end_symtab.  */
1861
1862 void
1863 process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
1864                     struct section_offsets *section_offsets,
1865                     struct objfile *objfile)
1866 {
1867 #ifdef SUN_FIXED_LBRAC_BUG
1868   /* If SUN_FIXED_LBRAC_BUG is defined, then it tells us whether we need
1869      to correct the address of N_LBRAC's.  If it is not defined, then
1870      we never need to correct the addresses.  */
1871
1872   /* This records the last pc address we've seen.  We depend on there being
1873      an SLINE or FUN or SO before the first LBRAC, since the variable does
1874      not get reset in between reads of different symbol files.  */
1875   static CORE_ADDR last_pc_address;
1876 #endif
1877
1878   register struct context_stack *new;
1879   /* This remembers the address of the start of a function.  It is used
1880      because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries are
1881      relative to the current function's start address.  On systems
1882      other than Solaris 2, this just holds the SECT_OFF_TEXT value, and is
1883      used to relocate these symbol types rather than SECTION_OFFSETS.  */
1884   static CORE_ADDR function_start_offset;
1885
1886   /* If this is nonzero, we've seen a non-gcc N_OPT symbol for this source
1887      file.  Used to detect the SunPRO solaris compiler.  */
1888   static int n_opt_found;
1889
1890   /* The stab type used for the definition of the last function.
1891      N_STSYM or N_GSYM for SunOS4 acc; N_FUN for other compilers.  */
1892   static int function_stab_type = 0;
1893
1894   if (!block_address_function_relative)
1895     /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
1896        function start address, so just use the text offset.  */
1897     function_start_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
1898
1899   /* Something is wrong if we see real data before
1900      seeing a source file name.  */
1901
1902   if (last_source_file == NULL && type != (unsigned char) N_SO)
1903     {
1904       /* Ignore any symbols which appear before an N_SO symbol.
1905          Currently no one puts symbols there, but we should deal
1906          gracefully with the case.  A complain()t might be in order,
1907          but this should not be an error ().  */
1908       return;
1909     }
1910
1911   switch (type)
1912     {
1913     case N_FUN:
1914     case N_FNAME:
1915
1916       if (*name == '\000')
1917         {
1918           /* This N_FUN marks the end of a function.  This closes off the
1919              current block.  */
1920           within_function = 0;
1921           new = pop_context ();
1922
1923           /* Make a block for the local symbols within.  */
1924           finish_block (new->name, &local_symbols, new->old_blocks,
1925                         new->start_addr, new->start_addr + valu,
1926                         objfile);
1927
1928           /* May be switching to an assembler file which may not be using
1929              block relative stabs, so reset the offset.  */
1930           if (block_address_function_relative)
1931             function_start_offset = 0;
1932
1933           break;
1934         }
1935
1936       /* Relocate for dynamic loading */
1937       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
1938 #ifdef SMASH_TEXT_ADDRESS
1939       SMASH_TEXT_ADDRESS (valu);
1940 #endif
1941       goto define_a_symbol;
1942
1943     case N_LBRAC:
1944       /* This "symbol" just indicates the start of an inner lexical
1945          context within a function.  */
1946
1947       /* Ignore extra outermost context from SunPRO cc and acc.  */
1948       if (n_opt_found && desc == 1)
1949         break;
1950
1951       if (block_address_function_relative)
1952         /* Relocate for Sun ELF acc fn-relative syms.  */
1953         valu += function_start_offset;
1954       else
1955         /* On most machines, the block addresses are relative to the
1956            N_SO, the linker did not relocate them (sigh).  */
1957         valu += last_source_start_addr;
1958
1959 #ifdef SUN_FIXED_LBRAC_BUG
1960       if (!SUN_FIXED_LBRAC_BUG && valu < last_pc_address)
1961         {
1962           /* Patch current LBRAC pc value to match last handy pc value */
1963           complain (&lbrac_complaint);
1964           valu = last_pc_address;
1965         }
1966 #endif
1967       new = push_context (desc, valu);
1968       break;
1969
1970     case N_RBRAC:
1971       /* This "symbol" just indicates the end of an inner lexical
1972          context that was started with N_LBRAC.  */
1973
1974       /* Ignore extra outermost context from SunPRO cc and acc.  */
1975       if (n_opt_found && desc == 1)
1976         break;
1977
1978       if (block_address_function_relative)
1979         /* Relocate for Sun ELF acc fn-relative syms.  */
1980         valu += function_start_offset;
1981       else
1982         /* On most machines, the block addresses are relative to the
1983            N_SO, the linker did not relocate them (sigh).  */
1984         valu += last_source_start_addr;
1985
1986       new = pop_context ();
1987       if (desc != new->depth)
1988         complain (&lbrac_mismatch_complaint, symnum);
1989
1990       /* Some compilers put the variable decls inside of an
1991          LBRAC/RBRAC block.  This macro should be nonzero if this
1992          is true.  DESC is N_DESC from the N_RBRAC symbol.
1993          GCC_P is true if we've detected the GCC_COMPILED_SYMBOL
1994          or the GCC2_COMPILED_SYMBOL.  */
1995 #if !defined (VARIABLES_INSIDE_BLOCK)
1996 #define VARIABLES_INSIDE_BLOCK(desc, gcc_p) 0
1997 #endif
1998
1999       /* Can only use new->locals as local symbols here if we're in
2000          gcc or on a machine that puts them before the lbrack.  */
2001       if (!VARIABLES_INSIDE_BLOCK (desc, processing_gcc_compilation))
2002         local_symbols = new->locals;
2003
2004       if (context_stack_depth
2005           > !VARIABLES_INSIDE_BLOCK (desc, processing_gcc_compilation))
2006         {
2007           /* This is not the outermost LBRAC...RBRAC pair in the function,
2008              its local symbols preceded it, and are the ones just recovered
2009              from the context stack.  Define the block for them (but don't
2010              bother if the block contains no symbols.  Should we complain
2011              on blocks without symbols?  I can't think of any useful purpose
2012              for them).  */
2013           if (local_symbols != NULL)
2014             {
2015               /* Muzzle a compiler bug that makes end < start.  (which
2016                  compilers?  Is this ever harmful?).  */
2017               if (new->start_addr > valu)
2018                 {
2019                   complain (&lbrac_rbrac_complaint);
2020                   new->start_addr = valu;
2021                 }
2022               /* Make a block for the local symbols within.  */
2023               finish_block (0, &local_symbols, new->old_blocks,
2024                             new->start_addr, valu, objfile);
2025             }
2026         }
2027       else
2028         {
2029           /* This is the outermost LBRAC...RBRAC pair.  There is no
2030              need to do anything; leave the symbols that preceded it
2031              to be attached to the function's own block.  We need to
2032              indicate that we just moved outside of the function.  */
2033           within_function = 0;
2034         }
2035
2036       if (VARIABLES_INSIDE_BLOCK (desc, processing_gcc_compilation))
2037         /* Now pop locals of block just finished.  */
2038         local_symbols = new->locals;
2039       break;
2040
2041     case N_FN:
2042     case N_FN_SEQ:
2043       /* This kind of symbol indicates the start of an object file.  */
2044       /* Relocate for dynamic loading */
2045       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
2046       break;
2047
2048     case N_SO:
2049       /* This type of symbol indicates the start of data
2050          for one source file.
2051          Finish the symbol table of the previous source file
2052          (if any) and start accumulating a new symbol table.  */
2053       /* Relocate for dynamic loading */
2054       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
2055
2056       n_opt_found = 0;
2057
2058 #ifdef SUN_FIXED_LBRAC_BUG
2059       last_pc_address = valu;   /* Save for SunOS bug circumcision */
2060 #endif
2061
2062 #ifdef PCC_SOL_BROKEN
2063       /* pcc bug, occasionally puts out SO for SOL.  */
2064       if (context_stack_depth > 0)
2065         {
2066           start_subfile (name, NULL);
2067           break;
2068         }
2069 #endif
2070       if (last_source_file)
2071         {
2072           /* Check if previous symbol was also an N_SO (with some
2073              sanity checks).  If so, that one was actually the directory
2074              name, and the current one is the real file name.
2075              Patch things up. */
2076           if (previous_stab_code == (unsigned char) N_SO)
2077             {
2078               patch_subfile_names (current_subfile, name);
2079               break;            /* Ignore repeated SOs */
2080             }
2081           end_symtab (valu, objfile, SECT_OFF_TEXT (objfile));
2082           end_stabs ();
2083         }
2084
2085       /* Null name means this just marks the end of text for this .o file.
2086          Don't start a new symtab in this case.  */
2087       if (*name == '\000')
2088         break;
2089
2090       if (block_address_function_relative)
2091         function_start_offset = 0;
2092
2093       start_stabs ();
2094       start_symtab (name, NULL, valu);
2095       record_debugformat ("stabs");
2096       break;
2097
2098     case N_SOL:
2099       /* This type of symbol indicates the start of data for
2100          a sub-source-file, one whose contents were copied or
2101          included in the compilation of the main source file
2102          (whose name was given in the N_SO symbol.)  */
2103       /* Relocate for dynamic loading */
2104       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
2105       start_subfile (name, current_subfile->dirname);
2106       break;
2107
2108     case N_BINCL:
2109       push_subfile ();
2110       add_new_header_file (name, valu);
2111       start_subfile (name, current_subfile->dirname);
2112       break;
2113
2114     case N_EINCL:
2115       start_subfile (pop_subfile (), current_subfile->dirname);
2116       break;
2117
2118     case N_EXCL:
2119       add_old_header_file (name, valu);
2120       break;
2121
2122     case N_SLINE:
2123       /* This type of "symbol" really just records
2124          one line-number -- core-address correspondence.
2125          Enter it in the line list for this symbol table.  */
2126
2127       /* Relocate for dynamic loading and for ELF acc fn-relative syms.  */
2128       valu += function_start_offset;
2129
2130 #ifdef SUN_FIXED_LBRAC_BUG
2131       last_pc_address = valu;   /* Save for SunOS bug circumcision */
2132 #endif
2133       record_line (current_subfile, desc, valu);
2134       break;
2135
2136     case N_BCOMM:
2137       common_block_start (name, objfile);
2138       break;
2139
2140     case N_ECOMM:
2141       common_block_end (objfile);
2142       break;
2143
2144       /* The following symbol types need to have the appropriate offset added
2145          to their value; then we process symbol definitions in the name.  */
2146
2147     case N_STSYM:               /* Static symbol in data seg */
2148     case N_LCSYM:               /* Static symbol in BSS seg */
2149     case N_ROSYM:               /* Static symbol in Read-only data seg */
2150       /* HORRID HACK DEPT.  However, it's Sun's furgin' fault.
2151          Solaris2's stabs-in-elf makes *most* symbols relative
2152          but leaves a few absolute (at least for Solaris 2.1 and version
2153          2.0.1 of the SunPRO compiler).  N_STSYM and friends sit on the fence.
2154          .stab "foo:S...",N_STSYM        is absolute (ld relocates it)
2155          .stab "foo:V...",N_STSYM        is relative (section base subtracted).
2156          This leaves us no choice but to search for the 'S' or 'V'...
2157          (or pass the whole section_offsets stuff down ONE MORE function
2158          call level, which we really don't want to do).  */
2159       {
2160         char *p;
2161
2162         /* .o files and NLMs have non-zero text seg offsets, but don't need
2163            their static syms offset in this fashion.  XXX - This is really a
2164            crock that should be fixed in the solib handling code so that I
2165            don't have to work around it here. */
2166
2167         if (!symfile_relocatable)
2168           {
2169             p = strchr (name, ':');
2170             if (p != 0 && p[1] == 'S')
2171               {
2172                 /* The linker relocated it.  We don't want to add an
2173                    elfstab_offset_sections-type offset, but we *do* want
2174                    to add whatever solib.c passed to symbol_file_add as
2175                    addr (this is known to affect SunOS4, and I suspect ELF
2176                    too).  Since elfstab_offset_sections currently does not
2177                    muck with the text offset (there is no Ttext.text
2178                    symbol), we can get addr from the text offset.  If
2179                    elfstab_offset_sections ever starts dealing with the
2180                    text offset, and we still need to do this, we need to
2181                    invent a SECT_OFF_ADDR_KLUDGE or something.  */
2182                 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
2183                 goto define_a_symbol;
2184               }
2185           }
2186         /* Since it's not the kludge case, re-dispatch to the right handler. */
2187         switch (type)
2188           {
2189           case N_STSYM:
2190             goto case_N_STSYM;
2191           case N_LCSYM:
2192             goto case_N_LCSYM;
2193           case N_ROSYM:
2194             goto case_N_ROSYM;
2195           default:
2196             internal_error (__FILE__, __LINE__, "failed internal consistency check");
2197           }
2198       }
2199
2200     case_N_STSYM:               /* Static symbol in data seg */
2201     case N_DSLINE:              /* Source line number, data seg */
2202       valu += ANOFFSET (section_offsets, SECT_OFF_DATA (objfile));
2203       goto define_a_symbol;
2204
2205     case_N_LCSYM:               /* Static symbol in BSS seg */
2206     case N_BSLINE:              /* Source line number, bss seg */
2207       /*   N_BROWS:       overlaps with N_BSLINE */
2208       valu += ANOFFSET (section_offsets, SECT_OFF_BSS (objfile));
2209       goto define_a_symbol;
2210
2211     case_N_ROSYM:               /* Static symbol in Read-only data seg */
2212       valu += ANOFFSET (section_offsets, SECT_OFF_RODATA (objfile));
2213       goto define_a_symbol;
2214
2215     case N_ENTRY:               /* Alternate entry point */
2216       /* Relocate for dynamic loading */
2217       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
2218       goto define_a_symbol;
2219
2220       /* The following symbol types we don't know how to process.  Handle
2221          them in a "default" way, but complain to people who care.  */
2222     default:
2223     case N_CATCH:               /* Exception handler catcher */
2224     case N_EHDECL:              /* Exception handler name */
2225     case N_PC:                  /* Global symbol in Pascal */
2226     case N_M2C:         /* Modula-2 compilation unit */
2227       /*   N_MOD2:        overlaps with N_EHDECL */
2228     case N_SCOPE:               /* Modula-2 scope information */
2229     case N_ECOML:               /* End common (local name) */
2230     case N_NBTEXT:              /* Gould Non-Base-Register symbols??? */
2231     case N_NBDATA:
2232     case N_NBBSS:
2233     case N_NBSTS:
2234     case N_NBLCS:
2235       complain (&unknown_symtype_complaint, local_hex_string (type));
2236       /* FALLTHROUGH */
2237
2238       /* The following symbol types don't need the address field relocated,
2239          since it is either unused, or is absolute.  */
2240     define_a_symbol:
2241     case N_GSYM:                /* Global variable */
2242     case N_NSYMS:               /* Number of symbols (ultrix) */
2243     case N_NOMAP:               /* No map?  (ultrix) */
2244     case N_RSYM:                /* Register variable */
2245     case N_DEFD:                /* Modula-2 GNU module dependency */
2246     case N_SSYM:                /* Struct or union element */
2247     case N_LSYM:                /* Local symbol in stack */
2248     case N_PSYM:                /* Parameter variable */
2249     case N_LENG:                /* Length of preceding symbol type */
2250       if (name)
2251         {
2252           int deftype;
2253           char *colon_pos = strchr (name, ':');
2254           if (colon_pos == NULL)
2255             deftype = '\0';
2256           else
2257             deftype = colon_pos[1];
2258
2259           switch (deftype)
2260             {
2261             case 'f':
2262             case 'F':
2263               function_stab_type = type;
2264
2265 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
2266               /* Deal with the SunPRO 3.0 compiler which omits the address
2267                  from N_FUN symbols.  */
2268               if (type == N_FUN
2269                   && valu == ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)))
2270                 {
2271                   CORE_ADDR minsym_valu = 
2272                     find_stab_function_addr (name, last_source_file, objfile);
2273
2274                   /* find_stab_function_addr will return 0 if the minimal
2275                      symbol wasn't found.  (Unfortunately, this might also
2276                      be a valid address.)  Anyway, if it *does* return 0,
2277                      it is likely that the value was set correctly to begin
2278                      with... */
2279                   if (minsym_valu != 0)
2280                     valu = minsym_valu;
2281                 }
2282 #endif
2283
2284 #ifdef SUN_FIXED_LBRAC_BUG
2285               /* The Sun acc compiler, under SunOS4, puts out
2286                  functions with N_GSYM or N_STSYM.  The problem is
2287                  that the address of the symbol is no good (for N_GSYM
2288                  it doesn't even attept an address; for N_STSYM it
2289                  puts out an address but then it gets relocated
2290                  relative to the data segment, not the text segment).
2291                  Currently we can't fix this up later as we do for
2292                  some types of symbol in scan_file_globals.
2293                  Fortunately we do have a way of finding the address -
2294                  we know that the value in last_pc_address is either
2295                  the one we want (if we're dealing with the first
2296                  function in an object file), or somewhere in the
2297                  previous function. This means that we can use the
2298                  minimal symbol table to get the address.  */
2299
2300               /* Starting with release 3.0, the Sun acc compiler,
2301                  under SunOS4, puts out functions with N_FUN and a value
2302                  of zero. This gets relocated to the start of the text
2303                  segment of the module, which is no good either.
2304                  Under SunOS4 we can deal with this as N_SLINE and N_SO
2305                  entries contain valid absolute addresses.
2306                  Release 3.0 acc also puts out N_OPT entries, which makes
2307                  it possible to discern acc from cc or gcc.  */
2308
2309               if (type == N_GSYM || type == N_STSYM
2310                   || (type == N_FUN
2311                       && n_opt_found && !block_address_function_relative))
2312                 {
2313                   struct minimal_symbol *m;
2314                   int l = colon_pos - name;
2315
2316                   m = lookup_minimal_symbol_by_pc (last_pc_address);
2317                   if (m && STREQN (SYMBOL_NAME (m), name, l)
2318                       && SYMBOL_NAME (m)[l] == '\0')
2319                     /* last_pc_address was in this function */
2320                     valu = SYMBOL_VALUE (m);
2321                   else if (m && SYMBOL_NAME (m + 1)
2322                            && STREQN (SYMBOL_NAME (m + 1), name, l)
2323                            && SYMBOL_NAME (m + 1)[l] == '\0')
2324                     /* last_pc_address was in last function */
2325                     valu = SYMBOL_VALUE (m + 1);
2326                   else
2327                     /* Not found - use last_pc_address (for finish_block) */
2328                     valu = last_pc_address;
2329                 }
2330
2331               last_pc_address = valu;   /* Save for SunOS bug circumcision */
2332 #endif
2333
2334               if (block_address_function_relative)
2335                 /* For Solaris 2.0 compilers, the block addresses and
2336                    N_SLINE's are relative to the start of the
2337                    function.  On normal systems, and when using gcc on
2338                    Solaris 2.0, these addresses are just absolute, or
2339                    relative to the N_SO, depending on
2340                    BLOCK_ADDRESS_ABSOLUTE.  */
2341                 function_start_offset = valu;
2342
2343               within_function = 1;
2344
2345               if (context_stack_depth > 1)
2346                 {
2347                   complain (&lbrac_unmatched_complaint, symnum);
2348                   break;
2349                 }
2350
2351               if (context_stack_depth > 0)
2352                 {
2353                   new = pop_context ();
2354                   /* Make a block for the local symbols within.  */
2355                   finish_block (new->name, &local_symbols, new->old_blocks,
2356                                 new->start_addr, valu, objfile);
2357                 }
2358
2359               new = push_context (0, valu);
2360               new->name = define_symbol (valu, name, desc, type, objfile);
2361               break;
2362
2363             default:
2364               define_symbol (valu, name, desc, type, objfile);
2365               break;
2366             }
2367         }
2368       break;
2369
2370       /* We use N_OPT to carry the gcc2_compiled flag.  Sun uses it
2371          for a bunch of other flags, too.  Someday we may parse their
2372          flags; for now we ignore theirs and hope they'll ignore ours.  */
2373     case N_OPT:         /* Solaris 2:  Compiler options */
2374       if (name)
2375         {
2376           if (STREQ (name, GCC2_COMPILED_FLAG_SYMBOL))
2377             {
2378               processing_gcc_compilation = 2;
2379 #if 0                           /* Works, but is experimental.  -fnf */
2380               /* For now, stay with AUTO_DEMANGLING for g++ output, as we don't
2381                  know whether it will use the old style or v3 mangling.  */
2382               if (AUTO_DEMANGLING)
2383                 {
2384                   set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
2385                 }
2386 #endif
2387             }
2388           else
2389             n_opt_found = 1;
2390         }
2391       break;
2392
2393     case N_MAIN:                /* Name of main routine.  */
2394       /* FIXME: If one has a symbol file with N_MAIN and then replaces
2395          it with a symbol file with "main" and without N_MAIN.  I'm
2396          not sure exactly what rule to follow but probably something
2397          like: N_MAIN takes precedence over "main" no matter what
2398          objfile it is in; If there is more than one N_MAIN, choose
2399          the one in the symfile_objfile; If there is more than one
2400          N_MAIN within a given objfile, complain() and choose
2401          arbitrarily. (kingdon) */
2402       if (name != NULL)
2403         set_main_name (name);
2404       break;
2405
2406       /* The following symbol types can be ignored.  */
2407     case N_OBJ:         /* Solaris 2:  Object file dir and name */
2408       /*   N_UNDF:                   Solaris 2:  file separator mark */
2409       /*   N_UNDF: -- we will never encounter it, since we only process one
2410          file's symbols at once.  */
2411     case N_ENDM:                /* Solaris 2:  End of module */
2412     case N_ALIAS:               /* SunPro F77: alias name, ignore for now.  */
2413       break;
2414     }
2415
2416   /* '#' is a GNU C extension to allow one symbol to refer to another
2417      related symbol.
2418
2419      Generally this is used so that an alias can refer to its main
2420      symbol.  */
2421   if (name[0] == '#')
2422     {
2423       /* Initialize symbol reference names and determine if this is 
2424          a definition.  If symbol reference is being defined, go 
2425          ahead and add it.  Otherwise, just return sym. */
2426
2427       char *s = name;
2428       int refnum;
2429
2430       /* If this stab defines a new reference ID that is not on the
2431          reference list, then put it on the reference list.
2432
2433          We go ahead and advance NAME past the reference, even though
2434          it is not strictly necessary at this time.  */
2435       refnum = symbol_reference_defined (&s);
2436       if (refnum >= 0)
2437         if (!ref_search (refnum))
2438           ref_add (refnum, 0, name, valu);
2439       name = s;
2440     }
2441
2442
2443   previous_stab_code = type;
2444 }
2445 \f
2446 /* FIXME: The only difference between this and elfstab_build_psymtabs
2447    is the call to install_minimal_symbols for elf, and the support for
2448    split sections.  If the differences are really that small, the code
2449    should be shared.  */
2450
2451 /* Scan and build partial symbols for an coff symbol file.
2452    The coff file has already been processed to get its minimal symbols.
2453
2454    This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2455    rolled into one.
2456
2457    OBJFILE is the object file we are reading symbols from.
2458    ADDR is the address relative to which the symbols are (e.g.
2459    the base address of the text segment).
2460    MAINLINE is true if we are reading the main symbol
2461    table (as opposed to a shared lib or dynamically loaded file).
2462    TEXTADDR is the address of the text section.
2463    TEXTSIZE is the size of the text section.
2464    STABSECTS is the list of .stab sections in OBJFILE.
2465    STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
2466    .stabstr section exists.
2467
2468    This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
2469    adjusted for coff details. */
2470
2471 void
2472 coffstab_build_psymtabs (struct objfile *objfile, int mainline,
2473                          CORE_ADDR textaddr, unsigned int textsize,
2474                          struct stab_section_list *stabsects,
2475                          file_ptr stabstroffset, unsigned int stabstrsize)
2476 {
2477   int val;
2478   bfd *sym_bfd = objfile->obfd;
2479   char *name = bfd_get_filename (sym_bfd);
2480   struct dbx_symfile_info *info;
2481   unsigned int stabsize;
2482
2483   /* There is already a dbx_symfile_info allocated by our caller.
2484      It might even contain some info from the coff symtab to help us.  */
2485   info = objfile->sym_stab_info;
2486
2487   DBX_TEXT_ADDR (objfile) = textaddr;
2488   DBX_TEXT_SIZE (objfile) = textsize;
2489
2490 #define COFF_STABS_SYMBOL_SIZE  12      /* XXX FIXME XXX */
2491   DBX_SYMBOL_SIZE (objfile) = COFF_STABS_SYMBOL_SIZE;
2492   DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
2493
2494   if (stabstrsize > bfd_get_size (sym_bfd))
2495     error ("ridiculous string table size: %d bytes", stabstrsize);
2496   DBX_STRINGTAB (objfile) = (char *)
2497     obstack_alloc (&objfile->psymbol_obstack, stabstrsize + 1);
2498   OBJSTAT (objfile, sz_strtab += stabstrsize + 1);
2499
2500   /* Now read in the string table in one big gulp.  */
2501
2502   val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
2503   if (val < 0)
2504     perror_with_name (name);
2505   val = bfd_bread (DBX_STRINGTAB (objfile), stabstrsize, sym_bfd);
2506   if (val != stabstrsize)
2507     perror_with_name (name);
2508
2509   stabsread_new_init ();
2510   buildsym_new_init ();
2511   free_header_files ();
2512   init_header_files ();
2513
2514   processing_acc_compilation = 1;
2515
2516   /* In a coff file, we've already installed the minimal symbols that came
2517      from the coff (non-stab) symbol table, so always act like an
2518      incremental load here. */
2519   if (stabsects->next == NULL)
2520     {
2521       stabsize = bfd_section_size (sym_bfd, stabsects->section);
2522       DBX_SYMCOUNT (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
2523       DBX_SYMTAB_OFFSET (objfile) = stabsects->section->filepos;
2524     }
2525   else
2526     {
2527       struct stab_section_list *stabsect;
2528
2529       DBX_SYMCOUNT (objfile) = 0;
2530       for (stabsect = stabsects; stabsect != NULL; stabsect = stabsect->next)
2531         {
2532           stabsize = bfd_section_size (sym_bfd, stabsect->section);
2533           DBX_SYMCOUNT (objfile) += stabsize / DBX_SYMBOL_SIZE (objfile);
2534         }
2535
2536       DBX_SYMTAB_OFFSET (objfile) = stabsects->section->filepos;
2537
2538       symbuf_sections = stabsects->next;
2539       symbuf_left = bfd_section_size (sym_bfd, stabsects->section);
2540       symbuf_read = 0;
2541     }
2542
2543   dbx_symfile_read (objfile, 0);
2544 }
2545 \f
2546 /* Scan and build partial symbols for an ELF symbol file.
2547    This ELF file has already been processed to get its minimal symbols,
2548    and any DWARF symbols that were in it.
2549
2550    This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2551    rolled into one.
2552
2553    OBJFILE is the object file we are reading symbols from.
2554    ADDR is the address relative to which the symbols are (e.g.
2555    the base address of the text segment).
2556    MAINLINE is true if we are reading the main symbol
2557    table (as opposed to a shared lib or dynamically loaded file).
2558    STABOFFSET and STABSIZE define the location in OBJFILE where the .stab
2559    section exists.
2560    STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
2561    .stabstr section exists.
2562
2563    This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
2564    adjusted for elf details. */
2565
2566 void
2567 elfstab_build_psymtabs (struct objfile *objfile, int mainline,
2568                         file_ptr staboffset, unsigned int stabsize,
2569                         file_ptr stabstroffset, unsigned int stabstrsize)
2570 {
2571   int val;
2572   bfd *sym_bfd = objfile->obfd;
2573   char *name = bfd_get_filename (sym_bfd);
2574   struct dbx_symfile_info *info;
2575
2576   /* There is already a dbx_symfile_info allocated by our caller.
2577      It might even contain some info from the ELF symtab to help us.  */
2578   info = objfile->sym_stab_info;
2579
2580   /* Find the first and last text address.  dbx_symfile_read seems to
2581      want this.  */
2582   find_text_range (sym_bfd, objfile);
2583
2584 #define ELF_STABS_SYMBOL_SIZE   12      /* XXX FIXME XXX */
2585   DBX_SYMBOL_SIZE (objfile) = ELF_STABS_SYMBOL_SIZE;
2586   DBX_SYMCOUNT (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
2587   DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
2588   DBX_SYMTAB_OFFSET (objfile) = staboffset;
2589
2590   if (stabstrsize > bfd_get_size (sym_bfd))
2591     error ("ridiculous string table size: %d bytes", stabstrsize);
2592   DBX_STRINGTAB (objfile) = (char *)
2593     obstack_alloc (&objfile->psymbol_obstack, stabstrsize + 1);
2594   OBJSTAT (objfile, sz_strtab += stabstrsize + 1);
2595
2596   /* Now read in the string table in one big gulp.  */
2597
2598   val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
2599   if (val < 0)
2600     perror_with_name (name);
2601   val = bfd_bread (DBX_STRINGTAB (objfile), stabstrsize, sym_bfd);
2602   if (val != stabstrsize)
2603     perror_with_name (name);
2604
2605   stabsread_new_init ();
2606   buildsym_new_init ();
2607   free_header_files ();
2608   init_header_files ();
2609   install_minimal_symbols (objfile);
2610
2611   processing_acc_compilation = 1;
2612
2613   /* In an elf file, we've already installed the minimal symbols that came
2614      from the elf (non-stab) symbol table, so always act like an
2615      incremental load here. */
2616   dbx_symfile_read (objfile, 0);
2617 }
2618 \f
2619 /* Scan and build partial symbols for a file with special sections for stabs
2620    and stabstrings.  The file has already been processed to get its minimal
2621    symbols, and any other symbols that might be necessary to resolve GSYMs.
2622
2623    This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2624    rolled into one.
2625
2626    OBJFILE is the object file we are reading symbols from.
2627    ADDR is the address relative to which the symbols are (e.g. the base address
2628    of the text segment).
2629    MAINLINE is true if we are reading the main symbol table (as opposed to a
2630    shared lib or dynamically loaded file).
2631    STAB_NAME is the name of the section that contains the stabs.
2632    STABSTR_NAME is the name of the section that contains the stab strings.
2633
2634    This routine is mostly copied from dbx_symfile_init and dbx_symfile_read. */
2635
2636 void
2637 stabsect_build_psymtabs (struct objfile *objfile, int mainline, char *stab_name,
2638                          char *stabstr_name, char *text_name)
2639 {
2640   int val;
2641   bfd *sym_bfd = objfile->obfd;
2642   char *name = bfd_get_filename (sym_bfd);
2643   asection *stabsect;
2644   asection *stabstrsect;
2645   asection *text_sect;
2646
2647   stabsect = bfd_get_section_by_name (sym_bfd, stab_name);
2648   stabstrsect = bfd_get_section_by_name (sym_bfd, stabstr_name);
2649
2650   if (!stabsect)
2651     return;
2652
2653   if (!stabstrsect)
2654     error ("stabsect_build_psymtabs:  Found stabs (%s), but not string section (%s)",
2655            stab_name, stabstr_name);
2656
2657   objfile->sym_stab_info = (struct dbx_symfile_info *)
2658     xmalloc (sizeof (struct dbx_symfile_info));
2659   memset (objfile->sym_stab_info, 0, sizeof (struct dbx_symfile_info));
2660
2661   text_sect = bfd_get_section_by_name (sym_bfd, text_name);
2662   if (!text_sect)
2663     error ("Can't find %s section in symbol file", text_name);
2664   DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
2665   DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
2666
2667   DBX_SYMBOL_SIZE (objfile) = sizeof (struct external_nlist);
2668   DBX_SYMCOUNT (objfile) = bfd_section_size (sym_bfd, stabsect)
2669     / DBX_SYMBOL_SIZE (objfile);
2670   DBX_STRINGTAB_SIZE (objfile) = bfd_section_size (sym_bfd, stabstrsect);
2671   DBX_SYMTAB_OFFSET (objfile) = stabsect->filepos;      /* XXX - FIXME: POKING INSIDE BFD DATA STRUCTURES */
2672
2673   if (DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
2674     error ("ridiculous string table size: %d bytes", DBX_STRINGTAB_SIZE (objfile));
2675   DBX_STRINGTAB (objfile) = (char *)
2676     obstack_alloc (&objfile->psymbol_obstack, DBX_STRINGTAB_SIZE (objfile) + 1);
2677   OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile) + 1);
2678
2679   /* Now read in the string table in one big gulp.  */
2680
2681   val = bfd_get_section_contents (sym_bfd,      /* bfd */
2682                                   stabstrsect,  /* bfd section */
2683                                   DBX_STRINGTAB (objfile),      /* input buffer */
2684                                   0,    /* offset into section */
2685                                   DBX_STRINGTAB_SIZE (objfile));        /* amount to read */
2686
2687   if (!val)
2688     perror_with_name (name);
2689
2690   stabsread_new_init ();
2691   buildsym_new_init ();
2692   free_header_files ();
2693   init_header_files ();
2694   install_minimal_symbols (objfile);
2695
2696   /* Now, do an incremental load */
2697
2698   processing_acc_compilation = 1;
2699   dbx_symfile_read (objfile, 0);
2700 }
2701 \f
2702 static struct sym_fns aout_sym_fns =
2703 {
2704   bfd_target_aout_flavour,
2705   dbx_new_init,                 /* sym_new_init: init anything gbl to entire symtab */
2706   dbx_symfile_init,             /* sym_init: read initial info, setup for sym_read() */
2707   dbx_symfile_read,             /* sym_read: read a symbol file into symtab */
2708   dbx_symfile_finish,           /* sym_finish: finished with file, cleanup */
2709   default_symfile_offsets,      /* sym_offsets: parse user's offsets to internal form */
2710   NULL                          /* next: pointer to next struct sym_fns */
2711 };
2712
2713 void
2714 _initialize_dbxread (void)
2715 {
2716   add_symtab_fns (&aout_sym_fns);
2717 }