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