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