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