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