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