]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/dbxread.c
ada: Use std::string in print_dynamic_range_bound
[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"
91f54576 57
c906108c 58#include "aout/aout64.h"
0963b4bd
MS
59#include "aout/stab_gnu.h" /* We always use GNU stabs, not
60 native, now. */
c906108c 61\f
c5aa993b 62
d2f4b8fe
TT
63/* Key for dbx-associated data. */
64
65const struct objfile_data *dbx_objfile_data_key;
66
c906108c
SS
67/* We put a pointer to this structure in the read_symtab_private field
68 of the psymtab. */
69
c5aa993b
JM
70struct symloc
71 {
c5aa993b
JM
72 /* Offset within the file symbol table of first local symbol for this
73 file. */
c906108c 74
c5aa993b 75 int ldsymoff;
c906108c 76
c5aa993b
JM
77 /* Length (in bytes) of the section of the symbol table devoted to
78 this file's symbols (actually, the section bracketed may contain
79 more than just this file's symbols). If ldsymlen is 0, the only
80 reason for this thing's existence is the dependency list. Nothing
81 else will happen when it is read in. */
c906108c 82
c5aa993b 83 int ldsymlen;
c906108c 84
c5aa993b 85 /* The size of each symbol in the symbol file (in external form). */
c906108c 86
c5aa993b 87 int symbol_size;
c906108c 88
c5aa993b
JM
89 /* Further information needed to locate the symbols if they are in
90 an ELF file. */
c906108c 91
c5aa993b
JM
92 int symbol_offset;
93 int string_offset;
94 int file_string_offset;
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)
c906108c 104\f
c5aa993b 105
91a81f69
TT
106/* The objfile we are currently reading. */
107
dd707e8e 108static struct objfile *dbxread_objfile;
91a81f69 109
0963b4bd 110/* Remember what we deduced to be the source language of this psymtab. */
c906108c
SS
111
112static enum language psymtab_language = language_unknown;
113
c906108c
SS
114/* The BFD for this file -- implicit parameter to next_symbol_text. */
115
116static bfd *symfile_bfd;
117
118/* The size of each symbol in the symbol file (in external form).
119 This is set by dbx_symfile_read when building psymtabs, and by
120 dbx_psymtab_to_symtab when building symtabs. */
121
122static unsigned symbol_size;
123
0963b4bd 124/* This is the offset of the symbol table in the executable file. */
c906108c
SS
125
126static unsigned symbol_table_offset;
127
0963b4bd 128/* This is the offset of the string table in the executable file. */
c906108c
SS
129
130static unsigned string_table_offset;
131
132/* For elf+stab executables, the n_strx field is not a simple index
133 into the string table. Instead, each .o file has a base offset in
134 the string table, and the associated symbols contain offsets from
135 this base. The following two variables contain the base offset for
0963b4bd 136 the current and next .o files. */
c906108c
SS
137
138static unsigned int file_string_table_offset;
139static unsigned int next_file_string_table_offset;
140
141/* .o and NLM files contain unrelocated addresses which are based at
142 0. When non-zero, this flag disables some of the special cases for
0963b4bd 143 Solaris elf+stab text addresses at location 0. */
c906108c
SS
144
145static int symfile_relocatable = 0;
146
c906108c
SS
147\f
148/* The lowest text address we have yet encountered. This is needed
149 because in an a.out file, there is no header field which tells us
150 what address the program is actually going to be loaded at, so we
151 need to make guesses based on the symbols (which *are* relocated to
152 reflect the address it will be loaded at). */
153
154static CORE_ADDR lowest_text_address;
155
156/* Non-zero if there is any line number info in the objfile. Prevents
8763cede 157 dbx_end_psymtab from discarding an otherwise empty psymtab. */
c906108c
SS
158
159static int has_line_numbers;
160
161/* Complaints about the symbols we have encountered. */
162
23136709
KB
163static void
164unknown_symtype_complaint (const char *arg1)
165{
e2e0b3e5 166 complaint (&symfile_complaints, _("unknown symbol type %s"), arg1);
23136709 167}
c906108c 168
23136709
KB
169static void
170lbrac_mismatch_complaint (int arg1)
171{
172 complaint (&symfile_complaints,
e2e0b3e5 173 _("N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d"), arg1);
23136709 174}
c906108c 175
23136709
KB
176static void
177repeated_header_complaint (const char *arg1, int arg2)
178{
179 complaint (&symfile_complaints,
3e43a32a
MS
180 _("\"repeated\" header file %s not "
181 "previously seen, at symtab pos %d"),
23136709
KB
182 arg1, arg2);
183}
1f077a3e 184
7a292a7a
SS
185/* find_text_range --- find start and end of loadable code sections
186
187 The find_text_range function finds the shortest address range that
188 encloses all sections containing executable code, and stores it in
189 objfile's text_addr and text_size members.
190
191 dbx_symfile_read will use this to finish off the partial symbol
192 table, in some cases. */
193
194static void
c5aa993b 195find_text_range (bfd * sym_bfd, struct objfile *objfile)
7a292a7a
SS
196{
197 asection *sec;
198 int found_any = 0;
b9179dbc
EZ
199 CORE_ADDR start = 0;
200 CORE_ADDR end = 0;
c5aa993b 201
7a292a7a
SS
202 for (sec = sym_bfd->sections; sec; sec = sec->next)
203 if (bfd_get_section_flags (sym_bfd, sec) & SEC_CODE)
204 {
205 CORE_ADDR sec_start = bfd_section_vma (sym_bfd, sec);
206 CORE_ADDR sec_end = sec_start + bfd_section_size (sym_bfd, sec);
207
208 if (found_any)
209 {
c5aa993b
JM
210 if (sec_start < start)
211 start = sec_start;
212 if (sec_end > end)
213 end = sec_end;
7a292a7a
SS
214 }
215 else
216 {
217 start = sec_start;
218 end = sec_end;
219 }
220
221 found_any = 1;
222 }
223
c5aa993b 224 if (!found_any)
8a3fe4f8 225 error (_("Can't find any code sections in symbol file"));
7a292a7a
SS
226
227 DBX_TEXT_ADDR (objfile) = start;
228 DBX_TEXT_SIZE (objfile) = end - start;
229}
c5aa993b 230\f
7a292a7a
SS
231
232
c906108c
SS
233/* During initial symbol readin, we need to have a structure to keep
234 track of which psymtabs have which bincls in them. This structure
235 is used during readin to setup the list of dependencies within each
0963b4bd 236 partial symbol table. */
c906108c
SS
237
238struct header_file_location
239{
a121b7c1 240 const char *name; /* Name of header file */
c906108c
SS
241 int instance; /* See above */
242 struct partial_symtab *pst; /* Partial symtab that has the
0963b4bd 243 BINCL/EINCL defs for this file. */
c906108c
SS
244};
245
0963b4bd 246/* The actual list and controling variables. */
c906108c
SS
247static struct header_file_location *bincl_list, *next_bincl;
248static int bincls_allocated;
249
0963b4bd 250/* Local function prototypes. */
c906108c 251
5c80ed9d 252static void read_ofile_symtab (struct objfile *, struct partial_symtab *);
c906108c 253
257e7a09
YQ
254static void dbx_read_symtab (struct partial_symtab *self,
255 struct objfile *objfile);
c906108c 256
5c80ed9d 257static void dbx_psymtab_to_symtab_1 (struct objfile *, struct partial_symtab *);
c906108c 258
8dddcb8f 259static void read_dbx_symtab (minimal_symbol_reader &, struct objfile *);
c906108c 260
a14ed312 261static void free_bincl_list (struct objfile *);
c906108c 262
a121b7c1
PA
263static struct partial_symtab *find_corresponding_bincl_psymtab (const char *,
264 int);
c906108c 265
a121b7c1 266static void add_bincl_to_list (struct partial_symtab *, const char *, int);
c906108c 267
a14ed312 268static void init_bincl_list (int, struct objfile *);
c906108c 269
a121b7c1 270static const char *dbx_next_symbol_text (struct objfile *);
c906108c 271
a14ed312 272static void fill_symbuf (bfd *);
c906108c 273
a14ed312 274static void dbx_symfile_init (struct objfile *);
c906108c 275
a14ed312 276static void dbx_new_init (struct objfile *);
c906108c 277
b15cc25c 278static void dbx_symfile_read (struct objfile *, symfile_add_flags);
c906108c 279
a14ed312 280static void dbx_symfile_finish (struct objfile *);
c906108c 281
8dddcb8f
TT
282static void record_minimal_symbol (minimal_symbol_reader &,
283 const char *, CORE_ADDR, int,
bec71544 284 struct objfile *);
c906108c 285
a121b7c1 286static void add_new_header_file (const char *, int);
c906108c 287
a121b7c1 288static void add_old_header_file (const char *, int);
c906108c 289
a14ed312 290static void add_this_object_header_file (int);
c906108c 291
a121b7c1 292static struct partial_symtab *start_psymtab (struct objfile *, const char *,
a14ed312
KB
293 CORE_ADDR, int,
294 struct partial_symbol **,
295 struct partial_symbol **);
d4f3574e 296
0963b4bd 297/* Free up old header file tables. */
c906108c 298
d3d55eeb 299void
fba45db2 300free_header_files (void)
c906108c
SS
301{
302 if (this_object_header_files)
303 {
b8c9b27d 304 xfree (this_object_header_files);
c906108c
SS
305 this_object_header_files = NULL;
306 }
307 n_allocated_this_object_header_files = 0;
308}
309
0963b4bd 310/* Allocate new header file tables. */
c906108c 311
d3d55eeb 312void
fba45db2 313init_header_files (void)
c906108c
SS
314{
315 n_allocated_this_object_header_files = 10;
8d749320 316 this_object_header_files = XNEWVEC (int, 10);
c906108c
SS
317}
318
319/* Add header file number I for this object file
320 at the next successive FILENUM. */
321
322static void
fba45db2 323add_this_object_header_file (int i)
c906108c
SS
324{
325 if (n_this_object_header_files == n_allocated_this_object_header_files)
326 {
327 n_allocated_this_object_header_files *= 2;
328 this_object_header_files
329 = (int *) xrealloc ((char *) this_object_header_files,
c5aa993b 330 n_allocated_this_object_header_files * sizeof (int));
c906108c
SS
331 }
332
333 this_object_header_files[n_this_object_header_files++] = i;
334}
335
336/* Add to this file an "old" header file, one already seen in
337 a previous object file. NAME is the header file's name.
338 INSTANCE is its instance code, to select among multiple
339 symbol tables for the same header file. */
340
341static void
a121b7c1 342add_old_header_file (const char *name, int instance)
c906108c 343{
dd707e8e 344 struct header_file *p = HEADER_FILES (dbxread_objfile);
52f0bd74 345 int i;
c906108c 346
dd707e8e 347 for (i = 0; i < N_HEADER_FILES (dbxread_objfile); i++)
0ba1096a 348 if (filename_cmp (p[i].name, name) == 0 && instance == p[i].instance)
c906108c
SS
349 {
350 add_this_object_header_file (i);
351 return;
352 }
23136709 353 repeated_header_complaint (name, symnum);
c906108c
SS
354}
355
356/* Add to this file a "new" header file: definitions for its types follow.
357 NAME is the header file's name.
358 Most often this happens only once for each distinct header file,
359 but not necessarily. If it happens more than once, INSTANCE has
360 a different value each time, and references to the header file
361 use INSTANCE values to select among them.
362
363 dbx output contains "begin" and "end" markers for each new header file,
364 but at this level we just need to know which files there have been;
365 so we record the file when its "begin" is seen and ignore the "end". */
366
367static void
a121b7c1 368add_new_header_file (const char *name, int instance)
c906108c 369{
52f0bd74
AC
370 int i;
371 struct header_file *hfile;
c906108c
SS
372
373 /* Make sure there is room for one more header file. */
374
dd707e8e 375 i = N_ALLOCATED_HEADER_FILES (dbxread_objfile);
c906108c 376
dd707e8e 377 if (N_HEADER_FILES (dbxread_objfile) == i)
c906108c
SS
378 {
379 if (i == 0)
380 {
dd707e8e
TT
381 N_ALLOCATED_HEADER_FILES (dbxread_objfile) = 10;
382 HEADER_FILES (dbxread_objfile) = (struct header_file *)
c906108c
SS
383 xmalloc (10 * sizeof (struct header_file));
384 }
385 else
386 {
387 i *= 2;
dd707e8e
TT
388 N_ALLOCATED_HEADER_FILES (dbxread_objfile) = i;
389 HEADER_FILES (dbxread_objfile) = (struct header_file *)
390 xrealloc ((char *) HEADER_FILES (dbxread_objfile),
c906108c
SS
391 (i * sizeof (struct header_file)));
392 }
393 }
394
395 /* Create an entry for this header file. */
396
dd707e8e
TT
397 i = N_HEADER_FILES (dbxread_objfile)++;
398 hfile = HEADER_FILES (dbxread_objfile) + i;
1b36a34b 399 hfile->name = xstrdup (name);
c906108c
SS
400 hfile->instance = instance;
401 hfile->length = 10;
8d749320 402 hfile->vector = XCNEWVEC (struct type *, 10);
c906108c
SS
403
404 add_this_object_header_file (i);
405}
406
407#if 0
408static struct type **
fba45db2 409explicit_lookup_type (int real_filenum, int index)
c906108c 410{
dd707e8e 411 struct header_file *f = &HEADER_FILES (dbxread_objfile)[real_filenum];
c906108c
SS
412
413 if (index >= f->length)
414 {
415 f->length *= 2;
416 f->vector = (struct type **)
417 xrealloc (f->vector, f->length * sizeof (struct type *));
418 memset (&f->vector[f->length / 2],
c5aa993b 419 '\0', f->length * sizeof (struct type *) / 2);
c906108c
SS
420 }
421 return &f->vector[index];
422}
423#endif
424\f
425static void
8dddcb8f
TT
426record_minimal_symbol (minimal_symbol_reader &reader,
427 const char *name, CORE_ADDR address, int type,
fba45db2 428 struct objfile *objfile)
c906108c
SS
429{
430 enum minimal_symbol_type ms_type;
431 int section;
c906108c
SS
432
433 switch (type)
434 {
435 case N_TEXT | N_EXT:
436 ms_type = mst_text;
b8fbeb18 437 section = SECT_OFF_TEXT (objfile);
c906108c
SS
438 break;
439 case N_DATA | N_EXT:
440 ms_type = mst_data;
b8fbeb18 441 section = SECT_OFF_DATA (objfile);
c906108c
SS
442 break;
443 case N_BSS | N_EXT:
444 ms_type = mst_bss;
b8fbeb18 445 section = SECT_OFF_BSS (objfile);
c906108c
SS
446 break;
447 case N_ABS | N_EXT:
448 ms_type = mst_abs;
449 section = -1;
c906108c
SS
450 break;
451#ifdef N_SETV
452 case N_SETV | N_EXT:
453 ms_type = mst_data;
b8fbeb18 454 section = SECT_OFF_DATA (objfile);
c906108c
SS
455 break;
456 case N_SETV:
457 /* I don't think this type actually exists; since a N_SETV is the result
c5aa993b
JM
458 of going over many .o files, it doesn't make sense to have one
459 file local. */
c906108c 460 ms_type = mst_file_data;
b8fbeb18 461 section = SECT_OFF_DATA (objfile);
c906108c
SS
462 break;
463#endif
464 case N_TEXT:
465 case N_NBTEXT:
466 case N_FN:
467 case N_FN_SEQ:
468 ms_type = mst_file_text;
b8fbeb18 469 section = SECT_OFF_TEXT (objfile);
c906108c
SS
470 break;
471 case N_DATA:
472 ms_type = mst_file_data;
473
474 /* Check for __DYNAMIC, which is used by Sun shared libraries.
c5aa993b
JM
475 Record it as global even if it's local, not global, so
476 lookup_minimal_symbol can find it. We don't check symbol_leading_char
477 because for SunOS4 it always is '_'. */
91f54576 478 if (name[8] == 'C' && strcmp ("__DYNAMIC", name) == 0)
c906108c
SS
479 ms_type = mst_data;
480
481 /* Same with virtual function tables, both global and static. */
482 {
bec71544 483 const char *tempstring = name;
9a619af0 484
c906108c
SS
485 if (tempstring[0] == bfd_get_symbol_leading_char (objfile->obfd))
486 ++tempstring;
015a42b4 487 if (is_vtable_name (tempstring))
c906108c
SS
488 ms_type = mst_data;
489 }
b8fbeb18 490 section = SECT_OFF_DATA (objfile);
c906108c
SS
491 break;
492 case N_BSS:
493 ms_type = mst_file_bss;
b8fbeb18 494 section = SECT_OFF_BSS (objfile);
c906108c
SS
495 break;
496 default:
497 ms_type = mst_unknown;
498 section = -1;
c906108c 499 break;
c5aa993b 500 }
c906108c
SS
501
502 if ((ms_type == mst_file_text || ms_type == mst_text)
503 && address < lowest_text_address)
504 lowest_text_address = address;
505
8dddcb8f 506 reader.record_with_info (name, address, ms_type, section);
c906108c
SS
507}
508\f
509/* Scan and build partial symbols for a symbol file.
510 We have been initialized by a call to dbx_symfile_init, which
511 put all the relevant info into a "struct dbx_symfile_info",
f4352531 512 hung off the objfile structure. */
c906108c
SS
513
514static void
b15cc25c 515dbx_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
c906108c
SS
516{
517 bfd *sym_bfd;
518 int val;
519 struct cleanup *back_to;
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
TG
533 /* Size the symbol table. */
534 if (objfile->global_psymbols.size == 0 && objfile->static_psymbols.size == 0)
c906108c
SS
535 init_psymbol_list (objfile, DBX_SYMCOUNT (objfile));
536
537 symbol_size = DBX_SYMBOL_SIZE (objfile);
538 symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
539
540 free_pending_blocks ();
a0b3c4fd 541 back_to = make_cleanup (really_free_pendings, 0);
c906108c 542
d25e8719 543 minimal_symbol_reader reader (objfile);
c906108c 544
0963b4bd 545 /* Read stabs data from executable file and define symbols. */
c906108c 546
8dddcb8f 547 read_dbx_symtab (reader, objfile);
c906108c 548
c906108c 549 /* Install any minimal symbols that have been collected as the current
0963b4bd 550 minimal symbols for this objfile. */
c906108c 551
d25e8719 552 reader.install ();
c906108c
SS
553
554 do_cleanups (back_to);
555}
556
557/* Initialize anything that needs initializing when a completely new
558 symbol file is specified (not just adding some symbols from another
559 file, e.g. a shared library). */
560
561static void
fba45db2 562dbx_new_init (struct objfile *ignore)
c906108c
SS
563{
564 stabsread_new_init ();
565 buildsym_new_init ();
566 init_header_files ();
567}
568
569
570/* dbx_symfile_init ()
571 is the dbx-specific initialization routine for reading symbols.
572 It is passed a struct objfile which contains, among other things,
573 the BFD for the file whose symbols are being read, and a slot for a pointer
574 to "private data" which we fill with goodies.
575
576 We read the string table into malloc'd space and stash a pointer to it.
577
578 Since BFD doesn't know how to read debug symbols in a format-independent
579 way (and may never do so...), we have to do it ourselves. We will never
0963b4bd 580 be called unless this is an a.out (or very similar) file.
c906108c
SS
581 FIXME, there should be a cleaner peephole into the BFD environment here. */
582
c5aa993b 583#define DBX_STRINGTAB_SIZE_SIZE sizeof(long) /* FIXME */
c906108c
SS
584
585static void
fba45db2 586dbx_symfile_init (struct objfile *objfile)
c906108c
SS
587{
588 int val;
589 bfd *sym_bfd = objfile->obfd;
590 char *name = bfd_get_filename (sym_bfd);
591 asection *text_sect;
592 unsigned char size_temp[DBX_STRINGTAB_SIZE_SIZE];
d2f4b8fe 593 struct dbx_symfile_info *dbx;
c906108c 594
0963b4bd 595 /* Allocate struct to keep track of the symfile. */
d2f4b8fe
TT
596 dbx = XCNEW (struct dbx_symfile_info);
597 set_objfile_data (objfile, dbx_objfile_data_key, dbx);
c906108c
SS
598
599 DBX_TEXT_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
600 DBX_DATA_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".data");
601 DBX_BSS_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".bss");
602
0963b4bd 603 /* FIXME POKING INSIDE BFD DATA STRUCTURES. */
c906108c
SS
604#define STRING_TABLE_OFFSET (sym_bfd->origin + obj_str_filepos (sym_bfd))
605#define SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_sym_filepos (sym_bfd))
606
0963b4bd 607 /* FIXME POKING INSIDE BFD DATA STRUCTURES. */
c906108c 608
c906108c
SS
609 text_sect = bfd_get_section_by_name (sym_bfd, ".text");
610 if (!text_sect)
8a3fe4f8 611 error (_("Can't find .text section in symbol file"));
c906108c
SS
612 DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
613 DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
614
615 DBX_SYMBOL_SIZE (objfile) = obj_symbol_entry_size (sym_bfd);
616 DBX_SYMCOUNT (objfile) = bfd_get_symcount (sym_bfd);
617 DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
618
8b92e4d5
EZ
619 /* Read the string table and stash it away in the objfile_obstack.
620 When we blow away the objfile the string table goes away as well.
c906108c
SS
621 Note that gdb used to use the results of attempting to malloc the
622 string table, based on the size it read, as a form of sanity check
623 for botched byte swapping, on the theory that a byte swapped string
624 table size would be so totally bogus that the malloc would fail. Now
8b92e4d5 625 that we put in on the objfile_obstack, we can't do this since gdb gets
c906108c
SS
626 a fatal error (out of virtual memory) if the size is bogus. We can
627 however at least check to see if the size is less than the size of
628 the size field itself, or larger than the size of the entire file.
629 Note that all valid string tables have a size greater than zero, since
0963b4bd 630 the bytes used to hold the size are included in the count. */
c906108c
SS
631
632 if (STRING_TABLE_OFFSET == 0)
633 {
634 /* It appears that with the existing bfd code, STRING_TABLE_OFFSET
c5aa993b 635 will never be zero, even when there is no string table. This
0963b4bd 636 would appear to be a bug in bfd. */
c906108c
SS
637 DBX_STRINGTAB_SIZE (objfile) = 0;
638 DBX_STRINGTAB (objfile) = NULL;
639 }
640 else
641 {
642 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
643 if (val < 0)
644 perror_with_name (name);
c5aa993b 645
4efb68b1
AC
646 memset (size_temp, 0, sizeof (size_temp));
647 val = bfd_bread (size_temp, sizeof (size_temp), sym_bfd);
c906108c
SS
648 if (val < 0)
649 {
650 perror_with_name (name);
651 }
652 else if (val == 0)
653 {
654 /* With the existing bfd code, STRING_TABLE_OFFSET will be set to
655 EOF if there is no string table, and attempting to read the size
0963b4bd 656 from EOF will read zero bytes. */
c906108c
SS
657 DBX_STRINGTAB_SIZE (objfile) = 0;
658 DBX_STRINGTAB (objfile) = NULL;
659 }
660 else
661 {
662 /* Read some data that would appear to be the string table size.
663 If there really is a string table, then it is probably the right
664 size. Byteswap if necessary and validate the size. Note that
665 the minimum is DBX_STRINGTAB_SIZE_SIZE. If we just read some
666 random data that happened to be at STRING_TABLE_OFFSET, because
667 bfd can't tell us there is no string table, the sanity checks may
0963b4bd 668 or may not catch this. */
c906108c 669 DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
c5aa993b 670
c906108c
SS
671 if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp)
672 || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
8a3fe4f8 673 error (_("ridiculous string table size (%d bytes)."),
c906108c 674 DBX_STRINGTAB_SIZE (objfile));
c5aa993b 675
c906108c 676 DBX_STRINGTAB (objfile) =
8b92e4d5 677 (char *) obstack_alloc (&objfile->objfile_obstack,
c906108c
SS
678 DBX_STRINGTAB_SIZE (objfile));
679 OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile));
c5aa993b 680
c906108c 681 /* Now read in the string table in one big gulp. */
c5aa993b 682
c906108c
SS
683 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
684 if (val < 0)
685 perror_with_name (name);
3a42e9d0
AM
686 val = bfd_bread (DBX_STRINGTAB (objfile),
687 DBX_STRINGTAB_SIZE (objfile),
688 sym_bfd);
c906108c
SS
689 if (val != DBX_STRINGTAB_SIZE (objfile))
690 perror_with_name (name);
691 }
692 }
693}
694
695/* Perform any local cleanups required when we are done with a particular
696 objfile. I.E, we are in the process of discarding all symbol information
697 for an objfile, freeing up all memory held for it, and unlinking the
0963b4bd 698 objfile struct from the global list of known objfiles. */
c906108c
SS
699
700static void
fba45db2 701dbx_symfile_finish (struct objfile *objfile)
c906108c 702{
d2f4b8fe
TT
703 free_header_files ();
704}
705
706static void
707dbx_free_symfile_info (struct objfile *objfile, void *arg)
708{
9a3c8263 709 struct dbx_symfile_info *dbx = (struct dbx_symfile_info *) arg;
d2f4b8fe
TT
710
711 if (dbx->header_files != NULL)
c906108c 712 {
d2f4b8fe
TT
713 int i = dbx->n_header_files;
714 struct header_file *hfiles = dbx->header_files;
c906108c 715
d2f4b8fe
TT
716 while (--i >= 0)
717 {
718 xfree (hfiles[i].name);
719 xfree (hfiles[i].vector);
c906108c 720 }
d2f4b8fe 721 xfree (hfiles);
c906108c 722 }
d2f4b8fe
TT
723
724 xfree (dbx);
c906108c 725}
d2f4b8fe 726
c906108c 727\f
c5aa993b 728
c906108c
SS
729/* Buffer for reading the symbol table entries. */
730static struct external_nlist symbuf[4096];
731static int symbuf_idx;
732static int symbuf_end;
733
c906108c
SS
734/* Name of last function encountered. Used in Solaris to approximate
735 object file boundaries. */
a121b7c1 736static const char *last_function_name;
c906108c
SS
737
738/* The address in memory of the string table of the object file we are
739 reading (which might not be the "main" object file, but might be a
740 shared library or some other dynamically loaded thing). This is
741 set by read_dbx_symtab when building psymtabs, and by
742 read_ofile_symtab when building symtabs, and is used only by
743 next_symbol_text. FIXME: If that is true, we don't need it when
744 building psymtabs, right? */
745static char *stringtab_global;
746
747/* These variables are used to control fill_symbuf when the stabs
748 symbols are not contiguous (as may be the case when a COFF file is
749 linked using --split-by-reloc). */
750static struct stab_section_list *symbuf_sections;
751static unsigned int symbuf_left;
752static unsigned int symbuf_read;
753
086df311
DJ
754/* This variable stores a global stabs buffer, if we read stabs into
755 memory in one chunk in order to process relocations. */
756static bfd_byte *stabs_data;
757
c906108c
SS
758/* Refill the symbol table input buffer
759 and set the variables that control fetching entries from it.
760 Reports an error if no data available.
761 This function can read past the end of the symbol table
762 (into the string table) but this does no harm. */
763
764static void
fba45db2 765fill_symbuf (bfd *sym_bfd)
c906108c
SS
766{
767 unsigned int count;
768 int nbytes;
769
086df311
DJ
770 if (stabs_data)
771 {
772 nbytes = sizeof (symbuf);
773 if (nbytes > symbuf_left)
774 nbytes = symbuf_left;
775 memcpy (symbuf, stabs_data + symbuf_read, nbytes);
776 }
777 else if (symbuf_sections == NULL)
778 {
779 count = sizeof (symbuf);
780 nbytes = bfd_bread (symbuf, count, sym_bfd);
781 }
c906108c
SS
782 else
783 {
784 if (symbuf_left <= 0)
785 {
786 file_ptr filepos = symbuf_sections->section->filepos;
9a619af0 787
c906108c
SS
788 if (bfd_seek (sym_bfd, filepos, SEEK_SET) != 0)
789 perror_with_name (bfd_get_filename (sym_bfd));
790 symbuf_left = bfd_section_size (sym_bfd, symbuf_sections->section);
791 symbol_table_offset = filepos - symbuf_read;
792 symbuf_sections = symbuf_sections->next;
793 }
794
795 count = symbuf_left;
796 if (count > sizeof (symbuf))
797 count = sizeof (symbuf);
086df311 798 nbytes = bfd_bread (symbuf, count, sym_bfd);
c906108c
SS
799 }
800
c906108c
SS
801 if (nbytes < 0)
802 perror_with_name (bfd_get_filename (sym_bfd));
803 else if (nbytes == 0)
8a3fe4f8 804 error (_("Premature end of file reading symbol table"));
c906108c
SS
805 symbuf_end = nbytes / symbol_size;
806 symbuf_idx = 0;
807 symbuf_left -= nbytes;
808 symbuf_read += nbytes;
809}
810
086df311
DJ
811static void
812stabs_seek (int sym_offset)
813{
814 if (stabs_data)
815 {
816 symbuf_read += sym_offset;
817 symbuf_left -= sym_offset;
818 }
819 else
820 bfd_seek (symfile_bfd, sym_offset, SEEK_CUR);
821}
822
c906108c
SS
823#define INTERNALIZE_SYMBOL(intern, extern, abfd) \
824 { \
c906108c 825 (intern).n_strx = bfd_h_get_32 (abfd, (extern)->e_strx); \
83b94be5
AM
826 (intern).n_type = bfd_h_get_8 (abfd, (extern)->e_type); \
827 (intern).n_other = 0; \
c906108c 828 (intern).n_desc = bfd_h_get_16 (abfd, (extern)->e_desc); \
40b3352b
L
829 if (bfd_get_sign_extend_vma (abfd)) \
830 (intern).n_value = bfd_h_get_signed_32 (abfd, (extern)->e_value); \
831 else \
832 (intern).n_value = bfd_h_get_32 (abfd, (extern)->e_value); \
c906108c
SS
833 }
834
835/* Invariant: The symbol pointed to by symbuf_idx is the first one
836 that hasn't been swapped. Swap the symbol at the same time
837 that symbuf_idx is incremented. */
838
839/* dbx allows the text of a symbol name to be continued into the
840 next symbol name! When such a continuation is encountered
841 (a \ at the end of the text of a name)
842 call this function to get the continuation. */
843
a121b7c1 844static const char *
fba45db2 845dbx_next_symbol_text (struct objfile *objfile)
c906108c
SS
846{
847 struct internal_nlist nlist;
848
849 if (symbuf_idx == symbuf_end)
850 fill_symbuf (symfile_bfd);
851
852 symnum++;
c5aa993b 853 INTERNALIZE_SYMBOL (nlist, &symbuf[symbuf_idx], symfile_bfd);
c906108c
SS
854 OBJSTAT (objfile, n_stabs++);
855
856 symbuf_idx++;
857
858 return nlist.n_strx + stringtab_global + file_string_table_offset;
859}
860\f
861/* Initialize the list of bincls to contain none and have some
862 allocated. */
863
864static void
fba45db2 865init_bincl_list (int number, struct objfile *objfile)
c906108c
SS
866{
867 bincls_allocated = number;
8d749320
SM
868 next_bincl = bincl_list = XNEWVEC (struct header_file_location,
869 bincls_allocated);
c906108c
SS
870}
871
872/* Add a bincl to the list. */
873
874static void
a121b7c1 875add_bincl_to_list (struct partial_symtab *pst, const char *name, int instance)
c906108c
SS
876{
877 if (next_bincl >= bincl_list + bincls_allocated)
878 {
879 int offset = next_bincl - bincl_list;
9a619af0 880
c906108c
SS
881 bincls_allocated *= 2;
882 bincl_list = (struct header_file_location *)
0efffb96
AC
883 xrealloc ((char *) bincl_list,
884 bincls_allocated * sizeof (struct header_file_location));
c906108c
SS
885 next_bincl = bincl_list + offset;
886 }
887 next_bincl->pst = pst;
888 next_bincl->instance = instance;
889 next_bincl++->name = name;
890}
891
892/* Given a name, value pair, find the corresponding
893 bincl in the list. Return the partial symtab associated
894 with that header_file_location. */
895
896static struct partial_symtab *
a121b7c1 897find_corresponding_bincl_psymtab (const char *name, int instance)
c906108c
SS
898{
899 struct header_file_location *bincl;
900
901 for (bincl = bincl_list; bincl < next_bincl; bincl++)
902 if (bincl->instance == instance
6314a349 903 && strcmp (name, bincl->name) == 0)
c906108c
SS
904 return bincl->pst;
905
23136709 906 repeated_header_complaint (name, symnum);
c906108c
SS
907 return (struct partial_symtab *) 0;
908}
909
910/* Free the storage allocated for the bincl list. */
911
912static void
fba45db2 913free_bincl_list (struct objfile *objfile)
c906108c 914{
2dc74dc1 915 xfree (bincl_list);
c906108c
SS
916 bincls_allocated = 0;
917}
918
74b7792f
AC
919static void
920do_free_bincl_list_cleanup (void *objfile)
921{
9a3c8263 922 free_bincl_list ((struct objfile *) objfile);
74b7792f
AC
923}
924
925static struct cleanup *
926make_cleanup_free_bincl_list (struct objfile *objfile)
927{
928 return make_cleanup (do_free_bincl_list_cleanup, objfile);
929}
930
6a34fd2f
EZ
931/* Set namestring based on nlist. If the string table index is invalid,
932 give a fake name, and print a single error message per symbol file read,
933 rather than abort the symbol reading or flood the user with messages. */
934
a121b7c1 935static const char *
83b94be5 936set_namestring (struct objfile *objfile, const struct internal_nlist *nlist)
6a34fd2f 937{
a121b7c1 938 const char *namestring;
6a34fd2f 939
5409dacf
JK
940 if (nlist->n_strx + file_string_table_offset
941 >= DBX_STRINGTAB_SIZE (objfile)
942 || nlist->n_strx + file_string_table_offset < nlist->n_strx)
6a34fd2f 943 {
3e43a32a
MS
944 complaint (&symfile_complaints,
945 _("bad string table offset in symbol %d"),
23136709 946 symnum);
6a34fd2f
EZ
947 namestring = "<bad string table offset>";
948 }
949 else
83b94be5
AM
950 namestring = (nlist->n_strx + file_string_table_offset
951 + DBX_STRINGTAB (objfile));
6a34fd2f
EZ
952 return namestring;
953}
954
a78f21af 955static CORE_ADDR
a121b7c1 956find_stab_function_addr (const char *namestring, const char *filename,
4867e41e
DM
957 struct objfile *objfile)
958{
3b7344d5 959 struct bound_minimal_symbol msym;
4867e41e
DM
960 int n;
961
a121b7c1
PA
962 const char *colon = strchr (namestring, ':');
963 if (colon == NULL)
964 n = 0;
965 else
966 n = colon - namestring;
967
968 char *p = (char *) alloca (n + 2);
4867e41e
DM
969 strncpy (p, namestring, n);
970 p[n] = 0;
971
972 msym = lookup_minimal_symbol (p, filename, objfile);
3b7344d5 973 if (msym.minsym == NULL)
4867e41e
DM
974 {
975 /* Sun Fortran appends an underscore to the minimal symbol name,
976 try again with an appended underscore if the minimal symbol
977 was not found. */
978 p[n] = '_';
979 p[n + 1] = 0;
980 msym = lookup_minimal_symbol (p, filename, objfile);
981 }
982
3b7344d5 983 if (msym.minsym == NULL && filename != NULL)
4867e41e 984 {
0963b4bd 985 /* Try again without the filename. */
4867e41e
DM
986 p[n] = 0;
987 msym = lookup_minimal_symbol (p, NULL, objfile);
988 }
3b7344d5 989 if (msym.minsym == NULL && filename != NULL)
4867e41e 990 {
0963b4bd 991 /* And try again for Sun Fortran, but without the filename. */
4867e41e
DM
992 p[n] = '_';
993 p[n + 1] = 0;
994 msym = lookup_minimal_symbol (p, NULL, objfile);
995 }
996
77e371c0 997 return msym.minsym == NULL ? 0 : BMSYMBOL_VALUE_ADDRESS (msym);
4867e41e 998}
4867e41e 999
23136709
KB
1000static void
1001function_outside_compilation_unit_complaint (const char *arg1)
1002{
1003 complaint (&symfile_complaints,
3e43a32a
MS
1004 _("function `%s' appears to be defined "
1005 "outside of all compilation units"),
23136709
KB
1006 arg1);
1007}
1008
d4f3574e 1009/* Setup partial_symtab's describing each source file for which
0963b4bd 1010 debugging information is available. */
c906108c
SS
1011
1012static void
8dddcb8f 1013read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile)
c906108c 1014{
5e2b427d 1015 struct gdbarch *gdbarch = get_objfile_arch (objfile);
0963b4bd 1016 struct external_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch. */
c906108c 1017 struct internal_nlist nlist;
d4f3574e
SS
1018 CORE_ADDR text_addr;
1019 int text_size;
a121b7c1 1020 const char *sym_name;
71c25dea 1021 int sym_len;
c906108c 1022
a121b7c1 1023 const char *namestring;
c906108c
SS
1024 int nsl;
1025 int past_first_source_file = 0;
c906108c
SS
1026 CORE_ADDR last_function_start = 0;
1027 struct cleanup *back_to;
1028 bfd *abfd;
1029 int textlow_not_set;
7c8a5605 1030 int data_sect_index;
c906108c 1031
0963b4bd 1032 /* Current partial symtab. */
c906108c
SS
1033 struct partial_symtab *pst;
1034
0963b4bd 1035 /* List of current psymtab's include files. */
0d5cff50 1036 const char **psymtab_include_list;
c906108c
SS
1037 int includes_allocated;
1038 int includes_used;
1039
0963b4bd 1040 /* Index within current psymtab dependency list. */
c906108c
SS
1041 struct partial_symtab **dependency_list;
1042 int dependencies_used, dependencies_allocated;
1043
d4f3574e
SS
1044 text_addr = DBX_TEXT_ADDR (objfile);
1045 text_size = DBX_TEXT_SIZE (objfile);
1046
c906108c
SS
1047 /* FIXME. We probably want to change stringtab_global rather than add this
1048 while processing every symbol entry. FIXME. */
1049 file_string_table_offset = 0;
1050 next_file_string_table_offset = 0;
1051
1052 stringtab_global = DBX_STRINGTAB (objfile);
c5aa993b 1053
c906108c
SS
1054 pst = (struct partial_symtab *) 0;
1055
1056 includes_allocated = 30;
1057 includes_used = 0;
0d5cff50
DE
1058 psymtab_include_list = (const char **) alloca (includes_allocated *
1059 sizeof (const char *));
c906108c
SS
1060
1061 dependencies_allocated = 30;
1062 dependencies_used = 0;
1063 dependency_list =
1064 (struct partial_symtab **) alloca (dependencies_allocated *
1065 sizeof (struct partial_symtab *));
1066
1067 /* Init bincl list */
1068 init_bincl_list (20, objfile);
74b7792f 1069 back_to = make_cleanup_free_bincl_list (objfile);
c906108c 1070
46212e0b 1071 set_last_source_file (NULL);
c906108c 1072
96baa820 1073 lowest_text_address = (CORE_ADDR) -1;
c906108c 1074
0963b4bd 1075 symfile_bfd = objfile->obfd; /* For next_text_symbol. */
c906108c
SS
1076 abfd = objfile->obfd;
1077 symbuf_end = symbuf_idx = 0;
1078 next_symbol_text_func = dbx_next_symbol_text;
1079 textlow_not_set = 1;
1080 has_line_numbers = 0;
1081
4f49b26b
JB
1082 /* FIXME: jimb/2003-09-12: We don't apply the right section's offset
1083 to global and static variables. The stab for a global or static
1084 variable doesn't give us any indication of which section it's in,
1085 so we can't tell immediately which offset in
1086 objfile->section_offsets we should apply to the variable's
1087 address.
1088
1089 We could certainly find out which section contains the variable
1090 by looking up the variable's unrelocated address with
1091 find_pc_section, but that would be expensive; this is the
1092 function that constructs the partial symbol tables by examining
1093 every symbol in the entire executable, and it's
1094 performance-critical. So that expense would not be welcome. I'm
1095 not sure what to do about this at the moment.
1096
1097 What we have done for years is to simply assume that the .data
1098 section's offset is appropriate for all global and static
1099 variables. Recently, this was expanded to fall back to the .bss
1100 section's offset if there is no .data section, and then to the
1101 .rodata section's offset. */
7c8a5605
JB
1102 data_sect_index = objfile->sect_index_data;
1103 if (data_sect_index == -1)
1104 data_sect_index = SECT_OFF_BSS (objfile);
2a13f9bc
JB
1105 if (data_sect_index == -1)
1106 data_sect_index = SECT_OFF_RODATA (objfile);
d646061f
JB
1107
1108 /* If data_sect_index is still -1, that's okay. It's perfectly fine
1109 for the file to have no .data, no .bss, and no .text at all, if
1110 it also has no global or static variables. If it does, we will
1111 get an internal error from an ANOFFSET macro below when we try to
1112 use data_sect_index. */
7c8a5605 1113
c906108c
SS
1114 for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
1115 {
0963b4bd
MS
1116 /* Get the symbol for this run and pull out some info. */
1117 QUIT; /* Allow this to be interruptable. */
c906108c
SS
1118 if (symbuf_idx == symbuf_end)
1119 fill_symbuf (abfd);
1120 bufp = &symbuf[symbuf_idx++];
1121
1122 /*
1123 * Special case to speed up readin.
1124 */
1125 if (bfd_h_get_8 (abfd, bufp->e_type) == N_SLINE)
1126 {
1127 has_line_numbers = 1;
1128 continue;
1129 }
1130
1131 INTERNALIZE_SYMBOL (nlist, bufp, abfd);
1132 OBJSTAT (objfile, n_stabs++);
1133
1134 /* Ok. There is a lot of code duplicated in the rest of this
1135 switch statement (for efficiency reasons). Since I don't
1136 like duplicating code, I will do my penance here, and
1137 describe the code which is duplicated:
1138
c5aa993b
JM
1139 *) The assignment to namestring.
1140 *) The call to strchr.
b021a221 1141 *) The addition of a partial symbol the two partial
c5aa993b 1142 symbol lists. This last is a large section of code, so
0963b4bd 1143 I've imbedded it in the following macro. */
c5aa993b 1144
6a34fd2f
EZ
1145 switch (nlist.n_type)
1146 {
6a34fd2f
EZ
1147 /*
1148 * Standard, external, non-debugger, symbols
1149 */
1150
9ce5d3bb
DE
1151 case N_TEXT | N_EXT:
1152 case N_NBTEXT | N_EXT:
6a34fd2f
EZ
1153 goto record_it;
1154
9ce5d3bb
DE
1155 case N_DATA | N_EXT:
1156 case N_NBDATA | N_EXT:
6a34fd2f
EZ
1157 goto record_it;
1158
9ce5d3bb
DE
1159 case N_BSS:
1160 case N_BSS | N_EXT:
1161 case N_NBBSS | N_EXT:
1162 case N_SETV | N_EXT: /* FIXME, is this in BSS? */
6a34fd2f
EZ
1163 goto record_it;
1164
9ce5d3bb 1165 case N_ABS | N_EXT:
6a34fd2f 1166 record_it:
83b94be5 1167 namestring = set_namestring (objfile, &nlist);
6a34fd2f 1168
8dddcb8f 1169 record_minimal_symbol (reader, namestring, nlist.n_value,
6a34fd2f
EZ
1170 nlist.n_type, objfile); /* Always */
1171 continue;
1172
0963b4bd 1173 /* Standard, local, non-debugger, symbols. */
6a34fd2f 1174
9ce5d3bb 1175 case N_NBTEXT:
6a34fd2f
EZ
1176
1177 /* We need to be able to deal with both N_FN or N_TEXT,
1178 because we have no way of knowing whether the sys-supplied ld
1179 or GNU ld was used to make the executable. Sequents throw
1180 in another wrinkle -- they renumbered N_FN. */
1181
9ce5d3bb
DE
1182 case N_FN:
1183 case N_FN_SEQ:
1184 case N_TEXT:
83b94be5 1185 namestring = set_namestring (objfile, &nlist);
6a34fd2f
EZ
1186
1187 if ((namestring[0] == '-' && namestring[1] == 'l')
1188 || (namestring[(nsl = strlen (namestring)) - 1] == 'o'
1189 && namestring[nsl - 2] == '.'))
9ce5d3bb 1190 {
2273f0ac
TT
1191 nlist.n_value += ANOFFSET (objfile->section_offsets,
1192 SECT_OFF_TEXT (objfile));
1193
9ce5d3bb
DE
1194 if (past_first_source_file && pst
1195 /* The gould NP1 uses low values for .o and -l symbols
1196 which are not the address. */
1197 && nlist.n_value >= pst->textlow)
1198 {
8763cede
DE
1199 dbx_end_psymtab (objfile, pst, psymtab_include_list,
1200 includes_used, symnum * symbol_size,
1201 nlist.n_value > pst->texthigh
1202 ? nlist.n_value : pst->texthigh,
1203 dependency_list, dependencies_used,
1204 textlow_not_set);
9ce5d3bb
DE
1205 pst = (struct partial_symtab *) 0;
1206 includes_used = 0;
1207 dependencies_used = 0;
578933ab 1208 has_line_numbers = 0;
9ce5d3bb
DE
1209 }
1210 else
1211 past_first_source_file = 1;
9ce5d3bb 1212 }
6a34fd2f 1213 else
9ce5d3bb 1214 goto record_it;
6a34fd2f
EZ
1215 continue;
1216
9ce5d3bb 1217 case N_DATA:
6a34fd2f
EZ
1218 goto record_it;
1219
9ce5d3bb 1220 case N_UNDF | N_EXT:
d4862372
JB
1221 /* The case (nlist.n_value != 0) is a "Fortran COMMON" symbol.
1222 We used to rely on the target to tell us whether it knows
1223 where the symbol has been relocated to, but none of the
1224 target implementations actually provided that operation.
1225 So we just ignore the symbol, the same way we would do if
1226 we had a target-side symbol lookup which returned no match.
1227
1228 All other symbols (with nlist.n_value == 0), are really
1229 undefined, and so we ignore them too. */
1230 continue;
6a34fd2f 1231
9ce5d3bb 1232 case N_UNDF:
6a34fd2f 1233 if (processing_acc_compilation && nlist.n_strx == 1)
9ce5d3bb
DE
1234 {
1235 /* Deal with relative offsets in the string table
1236 used in ELF+STAB under Solaris. If we want to use the
1237 n_strx field, which contains the name of the file,
1238 we must adjust file_string_table_offset *before* calling
1239 set_namestring(). */
1240 past_first_source_file = 1;
1241 file_string_table_offset = next_file_string_table_offset;
1242 next_file_string_table_offset =
1243 file_string_table_offset + nlist.n_value;
1244 if (next_file_string_table_offset < file_string_table_offset)
1245 error (_("string table offset backs up at %d"), symnum);
1246 /* FIXME -- replace error() with complaint. */
1247 continue;
1248 }
6a34fd2f
EZ
1249 continue;
1250
1251 /* Lots of symbol types we can just ignore. */
1252
9ce5d3bb
DE
1253 case N_ABS:
1254 case N_NBDATA:
1255 case N_NBBSS:
6a34fd2f
EZ
1256 continue;
1257
0963b4bd 1258 /* Keep going . . . */
6a34fd2f
EZ
1259
1260 /*
1261 * Special symbol types for GNU
1262 */
9ce5d3bb
DE
1263 case N_INDR:
1264 case N_INDR | N_EXT:
1265 case N_SETA:
1266 case N_SETA | N_EXT:
1267 case N_SETT:
1268 case N_SETT | N_EXT:
1269 case N_SETD:
1270 case N_SETD | N_EXT:
1271 case N_SETB:
1272 case N_SETB | N_EXT:
1273 case N_SETV:
6a34fd2f
EZ
1274 continue;
1275
1276 /*
1277 * Debugger symbols
1278 */
1279
9ce5d3bb 1280 case N_SO:
6a34fd2f
EZ
1281 {
1282 CORE_ADDR valu;
1283 static int prev_so_symnum = -10;
1284 static int first_so_symnum;
0ba1096a 1285 const char *p;
a121b7c1 1286 static const char *dirname_nso;
6a34fd2f
EZ
1287 int prev_textlow_not_set;
1288
063e58ba
MD
1289 valu = nlist.n_value + ANOFFSET (objfile->section_offsets,
1290 SECT_OFF_TEXT (objfile));
6a34fd2f
EZ
1291
1292 prev_textlow_not_set = textlow_not_set;
1293
6a34fd2f 1294 /* A zero value is probably an indication for the SunPRO 3.0
8763cede 1295 compiler. dbx_end_psymtab explicitly tests for zero, so
6a34fd2f
EZ
1296 don't relocate it. */
1297
203c3895 1298 if (nlist.n_value == 0
5e2b427d 1299 && gdbarch_sofun_address_maybe_missing (gdbarch))
6a34fd2f
EZ
1300 {
1301 textlow_not_set = 1;
1302 valu = 0;
1303 }
1304 else
1305 textlow_not_set = 0;
203c3895 1306
6a34fd2f
EZ
1307 past_first_source_file = 1;
1308
1309 if (prev_so_symnum != symnum - 1)
0963b4bd 1310 { /* Here if prev stab wasn't N_SO. */
6a34fd2f
EZ
1311 first_so_symnum = symnum;
1312
1313 if (pst)
1314 {
8763cede
DE
1315 dbx_end_psymtab (objfile, pst, psymtab_include_list,
1316 includes_used, symnum * symbol_size,
1317 valu > pst->texthigh
1318 ? valu : pst->texthigh,
1319 dependency_list, dependencies_used,
1320 prev_textlow_not_set);
6a34fd2f
EZ
1321 pst = (struct partial_symtab *) 0;
1322 includes_used = 0;
1323 dependencies_used = 0;
578933ab 1324 has_line_numbers = 0;
6a34fd2f
EZ
1325 }
1326 }
1327
1328 prev_so_symnum = symnum;
1329
0963b4bd 1330 /* End the current partial symtab and start a new one. */
6a34fd2f 1331
83b94be5 1332 namestring = set_namestring (objfile, &nlist);
6a34fd2f 1333
0963b4bd 1334 /* Null name means end of .o file. Don't start a new one. */
6a34fd2f
EZ
1335 if (*namestring == '\000')
1336 continue;
1337
1338 /* Some compilers (including gcc) emit a pair of initial N_SOs.
1339 The first one is a directory name; the second the file name.
1340 If pst exists, is empty, and has a filename ending in '/',
0963b4bd 1341 we assume the previous N_SO was a directory name. */
6a34fd2f 1342
0ba1096a
KT
1343 p = lbasename (namestring);
1344 if (p != namestring && *p == '\000')
57c22c6c
BR
1345 {
1346 /* Save the directory name SOs locally, then save it into
0963b4bd 1347 the psymtab when it's created below. */
57c22c6c
BR
1348 dirname_nso = namestring;
1349 continue;
1350 }
6a34fd2f
EZ
1351
1352 /* Some other compilers (C++ ones in particular) emit useless
131fe1bb
DE
1353 SOs for non-existant .c files. We ignore all subsequent SOs
1354 that immediately follow the first. */
6a34fd2f
EZ
1355
1356 if (!pst)
57c22c6c 1357 {
9ce5d3bb
DE
1358 pst = start_psymtab (objfile,
1359 namestring, valu,
1360 first_so_symnum * symbol_size,
1361 objfile->global_psymbols.next,
1362 objfile->static_psymbols.next);
57c22c6c
BR
1363 pst->dirname = dirname_nso;
1364 dirname_nso = NULL;
1365 }
6a34fd2f
EZ
1366 continue;
1367 }
1368
9ce5d3bb 1369 case N_BINCL:
6a34fd2f
EZ
1370 {
1371 enum language tmp_language;
9a619af0 1372
6a34fd2f
EZ
1373 /* Add this bincl to the bincl_list for future EXCLs. No
1374 need to save the string; it'll be around until
0963b4bd 1375 read_dbx_symtab function returns. */
6a34fd2f 1376
83b94be5 1377 namestring = set_namestring (objfile, &nlist);
6a34fd2f
EZ
1378 tmp_language = deduce_language_from_filename (namestring);
1379
1380 /* Only change the psymtab's language if we've learned
1381 something useful (eg. tmp_language is not language_unknown).
1382 In addition, to match what start_subfile does, never change
1383 from C++ to C. */
1384 if (tmp_language != language_unknown
1385 && (tmp_language != language_c
1386 || psymtab_language != language_cplus))
d7f98cce 1387 psymtab_language = tmp_language;
6a34fd2f
EZ
1388
1389 if (pst == NULL)
9ce5d3bb
DE
1390 {
1391 /* FIXME: we should not get here without a PST to work on.
1392 Attempt to recover. */
1393 complaint (&symfile_complaints,
3e43a32a
MS
1394 _("N_BINCL %s not in entries for "
1395 "any file, at symtab pos %d"),
9ce5d3bb
DE
1396 namestring, symnum);
1397 continue;
1398 }
6a34fd2f
EZ
1399 add_bincl_to_list (pst, namestring, nlist.n_value);
1400
0963b4bd 1401 /* Mark down an include file in the current psymtab. */
6a34fd2f
EZ
1402
1403 goto record_include_file;
1404 }
1405
9ce5d3bb 1406 case N_SOL:
6a34fd2f
EZ
1407 {
1408 enum language tmp_language;
6a34fd2f 1409
0963b4bd 1410 /* Mark down an include file in the current psymtab. */
83b94be5 1411 namestring = set_namestring (objfile, &nlist);
6a34fd2f
EZ
1412 tmp_language = deduce_language_from_filename (namestring);
1413
1414 /* Only change the psymtab's language if we've learned
1415 something useful (eg. tmp_language is not language_unknown).
1416 In addition, to match what start_subfile does, never change
1417 from C++ to C. */
1418 if (tmp_language != language_unknown
1419 && (tmp_language != language_c
1420 || psymtab_language != language_cplus))
d7f98cce 1421 psymtab_language = tmp_language;
6a34fd2f
EZ
1422
1423 /* In C++, one may expect the same filename to come round many
1424 times, when code is coming alternately from the main file
0963b4bd 1425 and from inline functions in other files. So I check to see
6a34fd2f
EZ
1426 if this is a file we've seen before -- either the main
1427 source file, or a previously included file.
1428
1429 This seems to be a lot of time to be spending on N_SOL, but
1430 things like "break c-exp.y:435" need to work (I
1431 suppose the psymtab_include_list could be hashed or put
1432 in a binary tree, if profiling shows this is a major hog). */
0ba1096a 1433 if (pst && filename_cmp (namestring, pst->filename) == 0)
9ce5d3bb 1434 continue;
6a34fd2f 1435 {
aa1ee363 1436 int i;
9a619af0 1437
6a34fd2f 1438 for (i = 0; i < includes_used; i++)
0ba1096a 1439 if (filename_cmp (namestring, psymtab_include_list[i]) == 0)
6a34fd2f
EZ
1440 {
1441 i = -1;
1442 break;
1443 }
1444 if (i == -1)
1445 continue;
1446 }
1447
9ce5d3bb 1448 record_include_file:
6a34fd2f
EZ
1449
1450 psymtab_include_list[includes_used++] = namestring;
1451 if (includes_used >= includes_allocated)
9ce5d3bb 1452 {
0d5cff50 1453 const char **orig = psymtab_include_list;
6a34fd2f 1454
0d5cff50
DE
1455 psymtab_include_list = (const char **)
1456 alloca ((includes_allocated *= 2) * sizeof (const char *));
9ce5d3bb 1457 memcpy (psymtab_include_list, orig,
0d5cff50 1458 includes_used * sizeof (const char *));
9ce5d3bb 1459 }
6a34fd2f
EZ
1460 continue;
1461 }
0963b4bd
MS
1462 case N_LSYM: /* Typedef or automatic variable. */
1463 case N_STSYM: /* Data seg var -- static. */
9ce5d3bb
DE
1464 case N_LCSYM: /* BSS " */
1465 case N_ROSYM: /* Read-only data seg var -- static. */
1466 case N_NBSTS: /* Gould nobase. */
1467 case N_NBLCS: /* symbols. */
1468 case N_FUN:
1469 case N_GSYM: /* Global (extern) variable; can be
063e58ba 1470 data or bss (sigh FIXME). */
6a34fd2f
EZ
1471
1472 /* Following may probably be ignored; I'll leave them here
1473 for now (until I do Pascal and Modula 2 extensions). */
1474
9ce5d3bb 1475 case N_PC: /* I may or may not need this; I
063e58ba 1476 suspect not. */
0963b4bd 1477 case N_M2C: /* I suspect that I can ignore this here. */
9ce5d3bb 1478 case N_SCOPE: /* Same. */
131fe1bb 1479 {
a121b7c1 1480 const char *p;
6a34fd2f 1481
83b94be5 1482 namestring = set_namestring (objfile, &nlist);
6a34fd2f
EZ
1483
1484 /* See if this is an end of function stab. */
1485 if (pst && nlist.n_type == N_FUN && *namestring == '\000')
9ce5d3bb
DE
1486 {
1487 CORE_ADDR valu;
1488
1489 /* It's value is the size (in bytes) of the function for
1490 function relative stabs, or the address of the function's
1491 end for old style stabs. */
1492 valu = nlist.n_value + last_function_start;
1493 if (pst->texthigh == 0 || valu > pst->texthigh)
1494 pst->texthigh = valu;
1495 break;
1496 }
6a34fd2f
EZ
1497
1498 p = (char *) strchr (namestring, ':');
1499 if (!p)
0963b4bd 1500 continue; /* Not a debugging symbol. */
6a34fd2f 1501
71c25dea 1502 sym_len = 0;
87bc73ea 1503 sym_name = NULL; /* pacify "gcc -Werror" */
71c25dea
TT
1504 if (psymtab_language == language_cplus)
1505 {
2f408ecb
PA
1506 std::string name (namestring, p - namestring);
1507 std::string new_name = cp_canonicalize_string (name.c_str ());
1508 if (!new_name.empty ())
1509 {
1510 sym_len = new_name.length ();
224c3ddb 1511 sym_name = (char *) obstack_copy0 (&objfile->objfile_obstack,
2f408ecb
PA
1512 new_name.c_str (),
1513 sym_len);
1514 }
1515 }
71c25dea
TT
1516
1517 if (sym_len == 0)
1518 {
1519 sym_name = namestring;
1520 sym_len = p - namestring;
1521 }
1522
6a34fd2f
EZ
1523 /* Main processing section for debugging symbols which
1524 the initial read through the symbol tables needs to worry
1525 about. If we reach this point, the symbol which we are
1526 considering is definitely one we are interested in.
1527 p must also contain the (valid) index into the namestring
1528 which indicates the debugging type symbol. */
1529
1530 switch (p[1])
9ce5d3bb
DE
1531 {
1532 case 'S':
1533 nlist.n_value += ANOFFSET (objfile->section_offsets,
1534 data_sect_index);
1535
5e2b427d 1536 if (gdbarch_static_transform_name_p (gdbarch))
e81cff30 1537 gdbarch_static_transform_name (gdbarch, namestring);
9ce5d3bb 1538
04a679b8 1539 add_psymbol_to_list (sym_name, sym_len, 1,
9ce5d3bb
DE
1540 VAR_DOMAIN, LOC_STATIC,
1541 &objfile->static_psymbols,
1762568f 1542 nlist.n_value, psymtab_language, objfile);
9ce5d3bb 1543 continue;
131fe1bb 1544
9ce5d3bb
DE
1545 case 'G':
1546 nlist.n_value += ANOFFSET (objfile->section_offsets,
1547 data_sect_index);
1548 /* The addresses in these entries are reported to be
0963b4bd 1549 wrong. See the code that reads 'G's for symtabs. */
04a679b8 1550 add_psymbol_to_list (sym_name, sym_len, 1,
9ce5d3bb
DE
1551 VAR_DOMAIN, LOC_STATIC,
1552 &objfile->global_psymbols,
1762568f 1553 nlist.n_value, psymtab_language, objfile);
9ce5d3bb 1554 continue;
6a34fd2f 1555
9ce5d3bb
DE
1556 case 'T':
1557 /* When a 'T' entry is defining an anonymous enum, it
1558 may have a name which is the empty string, or a
1559 single space. Since they're not really defining a
1560 symbol, those shouldn't go in the partial symbol
1561 table. We do pick up the elements of such enums at
1562 'check_enum:', below. */
1563 if (p >= namestring + 2
1564 || (p == namestring + 1
1565 && namestring[0] != ' '))
1566 {
04a679b8 1567 add_psymbol_to_list (sym_name, sym_len, 1,
9ce5d3bb
DE
1568 STRUCT_DOMAIN, LOC_TYPEDEF,
1569 &objfile->static_psymbols,
1762568f 1570 0, psymtab_language, objfile);
9ce5d3bb
DE
1571 if (p[2] == 't')
1572 {
1573 /* Also a typedef with the same name. */
04a679b8 1574 add_psymbol_to_list (sym_name, sym_len, 1,
9ce5d3bb
DE
1575 VAR_DOMAIN, LOC_TYPEDEF,
1576 &objfile->static_psymbols,
1762568f 1577 0, psymtab_language, objfile);
9ce5d3bb
DE
1578 p += 1;
1579 }
1580 }
1581 goto check_enum;
131fe1bb 1582
9ce5d3bb 1583 case 't':
0963b4bd 1584 if (p != namestring) /* a name is there, not just :T... */
9ce5d3bb 1585 {
04a679b8 1586 add_psymbol_to_list (sym_name, sym_len, 1,
9ce5d3bb
DE
1587 VAR_DOMAIN, LOC_TYPEDEF,
1588 &objfile->static_psymbols,
1762568f 1589 0, psymtab_language, objfile);
9ce5d3bb
DE
1590 }
1591 check_enum:
1592 /* If this is an enumerated type, we need to
1593 add all the enum constants to the partial symbol
1594 table. This does not cover enums without names, e.g.
1595 "enum {a, b} c;" in C, but fortunately those are
1596 rare. There is no way for GDB to find those from the
1597 enum type without spending too much time on it. Thus
1598 to solve this problem, the compiler needs to put out the
1599 enum in a nameless type. GCC2 does this. */
1600
1601 /* We are looking for something of the form
1602 <name> ":" ("t" | "T") [<number> "="] "e"
1603 {<constant> ":" <value> ","} ";". */
1604
1605 /* Skip over the colon and the 't' or 'T'. */
1606 p += 2;
1607 /* This type may be given a number. Also, numbers can come
1608 in pairs like (0,26). Skip over it. */
1609 while ((*p >= '0' && *p <= '9')
1610 || *p == '(' || *p == ',' || *p == ')'
1611 || *p == '=')
1612 p++;
1613
1614 if (*p++ == 'e')
1615 {
1616 /* The aix4 compiler emits extra crud before the members. */
1617 if (*p == '-')
1618 {
1619 /* Skip over the type (?). */
1620 while (*p != ':')
1621 p++;
6a34fd2f 1622
9ce5d3bb 1623 /* Skip over the colon. */
6a34fd2f 1624 p++;
9ce5d3bb 1625 }
6a34fd2f 1626
9ce5d3bb
DE
1627 /* We have found an enumerated type. */
1628 /* According to comments in read_enum_type
1629 a comma could end it instead of a semicolon.
1630 I don't know where that happens.
1631 Accept either. */
1632 while (*p && *p != ';' && *p != ',')
1633 {
a121b7c1 1634 const char *q;
9ce5d3bb
DE
1635
1636 /* Check for and handle cretinous dbx symbol name
1637 continuation! */
1638 if (*p == '\\' || (*p == '?' && p[1] == '\0'))
1639 p = next_symbol_text (objfile);
1640
1641 /* Point to the character after the name
1642 of the enum constant. */
1643 for (q = p; *q && *q != ':'; q++)
1644 ;
1645 /* Note that the value doesn't matter for
1646 enum constants in psymtabs, just in symtabs. */
04a679b8 1647 add_psymbol_to_list (p, q - p, 1,
9ce5d3bb
DE
1648 VAR_DOMAIN, LOC_CONST,
1649 &objfile->static_psymbols, 0,
1762568f 1650 psymtab_language, objfile);
9ce5d3bb
DE
1651 /* Point past the name. */
1652 p = q;
1653 /* Skip over the value. */
1654 while (*p && *p != ',')
1655 p++;
1656 /* Advance past the comma. */
1657 if (*p)
1658 p++;
1659 }
1660 }
1661 continue;
131fe1bb 1662
9ce5d3bb
DE
1663 case 'c':
1664 /* Constant, e.g. from "const" in Pascal. */
04a679b8 1665 add_psymbol_to_list (sym_name, sym_len, 1,
9ce5d3bb 1666 VAR_DOMAIN, LOC_CONST,
1762568f
DE
1667 &objfile->static_psymbols, 0,
1668 psymtab_language, objfile);
9ce5d3bb 1669 continue;
6a34fd2f 1670
9ce5d3bb
DE
1671 case 'f':
1672 if (! pst)
1673 {
1674 int name_len = p - namestring;
224c3ddb 1675 char *name = (char *) xmalloc (name_len + 1);
9a619af0 1676
9ce5d3bb
DE
1677 memcpy (name, namestring, name_len);
1678 name[name_len] = '\0';
1679 function_outside_compilation_unit_complaint (name);
1680 xfree (name);
1681 }
1682 nlist.n_value += ANOFFSET (objfile->section_offsets,
1683 SECT_OFF_TEXT (objfile));
0963b4bd 1684 /* Kludges for ELF/STABS with Sun ACC. */
9ce5d3bb
DE
1685 last_function_name = namestring;
1686 /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
0963b4bd 1687 value for the bottom of the text seg in those cases. */
9ce5d3bb
DE
1688 if (nlist.n_value == ANOFFSET (objfile->section_offsets,
1689 SECT_OFF_TEXT (objfile))
5e2b427d 1690 && gdbarch_sofun_address_maybe_missing (gdbarch))
9ce5d3bb
DE
1691 {
1692 CORE_ADDR minsym_valu =
1693 find_stab_function_addr (namestring,
1694 pst ? pst->filename : NULL,
1695 objfile);
9a619af0 1696
9ce5d3bb
DE
1697 /* find_stab_function_addr will return 0 if the minimal
1698 symbol wasn't found. (Unfortunately, this might also
1699 be a valid address.) Anyway, if it *does* return 0,
1700 it is likely that the value was set correctly to begin
0963b4bd 1701 with... */
9ce5d3bb
DE
1702 if (minsym_valu != 0)
1703 nlist.n_value = minsym_valu;
1704 }
1705 if (pst && textlow_not_set
5e2b427d 1706 && gdbarch_sofun_address_maybe_missing (gdbarch))
9ce5d3bb
DE
1707 {
1708 pst->textlow = nlist.n_value;
1709 textlow_not_set = 0;
1710 }
1711 /* End kludge. */
1712
1713 /* Keep track of the start of the last function so we
1714 can handle end of function symbols. */
1715 last_function_start = nlist.n_value;
1716
1717 /* In reordered executables this function may lie outside
1718 the bounds created by N_SO symbols. If that's the case
1719 use the address of this function as the low bound for
1720 the partial symbol table. */
1721 if (pst
1722 && (textlow_not_set
1723 || (nlist.n_value < pst->textlow
1724 && (nlist.n_value
1725 != ANOFFSET (objfile->section_offsets,
1726 SECT_OFF_TEXT (objfile))))))
1727 {
1728 pst->textlow = nlist.n_value;
1729 textlow_not_set = 0;
1730 }
04a679b8 1731 add_psymbol_to_list (sym_name, sym_len, 1,
9ce5d3bb
DE
1732 VAR_DOMAIN, LOC_BLOCK,
1733 &objfile->static_psymbols,
1762568f 1734 nlist.n_value, psymtab_language, objfile);
9ce5d3bb 1735 continue;
6a34fd2f 1736
9ce5d3bb
DE
1737 /* Global functions were ignored here, but now they
1738 are put into the global psymtab like one would expect.
1739 They're also in the minimal symbol table. */
1740 case 'F':
1741 if (! pst)
1742 {
1743 int name_len = p - namestring;
224c3ddb 1744 char *name = (char *) xmalloc (name_len + 1);
9a619af0 1745
9ce5d3bb
DE
1746 memcpy (name, namestring, name_len);
1747 name[name_len] = '\0';
1748 function_outside_compilation_unit_complaint (name);
1749 xfree (name);
1750 }
1751 nlist.n_value += ANOFFSET (objfile->section_offsets,
1752 SECT_OFF_TEXT (objfile));
0963b4bd 1753 /* Kludges for ELF/STABS with Sun ACC. */
9ce5d3bb
DE
1754 last_function_name = namestring;
1755 /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
0963b4bd 1756 value for the bottom of the text seg in those cases. */
9ce5d3bb
DE
1757 if (nlist.n_value == ANOFFSET (objfile->section_offsets,
1758 SECT_OFF_TEXT (objfile))
5e2b427d 1759 && gdbarch_sofun_address_maybe_missing (gdbarch))
9ce5d3bb
DE
1760 {
1761 CORE_ADDR minsym_valu =
1762 find_stab_function_addr (namestring,
1763 pst ? pst->filename : NULL,
1764 objfile);
9a619af0 1765
9ce5d3bb
DE
1766 /* find_stab_function_addr will return 0 if the minimal
1767 symbol wasn't found. (Unfortunately, this might also
1768 be a valid address.) Anyway, if it *does* return 0,
1769 it is likely that the value was set correctly to begin
0963b4bd 1770 with... */
9ce5d3bb
DE
1771 if (minsym_valu != 0)
1772 nlist.n_value = minsym_valu;
1773 }
1774 if (pst && textlow_not_set
5e2b427d 1775 && gdbarch_sofun_address_maybe_missing (gdbarch))
9ce5d3bb
DE
1776 {
1777 pst->textlow = nlist.n_value;
1778 textlow_not_set = 0;
1779 }
1780 /* End kludge. */
1781
1782 /* Keep track of the start of the last function so we
1783 can handle end of function symbols. */
1784 last_function_start = nlist.n_value;
1785
1786 /* In reordered executables this function may lie outside
1787 the bounds created by N_SO symbols. If that's the case
1788 use the address of this function as the low bound for
1789 the partial symbol table. */
1790 if (pst
1791 && (textlow_not_set
1792 || (nlist.n_value < pst->textlow
1793 && (nlist.n_value
1794 != ANOFFSET (objfile->section_offsets,
1795 SECT_OFF_TEXT (objfile))))))
1796 {
1797 pst->textlow = nlist.n_value;
1798 textlow_not_set = 0;
1799 }
04a679b8 1800 add_psymbol_to_list (sym_name, sym_len, 1,
9ce5d3bb
DE
1801 VAR_DOMAIN, LOC_BLOCK,
1802 &objfile->global_psymbols,
1762568f 1803 nlist.n_value, psymtab_language, objfile);
9ce5d3bb 1804 continue;
6a34fd2f 1805
9ce5d3bb
DE
1806 /* Two things show up here (hopefully); static symbols of
1807 local scope (static used inside braces) or extensions
1808 of structure symbols. We can ignore both. */
1809 case 'V':
1810 case '(':
1811 case '0':
1812 case '1':
1813 case '2':
1814 case '3':
1815 case '4':
1816 case '5':
1817 case '6':
1818 case '7':
1819 case '8':
1820 case '9':
1821 case '-':
0963b4bd 1822 case '#': /* For symbol identification (used in live ranges). */
9ce5d3bb 1823 continue;
6a34fd2f 1824
9ce5d3bb
DE
1825 case ':':
1826 /* It is a C++ nested symbol. We don't need to record it
1827 (I don't think); if we try to look up foo::bar::baz,
1828 then symbols for the symtab containing foo should get
1829 read in, I think. */
1830 /* Someone says sun cc puts out symbols like
1831 /foo/baz/maclib::/usr/local/bin/maclib,
1832 which would get here with a symbol type of ':'. */
1833 continue;
6a34fd2f 1834
9ce5d3bb
DE
1835 default:
1836 /* Unexpected symbol descriptor. The second and subsequent stabs
1837 of a continued stab can show up here. The question is
1838 whether they ever can mimic a normal stab--it would be
1839 nice if not, since we certainly don't want to spend the
1840 time searching to the end of every string looking for
1841 a backslash. */
6a34fd2f 1842
3e43a32a
MS
1843 complaint (&symfile_complaints,
1844 _("unknown symbol descriptor `%c'"),
9ce5d3bb
DE
1845 p[1]);
1846
1847 /* Ignore it; perhaps it is an extension that we don't
1848 know about. */
1849 continue;
1850 }
131fe1bb 1851 }
6a34fd2f 1852
9ce5d3bb 1853 case N_EXCL:
6a34fd2f 1854
83b94be5 1855 namestring = set_namestring (objfile, &nlist);
6a34fd2f
EZ
1856
1857 /* Find the corresponding bincl and mark that psymtab on the
0963b4bd 1858 psymtab dependency list. */
6a34fd2f
EZ
1859 {
1860 struct partial_symtab *needed_pst =
1861 find_corresponding_bincl_psymtab (namestring, nlist.n_value);
1862
1863 /* If this include file was defined earlier in this file,
1864 leave it alone. */
1865 if (needed_pst == pst)
1866 continue;
1867
1868 if (needed_pst)
1869 {
1870 int i;
1871 int found = 0;
1872
1873 for (i = 0; i < dependencies_used; i++)
1874 if (dependency_list[i] == needed_pst)
1875 {
1876 found = 1;
1877 break;
1878 }
1879
1880 /* If it's already in the list, skip the rest. */
1881 if (found)
1882 continue;
1883
1884 dependency_list[dependencies_used++] = needed_pst;
1885 if (dependencies_used >= dependencies_allocated)
1886 {
1887 struct partial_symtab **orig = dependency_list;
9a619af0 1888
6a34fd2f
EZ
1889 dependency_list =
1890 (struct partial_symtab **)
1891 alloca ((dependencies_allocated *= 2)
1892 * sizeof (struct partial_symtab *));
4efb68b1 1893 memcpy (dependency_list, orig,
6a34fd2f
EZ
1894 (dependencies_used
1895 * sizeof (struct partial_symtab *)));
1896#ifdef DEBUG_INFO
063e58ba 1897 fprintf_unfiltered (gdb_stderr,
3e43a32a
MS
1898 "Had to reallocate "
1899 "dependency list.\n");
063e58ba
MD
1900 fprintf_unfiltered (gdb_stderr,
1901 "New dependencies allocated: %d\n",
6a34fd2f
EZ
1902 dependencies_allocated);
1903#endif
1904 }
1905 }
1906 }
1907 continue;
1908
9ce5d3bb 1909 case N_ENDM:
6a34fd2f 1910 /* Solaris 2 end of module, finish current partial symbol table.
8763cede 1911 dbx_end_psymtab will set pst->texthigh to the proper value, which
6a34fd2f
EZ
1912 is necessary if a module compiled without debugging info
1913 follows this module. */
5e2b427d 1914 if (pst && gdbarch_sofun_address_maybe_missing (gdbarch))
9ce5d3bb 1915 {
8763cede
DE
1916 dbx_end_psymtab (objfile, pst,
1917 psymtab_include_list, includes_used,
1918 symnum * symbol_size,
1919 (CORE_ADDR) 0, dependency_list,
1920 dependencies_used, textlow_not_set);
9ce5d3bb
DE
1921 pst = (struct partial_symtab *) 0;
1922 includes_used = 0;
1923 dependencies_used = 0;
578933ab 1924 has_line_numbers = 0;
9ce5d3bb 1925 }
6a34fd2f 1926 continue;
c906108c 1927
9ce5d3bb 1928 case N_RBRAC:
6a34fd2f
EZ
1929#ifdef HANDLE_RBRAC
1930 HANDLE_RBRAC (nlist.n_value);
1931 continue;
1932#endif
9ce5d3bb
DE
1933 case N_EINCL:
1934 case N_DSLINE:
1935 case N_BSLINE:
1936 case N_SSYM: /* Claim: Structure or union element.
063e58ba 1937 Hopefully, I can ignore this. */
0963b4bd 1938 case N_ENTRY: /* Alternate entry point; can ignore. */
9ce5d3bb
DE
1939 case N_MAIN: /* Can definitely ignore this. */
1940 case N_CATCH: /* These are GNU C++ extensions */
0963b4bd 1941 case N_EHDECL: /* that can safely be ignored here. */
9ce5d3bb
DE
1942 case N_LENG:
1943 case N_BCOMM:
1944 case N_ECOMM:
1945 case N_ECOML:
1946 case N_FNAME:
1947 case N_SLINE:
1948 case N_RSYM:
1949 case N_PSYM:
ec48dc8b
PM
1950 case N_BNSYM:
1951 case N_ENSYM:
9ce5d3bb
DE
1952 case N_LBRAC:
1953 case N_NSYMS: /* Ultrix 4.0: symbol count */
1954 case N_DEFD: /* GNU Modula-2 */
1955 case N_ALIAS: /* SunPro F77: alias name, ignore for now. */
1956
0963b4bd 1957 case N_OBJ: /* Useless types from Solaris. */
9ce5d3bb
DE
1958 case N_OPT:
1959 case N_PATCH:
0963b4bd 1960 /* These symbols aren't interesting; don't worry about them. */
6a34fd2f
EZ
1961 continue;
1962
9ce5d3bb 1963 default:
6a34fd2f
EZ
1964 /* If we haven't found it yet, ignore it. It's probably some
1965 new type we don't know about yet. */
bb599908 1966 unknown_symtype_complaint (hex_string (nlist.n_type));
6a34fd2f
EZ
1967 continue;
1968 }
c906108c
SS
1969 }
1970
1971 /* If there's stuff to be cleaned up, clean it up. */
c906108c
SS
1972 if (pst)
1973 {
1974 /* Don't set pst->texthigh lower than it already is. */
1975 CORE_ADDR text_end =
6a34fd2f 1976 (lowest_text_address == (CORE_ADDR) -1
063e58ba
MD
1977 ? (text_addr + ANOFFSET (objfile->section_offsets,
1978 SECT_OFF_TEXT (objfile)))
6a34fd2f
EZ
1979 : lowest_text_address)
1980 + text_size;
c906108c 1981
8763cede
DE
1982 dbx_end_psymtab (objfile, pst, psymtab_include_list, includes_used,
1983 symnum * symbol_size,
1984 text_end > pst->texthigh ? text_end : pst->texthigh,
1985 dependency_list, dependencies_used, textlow_not_set);
c906108c
SS
1986 }
1987
1988 do_cleanups (back_to);
1989}
1990
1991/* Allocate and partially fill a partial symtab. It will be
1992 completely filled at the end of the symbol list.
1993
1994 SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
1995 is the address relative to which its symbols are (incremental) or 0
0963b4bd 1996 (normal). */
c906108c 1997
d4f3574e 1998static struct partial_symtab *
a121b7c1 1999start_psymtab (struct objfile *objfile, const char *filename, CORE_ADDR textlow,
fba45db2
KB
2000 int ldsymoff, struct partial_symbol **global_syms,
2001 struct partial_symbol **static_syms)
c906108c
SS
2002{
2003 struct partial_symtab *result =
18a94d75
DE
2004 start_psymtab_common (objfile, filename, textlow,
2005 global_syms, static_syms);
c906108c 2006
8d749320
SM
2007 result->read_symtab_private =
2008 XOBNEW (&objfile->objfile_obstack, struct symloc);
c5aa993b 2009 LDSYMOFF (result) = ldsymoff;
257e7a09 2010 result->read_symtab = dbx_read_symtab;
c5aa993b
JM
2011 SYMBOL_SIZE (result) = symbol_size;
2012 SYMBOL_OFFSET (result) = symbol_table_offset;
2013 STRING_OFFSET (result) = string_table_offset;
2014 FILE_STRING_OFFSET (result) = file_string_table_offset;
c906108c 2015
0963b4bd 2016 /* Deduce the source language from the filename for this psymtab. */
c906108c
SS
2017 psymtab_language = deduce_language_from_filename (filename);
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
SS
2187{
2188 struct cleanup *old_chain;
2189 int i;
c5aa993b 2190
c906108c
SS
2191 if (pst->readin)
2192 {
0963b4bd
MS
2193 fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. "
2194 "Shouldn't happen.\n",
c5aa993b 2195 pst->filename);
c906108c
SS
2196 return;
2197 }
2198
0963b4bd 2199 /* Read in all partial symtabs on which this one is dependent. */
c906108c
SS
2200 for (i = 0; i < pst->number_of_dependencies; i++)
2201 if (!pst->dependencies[i]->readin)
2202 {
2203 /* Inform about additional files that need to be read in. */
2204 if (info_verbose)
2205 {
2206 fputs_filtered (" ", gdb_stdout);
2207 wrap_here ("");
2208 fputs_filtered ("and ", gdb_stdout);
2209 wrap_here ("");
2210 printf_filtered ("%s...", pst->dependencies[i]->filename);
0963b4bd 2211 wrap_here (""); /* Flush output. */
c906108c
SS
2212 gdb_flush (gdb_stdout);
2213 }
5c80ed9d 2214 dbx_psymtab_to_symtab_1 (objfile, pst->dependencies[i]);
c906108c
SS
2215 }
2216
0963b4bd 2217 if (LDSYMLEN (pst)) /* Otherwise it's a dummy. */
c906108c
SS
2218 {
2219 /* Init stuff necessary for reading in symbols */
2220 stabsread_init ();
2221 buildsym_init ();
a0b3c4fd 2222 old_chain = make_cleanup (really_free_pendings, 0);
c906108c
SS
2223 file_string_table_offset = FILE_STRING_OFFSET (pst);
2224 symbol_size = SYMBOL_SIZE (pst);
2225
0963b4bd 2226 /* Read in this file's symbols. */
5c80ed9d
TT
2227 bfd_seek (objfile->obfd, SYMBOL_OFFSET (pst), SEEK_SET);
2228 read_ofile_symtab (objfile, pst);
c906108c
SS
2229
2230 do_cleanups (old_chain);
2231 }
2232
2233 pst->readin = 1;
2234}
2235
2236/* Read in all of the symbols for a given psymtab for real.
257e7a09 2237 Be verbose about it if the user wants that. SELF is not NULL. */
c906108c
SS
2238
2239static void
257e7a09 2240dbx_read_symtab (struct partial_symtab *self, struct objfile *objfile)
c906108c 2241{
257e7a09 2242 if (self->readin)
c906108c 2243 {
0963b4bd
MS
2244 fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. "
2245 "Shouldn't happen.\n",
257e7a09 2246 self->filename);
c906108c
SS
2247 return;
2248 }
2249
257e7a09 2250 if (LDSYMLEN (self) || self->number_of_dependencies)
c906108c 2251 {
57cee33a
TT
2252 struct cleanup *back_to;
2253
c906108c 2254 /* Print the message now, before reading the string table,
c5aa993b 2255 to avoid disconcerting pauses. */
c906108c
SS
2256 if (info_verbose)
2257 {
257e7a09 2258 printf_filtered ("Reading in symbols for %s...", self->filename);
c906108c
SS
2259 gdb_flush (gdb_stdout);
2260 }
2261
c906108c
SS
2262 next_symbol_text_func = dbx_next_symbol_text;
2263
57cee33a
TT
2264 back_to = make_cleanup (null_cleanup, NULL);
2265
5c80ed9d 2266 if (DBX_STAB_SECTION (objfile))
086df311
DJ
2267 {
2268 stabs_data
5c80ed9d
TT
2269 = symfile_relocate_debug_section (objfile,
2270 DBX_STAB_SECTION (objfile),
086df311 2271 NULL);
9a619af0 2272
086df311 2273 if (stabs_data)
57cee33a 2274 make_cleanup (free_current_contents, (void *) &stabs_data);
086df311
DJ
2275 }
2276
257e7a09 2277 dbx_psymtab_to_symtab_1 (objfile, self);
c906108c 2278
57cee33a 2279 do_cleanups (back_to);
086df311 2280
c906108c
SS
2281 /* Match with global symbols. This only needs to be done once,
2282 after all of the symtabs and dependencies have been read in. */
5c80ed9d 2283 scan_file_globals (objfile);
c906108c
SS
2284
2285 /* Finish up the debug error message. */
2286 if (info_verbose)
2287 printf_filtered ("done.\n");
2288 }
2289}
2290
0963b4bd 2291/* Read in a defined section of a specific object file's symbols. */
c5aa993b 2292
c906108c 2293static void
5c80ed9d 2294read_ofile_symtab (struct objfile *objfile, struct partial_symtab *pst)
c906108c 2295{
a121b7c1 2296 const char *namestring;
52f0bd74 2297 struct external_nlist *bufp;
c906108c
SS
2298 struct internal_nlist nlist;
2299 unsigned char type;
2300 unsigned max_symnum;
52f0bd74 2301 bfd *abfd;
c906108c
SS
2302 int sym_offset; /* Offset to start of symbols to read */
2303 int sym_size; /* Size of symbols to read */
2304 CORE_ADDR text_offset; /* Start of text segment for symbols */
2305 int text_size; /* Size of text segment for symbols */
2306 struct section_offsets *section_offsets;
2307
c5aa993b
JM
2308 sym_offset = LDSYMOFF (pst);
2309 sym_size = LDSYMLEN (pst);
5afc051b
JB
2310 text_offset = pst->textlow;
2311 text_size = pst->texthigh - pst->textlow;
18a94d75 2312 section_offsets = objfile->section_offsets;
c906108c 2313
dd707e8e 2314 dbxread_objfile = objfile;
c906108c
SS
2315
2316 stringtab_global = DBX_STRINGTAB (objfile);
46212e0b 2317 set_last_source_file (NULL);
c906108c
SS
2318
2319 abfd = objfile->obfd;
0963b4bd 2320 symfile_bfd = objfile->obfd; /* Implicit param to next_text_symbol. */
c906108c 2321 symbuf_end = symbuf_idx = 0;
086df311
DJ
2322 symbuf_read = 0;
2323 symbuf_left = sym_offset + sym_size;
c906108c
SS
2324
2325 /* It is necessary to actually read one symbol *before* the start
2326 of this symtab's symbols, because the GCC_COMPILED_FLAG_SYMBOL
2327 occurs before the N_SO symbol.
2328
2329 Detecting this in read_dbx_symtab
2330 would slow down initial readin, so we look for it here instead. */
c5aa993b 2331 if (!processing_acc_compilation && sym_offset >= (int) symbol_size)
c906108c 2332 {
086df311 2333 stabs_seek (sym_offset - symbol_size);
c906108c
SS
2334 fill_symbuf (abfd);
2335 bufp = &symbuf[symbuf_idx++];
2336 INTERNALIZE_SYMBOL (nlist, bufp, abfd);
2337 OBJSTAT (objfile, n_stabs++);
2338
83b94be5 2339 namestring = set_namestring (objfile, &nlist);
c906108c
SS
2340
2341 processing_gcc_compilation = 0;
2342 if (nlist.n_type == N_TEXT)
2343 {
2344 const char *tempstring = namestring;
2345
91f54576 2346 if (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0)
c906108c 2347 processing_gcc_compilation = 1;
91f54576 2348 else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0)
c906108c
SS
2349 processing_gcc_compilation = 2;
2350 if (tempstring[0] == bfd_get_symbol_leading_char (symfile_bfd))
2351 ++tempstring;
61012eef 2352 if (startswith (tempstring, "__gnu_compiled"))
c906108c
SS
2353 processing_gcc_compilation = 2;
2354 }
c906108c
SS
2355 }
2356 else
2357 {
2358 /* The N_SO starting this symtab is the first symbol, so we
c5aa993b
JM
2359 better not check the symbol before it. I'm not this can
2360 happen, but it doesn't hurt to check for it. */
086df311 2361 stabs_seek (sym_offset);
c906108c
SS
2362 processing_gcc_compilation = 0;
2363 }
2364
2365 if (symbuf_idx == symbuf_end)
2366 fill_symbuf (abfd);
2367 bufp = &symbuf[symbuf_idx];
2368 if (bfd_h_get_8 (abfd, bufp->e_type) != N_SO)
8a3fe4f8 2369 error (_("First symbol in segment of executable not a source symbol"));
c906108c
SS
2370
2371 max_symnum = sym_size / symbol_size;
2372
2373 for (symnum = 0;
2374 symnum < max_symnum;
2375 symnum++)
2376 {
0963b4bd 2377 QUIT; /* Allow this to be interruptable. */
c906108c 2378 if (symbuf_idx == symbuf_end)
c5aa993b 2379 fill_symbuf (abfd);
c906108c
SS
2380 bufp = &symbuf[symbuf_idx++];
2381 INTERNALIZE_SYMBOL (nlist, bufp, abfd);
2382 OBJSTAT (objfile, n_stabs++);
2383
2384 type = bfd_h_get_8 (abfd, bufp->e_type);
2385
83b94be5 2386 namestring = set_namestring (objfile, &nlist);
c906108c 2387
c5aa993b
JM
2388 if (type & N_STAB)
2389 {
7b1f21e5
PP
2390 if (sizeof (nlist.n_value) > 4
2391 /* We are a 64-bit debugger debugging a 32-bit program. */
2392 && (type == N_LSYM || type == N_PSYM))
2393 /* We have to be careful with the n_value in the case of N_LSYM
2394 and N_PSYM entries, because they are signed offsets from frame
2395 pointer, but we actually read them as unsigned 32-bit values.
2396 This is not a problem for 32-bit debuggers, for which negative
2397 values end up being interpreted correctly (as negative
2398 offsets) due to integer overflow.
2399 But we need to sign-extend the value for 64-bit debuggers,
2400 or we'll end up interpreting negative values as very large
2401 positive offsets. */
2402 nlist.n_value = (nlist.n_value ^ 0x80000000) - 0x80000000;
c906108c
SS
2403 process_one_symbol (type, nlist.n_desc, nlist.n_value,
2404 namestring, section_offsets, objfile);
c5aa993b 2405 }
c906108c 2406 /* We skip checking for a new .o or -l file; that should never
0963b4bd 2407 happen in this routine. */
c906108c
SS
2408 else if (type == N_TEXT)
2409 {
2410 /* I don't think this code will ever be executed, because
2411 the GCC_COMPILED_FLAG_SYMBOL usually is right before
2412 the N_SO symbol which starts this source file.
2413 However, there is no reason not to accept
2414 the GCC_COMPILED_FLAG_SYMBOL anywhere. */
2415
91f54576 2416 if (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0)
c906108c 2417 processing_gcc_compilation = 1;
91f54576 2418 else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0)
c906108c 2419 processing_gcc_compilation = 2;
c906108c 2420 }
c5aa993b 2421 else if (type & N_EXT || type == (unsigned char) N_TEXT
9a619af0 2422 || type == (unsigned char) N_NBTEXT)
c5aa993b 2423 {
c906108c
SS
2424 /* Global symbol: see if we came across a dbx defintion for
2425 a corresponding symbol. If so, store the value. Remove
2426 syms from the chain when their values are stored, but
2427 search the whole chain, as there may be several syms from
0963b4bd 2428 different files with the same name. */
c906108c
SS
2429 /* This is probably not true. Since the files will be read
2430 in one at a time, each reference to a global symbol will
0963b4bd
MS
2431 be satisfied in each file as it appears. So we skip this
2432 section. */
c906108c 2433 ;
c5aa993b 2434 }
c906108c
SS
2435 }
2436
c906108c
SS
2437 /* In a Solaris elf file, this variable, which comes from the
2438 value of the N_SO symbol, will still be 0. Luckily, text_offset,
0963b4bd 2439 which comes from pst->textlow is correct. */
c906108c
SS
2440 if (last_source_start_addr == 0)
2441 last_source_start_addr = text_offset;
2442
2443 /* In reordered executables last_source_start_addr may not be the
2444 lower bound for this symtab, instead use text_offset which comes
5afc051b 2445 from pst->textlow which is correct. */
c906108c
SS
2446 if (last_source_start_addr > text_offset)
2447 last_source_start_addr = text_offset;
2448
43f3e411
DE
2449 pst->compunit_symtab = end_symtab (text_offset + text_size,
2450 SECT_OFF_TEXT (objfile));
c906108c 2451
c906108c 2452 end_stabs ();
e9112110 2453
dd707e8e 2454 dbxread_objfile = NULL;
c906108c 2455}
c906108c 2456\f
c5aa993b 2457
195a3f6c
TT
2458/* Record the namespace that the function defined by SYMBOL was
2459 defined in, if necessary. BLOCK is the associated block; use
2460 OBSTACK for allocation. */
2461
2462static void
2463cp_set_block_scope (const struct symbol *symbol,
2464 struct block *block,
2465 struct obstack *obstack)
2466{
2467 if (SYMBOL_DEMANGLED_NAME (symbol) != NULL)
2468 {
2469 /* Try to figure out the appropriate namespace from the
2470 demangled name. */
2471
2472 /* FIXME: carlton/2003-04-15: If the function in question is
2473 a method of a class, the name will actually include the
2474 name of the class as well. This should be harmless, but
2475 is a little unfortunate. */
2476
2477 const char *name = SYMBOL_DEMANGLED_NAME (symbol);
2478 unsigned int prefix_len = cp_entire_prefix_len (name);
2479
2480 block_set_scope (block,
224c3ddb 2481 (const char *) obstack_copy0 (obstack, name, prefix_len),
195a3f6c
TT
2482 obstack);
2483 }
2484}
2485
c906108c
SS
2486/* This handles a single symbol from the symbol-file, building symbols
2487 into a GDB symtab. It takes these arguments and an implicit argument.
2488
2489 TYPE is the type field of the ".stab" symbol entry.
2490 DESC is the desc field of the ".stab" entry.
2491 VALU is the value field of the ".stab" entry.
2492 NAME is the symbol name, in our address space.
e31272c3
MK
2493 SECTION_OFFSETS is a set of amounts by which the sections of this
2494 object file were relocated when it was loaded into memory. Note
2495 that these section_offsets are not the objfile->section_offsets but
2496 the pst->section_offsets. All symbols that refer to memory
2497 locations need to be offset by these amounts.
2498 OBJFILE is the object file from which we are reading symbols. It
2499 is used in end_symtab. */
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,
fba45db2 2504 struct objfile *objfile)
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 ();
4d663531 2718 start_symtab (objfile, name, NULL, valu);
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}