* coff-h8300.c (h8300_reloc16_extra_cases): Make name a const
[deliverable/binutils-gdb.git] / gdb / dbxread.c
CommitLineData
bd5635a1 1/* Read dbx symbol tables and convert to internal format, for GDB.
94f5a25f 2 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
65ce5df4 3 Free Software Foundation, Inc.
bd5635a1
RP
4
5This file is part of GDB.
6
c3a21801 7This program is free software; you can redistribute it and/or modify
bd5635a1 8it under the terms of the GNU General Public License as published by
c3a21801
JG
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
bd5635a1 11
c3a21801 12This program is distributed in the hope that it will be useful,
bd5635a1
RP
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
c3a21801 18along with this program; if not, write to the Free Software
45886199 19Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
9404978d
MT
20
21/* This module provides three functions: dbx_symfile_init,
22 which initializes to read a symbol file; dbx_new_init, which
23 discards existing cached information when all symbols are being
24 discarded; and dbx_symfile_read, which reads a symbol table
25 from a file.
26
27 dbx_symfile_read only does the minimum work necessary for letting the
28 user "name" things symbolically; it does not read the entire symtab.
29 Instead, it reads the external and static symbols and puts them in partial
30 symbol tables. When more extensive information is requested of a
31 file, the corresponding partial symbol table is mutated into a full
32 fledged symbol table by going back and reading the symbols
33 for real. dbx_psymtab_to_symtab() is the function that does this */
bd5635a1 34
bd5635a1 35#include "defs.h"
2b576293 36#include "gdb_string.h"
bd5635a1 37
9342ecb9 38#if defined(USG) || defined(__CYGNUSCLIB__)
bd5635a1
RP
39#include <sys/types.h>
40#include <fcntl.h>
bd5635a1
RP
41#endif
42
f309ad95 43#include "obstack.h"
afe4ca15 44#include <sys/param.h>
021959e2 45#ifndef NO_SYS_FILE
afe4ca15 46#include <sys/file.h>
021959e2 47#endif
2b576293 48#include "gdb_stat.h"
bd5635a1 49#include <ctype.h>
afe4ca15
JG
50#include "symtab.h"
51#include "breakpoint.h"
52#include "command.h"
53#include "target.h"
54#include "gdbcore.h" /* for bfd stuff */
55#include "libaout.h" /* FIXME Secret internal BFD stuff for a.out */
56#include "symfile.h"
3624c875 57#include "objfiles.h"
c0302457 58#include "buildsym.h"
3416d90b 59#include "stabsread.h"
2af231b8 60#include "gdb-stabs.h"
3416d90b 61#include "demangle.h"
51b80b00
FF
62#include "language.h" /* Needed inside partial-stab.h */
63#include "complaints.h"
afe4ca15 64
7e258d18
PB
65#include "aout/aout64.h"
66#include "aout/stab_gnu.h" /* We always use GNU stabs, not native, now */
bd5635a1 67
94f5a25f
DP
68/* defined in stabsread.c; used for completing cfront stabs strings */
69extern void resolve_cont PARAMS((struct objfile * objfile, struct symbol * sym, char * p));
70
989d9cba 71\f
2b576293
C
72/* We put a pointer to this structure in the read_symtab_private field
73 of the psymtab. */
4a35d6e9 74
989d9cba 75struct symloc {
4a35d6e9 76
989d9cba
JK
77 /* Offset within the file symbol table of first local symbol for this
78 file. */
4a35d6e9 79
4a35d6e9 80 int ldsymoff;
989d9cba
JK
81
82 /* Length (in bytes) of the section of the symbol table devoted to
83 this file's symbols (actually, the section bracketed may contain
84 more than just this file's symbols). If ldsymlen is 0, the only
85 reason for this thing's existence is the dependency list. Nothing
86 else will happen when it is read in. */
87
4a35d6e9 88 int ldsymlen;
989d9cba
JK
89
90 /* The size of each symbol in the symbol file (in external form). */
91
9342ecb9 92 int symbol_size;
989d9cba
JK
93
94 /* Further information needed to locate the symbols if they are in
95 an ELF file. */
96
9342ecb9
JG
97 int symbol_offset;
98 int string_offset;
99 int file_string_offset;
4a35d6e9
FF
100};
101
989d9cba
JK
102#define LDSYMOFF(p) (((struct symloc *)((p)->read_symtab_private))->ldsymoff)
103#define LDSYMLEN(p) (((struct symloc *)((p)->read_symtab_private))->ldsymlen)
104#define SYMLOC(p) ((struct symloc *)((p)->read_symtab_private))
105#define SYMBOL_SIZE(p) (SYMLOC(p)->symbol_size)
106#define SYMBOL_OFFSET(p) (SYMLOC(p)->symbol_offset)
107#define STRING_OFFSET(p) (SYMLOC(p)->string_offset)
108#define FILE_STRING_OFFSET(p) (SYMLOC(p)->file_string_offset)
109
110\f
bd5635a1
RP
111/* Macro to determine which symbols to ignore when reading the first symbol
112 of a file. Some machines override this definition. */
113#ifndef IGNORE_SYMBOL
114/* This code is used on Ultrix systems. Ignore it */
115#define IGNORE_SYMBOL(type) (type == (int)N_NSYMS)
116#endif
117
2e4964ad
FF
118/* Remember what we deduced to be the source language of this psymtab. */
119
120static enum language psymtab_language = language_unknown;
121
bd5635a1
RP
122/* Nonzero means give verbose info on gdb action. From main.c. */
123extern int info_verbose;
124
7d9884b9 125/* The BFD for this file -- implicit parameter to next_symbol_text. */
bd5635a1 126
c0302457 127static bfd *symfile_bfd;
bd5635a1 128
afe4ca15
JG
129/* The size of each symbol in the symbol file (in external form).
130 This is set by dbx_symfile_read when building psymtabs, and by
131 dbx_psymtab_to_symtab when building symtabs. */
132
133static unsigned symbol_size;
134
9342ecb9
JG
135/* This is the offset of the symbol table in the executable file */
136static unsigned symbol_table_offset;
137
138/* This is the offset of the string table in the executable file */
139static unsigned string_table_offset;
140
141/* For elf+stab executables, the n_strx field is not a simple index
142 into the string table. Instead, each .o file has a base offset
143 in the string table, and the associated symbols contain offsets
144 from this base. The following two variables contain the base
145 offset for the current and next .o files. */
146static unsigned int file_string_table_offset;
147static unsigned int next_file_string_table_offset;
a66e8382
SG
148
149/* .o and NLM files contain unrelocated addresses which are based at 0. When
150 non-zero, this flag disables some of the special cases for Solaris elf+stab
151 text addresses at location 0. */
152
153static int symfile_relocatable = 0;
bfe2f12b
JL
154
155 /* If this is nonzero, N_LBRAC, N_RBRAC, and N_SLINE entries are relative
156 to the function start address. */
157
158static int block_address_function_relative = 0;
9d2b8d50 159\f
ab52cc44
JK
160/* The lowest text address we have yet encountered. This is needed
161 because in an a.out file, there is no header field which tells us
162 what address the program is actually going to be loaded at, so we
163 need to make guesses based on the symbols (which *are* relocated to
164 reflect the address it will be loaded at). */
9d2b8d50 165static CORE_ADDR lowest_text_address;
9342ecb9 166
bd5635a1
RP
167/* Complaints about the symbols we have encountered. */
168
bd5635a1
RP
169struct complaint lbrac_complaint =
170 {"bad block start address patched", 0, 0};
171
bd5635a1
RP
172struct complaint string_table_offset_complaint =
173 {"bad string table offset in symbol %d", 0, 0};
174
175struct complaint unknown_symtype_complaint =
0c4d2cc2 176 {"unknown symbol type %s", 0, 0};
bd5635a1 177
65ce5df4 178struct complaint unknown_symchar_complaint =
b30c81b6 179 {"unknown symbol descriptor `%c'", 0, 0};
65ce5df4 180
bd5635a1
RP
181struct complaint lbrac_rbrac_complaint =
182 {"block start larger than block end", 0, 0};
7d9884b9
JG
183
184struct complaint lbrac_unmatched_complaint =
185 {"unmatched N_LBRAC before symtab pos %d", 0, 0};
186
187struct complaint lbrac_mismatch_complaint =
188 {"N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d", 0, 0};
9342ecb9
JG
189
190struct complaint repeated_header_complaint =
26a859ec 191 {"\"repeated\" header file %s not previously seen, at symtab pos %d", 0, 0};
bd5635a1 192\f
bd5635a1
RP
193/* During initial symbol readin, we need to have a structure to keep
194 track of which psymtabs have which bincls in them. This structure
195 is used during readin to setup the list of dependencies within each
196 partial symbol table. */
197
198struct header_file_location
199{
200 char *name; /* Name of header file */
201 int instance; /* See above */
202 struct partial_symtab *pst; /* Partial symtab that has the
203 BINCL/EINCL defs for this file */
204};
205
206/* The actual list and controling variables */
207static struct header_file_location *bincl_list, *next_bincl;
208static int bincls_allocated;
209
021959e2
JG
210/* Local function prototypes */
211
212static void
80d68b1d
FF
213free_header_files PARAMS ((void));
214
215static void
216init_header_files PARAMS ((void));
021959e2 217
574dac8e
JK
218static void
219read_ofile_symtab PARAMS ((struct partial_symtab *));
021959e2
JG
220
221static void
222dbx_psymtab_to_symtab PARAMS ((struct partial_symtab *));
223
224static void
4c07f28d 225dbx_psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
021959e2 226
5801f348
JK
227static void
228read_dbx_dynamic_symtab PARAMS ((struct section_offsets *,
229 struct objfile *objfile));
230
021959e2 231static void
2af231b8
JG
232read_dbx_symtab PARAMS ((struct section_offsets *, struct objfile *,
233 CORE_ADDR, int));
021959e2
JG
234
235static void
236free_bincl_list PARAMS ((struct objfile *));
237
238static struct partial_symtab *
239find_corresponding_bincl_psymtab PARAMS ((char *, int));
240
241static void
242add_bincl_to_list PARAMS ((struct partial_symtab *, char *, int));
243
244static void
245init_bincl_list PARAMS ((int, struct objfile *));
246
021959e2 247static char *
94f5a25f 248dbx_next_symbol_text PARAMS ((struct objfile *));
021959e2
JG
249
250static void
251fill_symbuf PARAMS ((bfd *));
252
253static void
80d68b1d
FF
254dbx_symfile_init PARAMS ((struct objfile *));
255
256static void
257dbx_new_init PARAMS ((struct objfile *));
021959e2
JG
258
259static void
2af231b8 260dbx_symfile_read PARAMS ((struct objfile *, struct section_offsets *, int));
021959e2
JG
261
262static void
80d68b1d 263dbx_symfile_finish PARAMS ((struct objfile *));
021959e2
JG
264
265static void
266record_minimal_symbol PARAMS ((char *, CORE_ADDR, int, struct objfile *));
267
268static void
269add_new_header_file PARAMS ((char *, int));
270
271static void
272add_old_header_file PARAMS ((char *, int));
273
274static void
275add_this_object_header_file PARAMS ((int));
276
80d68b1d 277/* Free up old header file tables */
bd5635a1 278
021959e2 279static void
80d68b1d 280free_header_files ()
bd5635a1
RP
281{
282 register int i;
bd5635a1 283
80d68b1d
FF
284 if (header_files != NULL)
285 {
286 for (i = 0; i < n_header_files; i++)
287 {
288 free (header_files[i].name);
289 }
ac88ca20 290 free ((PTR)header_files);
80d68b1d
FF
291 header_files = NULL;
292 n_header_files = 0;
293 }
294 if (this_object_header_files)
295 {
ac88ca20 296 free ((PTR)this_object_header_files);
80d68b1d
FF
297 this_object_header_files = NULL;
298 }
299 n_allocated_header_files = 0;
300 n_allocated_this_object_header_files = 0;
301}
302
303/* Allocate new header file tables */
304
305static void
306init_header_files ()
307{
bd5635a1 308 n_header_files = 0;
80d68b1d
FF
309 n_allocated_header_files = 10;
310 header_files = (struct header_file *)
311 xmalloc (10 * sizeof (struct header_file));
bd5635a1
RP
312
313 n_allocated_this_object_header_files = 10;
314 this_object_header_files = (int *) xmalloc (10 * sizeof (int));
315}
316
bd5635a1
RP
317/* Add header file number I for this object file
318 at the next successive FILENUM. */
319
320static void
321add_this_object_header_file (i)
322 int i;
323{
324 if (n_this_object_header_files == n_allocated_this_object_header_files)
325 {
326 n_allocated_this_object_header_files *= 2;
327 this_object_header_files
021959e2 328 = (int *) xrealloc ((char *) this_object_header_files,
bd5635a1
RP
329 n_allocated_this_object_header_files * sizeof (int));
330 }
331
332 this_object_header_files[n_this_object_header_files++] = i;
333}
334
335/* Add to this file an "old" header file, one already seen in
336 a previous object file. NAME is the header file's name.
337 INSTANCE is its instance code, to select among multiple
338 symbol tables for the same header file. */
339
340static void
341add_old_header_file (name, instance)
342 char *name;
343 int instance;
344{
345 register struct header_file *p = header_files;
346 register int i;
347
348 for (i = 0; i < n_header_files; i++)
2e4964ad 349 if (STREQ (p[i].name, name) && instance == p[i].instance)
bd5635a1
RP
350 {
351 add_this_object_header_file (i);
352 return;
353 }
26a859ec 354 complain (&repeated_header_complaint, name, symnum);
bd5635a1
RP
355}
356
357/* Add to this file a "new" header file: definitions for its types follow.
358 NAME is the header file's name.
359 Most often this happens only once for each distinct header file,
360 but not necessarily. If it happens more than once, INSTANCE has
361 a different value each time, and references to the header file
362 use INSTANCE values to select among them.
363
364 dbx output contains "begin" and "end" markers for each new header file,
365 but at this level we just need to know which files there have been;
366 so we record the file when its "begin" is seen and ignore the "end". */
367
368static void
369add_new_header_file (name, instance)
370 char *name;
371 int instance;
372{
373 register int i;
bd5635a1
RP
374
375 /* Make sure there is room for one more header file. */
376
377 if (n_header_files == n_allocated_header_files)
378 {
379 n_allocated_header_files *= 2;
380 header_files = (struct header_file *)
021959e2
JG
381 xrealloc ((char *) header_files,
382 (n_allocated_header_files * sizeof (struct header_file)));
bd5635a1
RP
383 }
384
385 /* Create an entry for this header file. */
386
387 i = n_header_files++;
388 header_files[i].name = savestring (name, strlen(name));
389 header_files[i].instance = instance;
390 header_files[i].length = 10;
391 header_files[i].vector
392 = (struct type **) xmalloc (10 * sizeof (struct type *));
4ed3a9ea 393 memset (header_files[i].vector, 0, 10 * sizeof (struct type *));
bd5635a1
RP
394
395 add_this_object_header_file (i);
396}
397
bd5635a1
RP
398#if 0
399static struct type **
400explicit_lookup_type (real_filenum, index)
401 int real_filenum, index;
402{
403 register struct header_file *f = &header_files[real_filenum];
404
405 if (index >= f->length)
406 {
407 f->length *= 2;
408 f->vector = (struct type **)
409 xrealloc (f->vector, f->length * sizeof (struct type *));
4ed97c9a
RP
410 memset (&f->vector[f->length / 2],
411 '\0', f->length * sizeof (struct type *) / 2);
bd5635a1
RP
412 }
413 return &f->vector[index];
414}
415#endif
416\f
9bba3334 417static void
021959e2 418record_minimal_symbol (name, address, type, objfile)
bd5635a1
RP
419 char *name;
420 CORE_ADDR address;
421 int type;
021959e2 422 struct objfile *objfile;
bd5635a1 423{
021959e2 424 enum minimal_symbol_type ms_type;
a66e8382 425 int section;
0c4d2cc2 426
b8ec9a79
JK
427 switch (type)
428 {
a66e8382
SG
429 case N_TEXT | N_EXT:
430 ms_type = mst_text;
431 section = SECT_OFF_TEXT;
432 break;
433 case N_DATA | N_EXT:
434 ms_type = mst_data;
435 section = SECT_OFF_DATA;
436 break;
437 case N_BSS | N_EXT:
438 ms_type = mst_bss;
439 section = SECT_OFF_BSS;
440 break;
441 case N_ABS | N_EXT:
442 ms_type = mst_abs;
443 section = -1;
444 break;
0c4d2cc2 445#ifdef N_SETV
a66e8382
SG
446 case N_SETV | N_EXT:
447 ms_type = mst_data;
448 section = SECT_OFF_DATA;
449 break;
b8ec9a79
JK
450 case N_SETV:
451 /* I don't think this type actually exists; since a N_SETV is the result
452 of going over many .o files, it doesn't make sense to have one
453 file local. */
454 ms_type = mst_file_data;
a66e8382 455 section = SECT_OFF_DATA;
b8ec9a79 456 break;
0c4d2cc2 457#endif
05c81f45 458 case N_TEXT:
b8ec9a79
JK
459 case N_NBTEXT:
460 case N_FN:
461 case N_FN_SEQ:
b8ec9a79 462 ms_type = mst_file_text;
a66e8382 463 section = SECT_OFF_TEXT;
b8ec9a79 464 break;
b8ec9a79
JK
465 case N_DATA:
466 ms_type = mst_file_data;
467
468 /* Check for __DYNAMIC, which is used by Sun shared libraries.
469 Record it as global even if it's local, not global, so
05c81f45
SEF
470 lookup_minimal_symbol can find it. We don't check symbol_leading_char
471 because for SunOS4 it always is '_'. */
b8ec9a79
JK
472 if (name[8] == 'C' && STREQ ("__DYNAMIC", name))
473 ms_type = mst_data;
474
475 /* Same with virtual function tables, both global and static. */
476 {
477 char *tempstring = name;
478 if (tempstring[0] == bfd_get_symbol_leading_char (objfile->obfd))
479 ++tempstring;
480 if (VTBL_PREFIX_P ((tempstring)))
481 ms_type = mst_data;
482 }
a66e8382 483 section = SECT_OFF_DATA;
b8ec9a79 484 break;
b8ec9a79
JK
485 case N_BSS:
486 ms_type = mst_file_bss;
a66e8382
SG
487 section = SECT_OFF_BSS;
488 break;
489 default:
490 ms_type = mst_unknown;
491 section = -1;
b8ec9a79 492 break;
0c4d2cc2 493 }
bd5635a1 494
bfe2f12b 495 if ((ms_type == mst_file_text || ms_type == mst_text)
9d2b8d50
JK
496 && address < lowest_text_address)
497 lowest_text_address = address;
498
a66e8382 499 prim_record_minimal_symbol_and_info
b8ec9a79
JK
500 (obsavestring (name, strlen (name), &objfile -> symbol_obstack),
501 address,
6545c6a0 502 ms_type,
a66e8382
SG
503 NULL,
504 section,
6545c6a0 505 objfile);
bd5635a1
RP
506}
507\f
508/* Scan and build partial symbols for a symbol file.
509 We have been initialized by a call to dbx_symfile_init, which
3624c875
FF
510 put all the relevant info into a "struct dbx_symfile_info",
511 hung off the objfile structure.
bd5635a1 512
2af231b8
JG
513 SECTION_OFFSETS contains offsets relative to which the symbols in the
514 various sections are (depending where the sections were actually loaded).
bd5635a1
RP
515 MAINLINE is true if we are reading the main symbol
516 table (as opposed to a shared lib or dynamically loaded file). */
517
9bba3334 518static void
2af231b8 519dbx_symfile_read (objfile, section_offsets, mainline)
80d68b1d 520 struct objfile *objfile;
2af231b8 521 struct section_offsets *section_offsets;
bd5635a1
RP
522 int mainline; /* FIXME comments above */
523{
80d68b1d 524 bfd *sym_bfd;
bd5635a1 525 int val;
0eb22669 526 struct cleanup *back_to;
bd5635a1 527
a66e8382
SG
528 val = strlen (objfile->name);
529
530 /* .o and .nlm files are relocatables with text, data and bss segs based at
531 0. This flag disables special (Solaris stabs-in-elf only) fixups for
532 symbols with a value of 0. XXX - This is a Krock. Solaris stabs-in-elf
533 should be fixed to determine pst->textlow without using this text seg of
534 0 fixup crap. */
535
536 if (strcmp (&objfile->name[val-2], ".o") == 0
537 || strcmp (&objfile->name[val-4], ".nlm") == 0)
538 symfile_relocatable = 1;
539
bfe2f12b
JL
540 /* This is true for Solaris (and all other systems which put stabs
541 in sections, hopefully, since it would be silly to do things
542 differently from Solaris), and false for SunOS4 and other a.out
543 file formats. */
544 block_address_function_relative =
545 ((0 == strncmp (bfd_get_target (objfile->obfd), "elf", 3))
546 || (0 == strncmp (bfd_get_target (objfile->obfd), "som", 3))
547 || (0 == strncmp (bfd_get_target (objfile->obfd), "coff", 4))
45886199 548 || (0 == strncmp (bfd_get_target (objfile->obfd), "pe", 2))
bfe2f12b
JL
549 || (0 == strncmp (bfd_get_target (objfile->obfd), "nlm", 3)));
550
80d68b1d 551 sym_bfd = objfile->obfd;
2c7ab4ca 552 val = bfd_seek (objfile->obfd, DBX_SYMTAB_OFFSET (objfile), SEEK_SET);
bd5635a1 553 if (val < 0)
80d68b1d 554 perror_with_name (objfile->name);
bd5635a1 555
66eeea27 556 /* If we are reinitializing, or if we have never loaded syms yet, init */
a367db89
JK
557 if (mainline
558 || objfile->global_psymbols.size == 0
559 || objfile->static_psymbols.size == 0)
560 init_psymbol_list (objfile, DBX_SYMCOUNT (objfile));
66eeea27 561
9342ecb9
JG
562 symbol_size = DBX_SYMBOL_SIZE (objfile);
563 symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
afe4ca15 564
bd5635a1 565 pending_blocks = 0;
0eb22669 566 back_to = make_cleanup (really_free_pendings, 0);
bd5635a1 567
021959e2
JG
568 init_minimal_symbol_collection ();
569 make_cleanup (discard_minimal_symbols, 0);
bd5635a1
RP
570
571 /* Now that the symbol table data of the executable file are all in core,
572 process them and define symbols accordingly. */
573
2af231b8 574 read_dbx_symtab (section_offsets, objfile,
2b576293
C
575 DBX_TEXT_ADDR (objfile),
576 DBX_TEXT_SIZE (objfile));
bd5635a1 577
26a859ec 578 /* Add the dynamic symbols. */
5801f348 579
26a859ec 580 read_dbx_dynamic_symtab (section_offsets, objfile);
5801f348 581
021959e2
JG
582 /* Install any minimal symbols that have been collected as the current
583 minimal symbols for this objfile. */
bd5635a1 584
80d68b1d 585 install_minimal_symbols (objfile);
bd5635a1 586
0eb22669 587 do_cleanups (back_to);
bd5635a1
RP
588}
589
9404978d
MT
590/* Initialize anything that needs initializing when a completely new
591 symbol file is specified (not just adding some symbols from another
592 file, e.g. a shared library). */
bd5635a1 593
9bba3334 594static void
ac88ca20
JG
595dbx_new_init (ignore)
596 struct objfile *ignore;
bd5635a1 597{
3416d90b 598 stabsread_new_init ();
c0302457 599 buildsym_new_init ();
80d68b1d 600 init_header_files ();
bd5635a1
RP
601}
602
603
604/* dbx_symfile_init ()
605 is the dbx-specific initialization routine for reading symbols.
80d68b1d 606 It is passed a struct objfile which contains, among other things,
bd5635a1
RP
607 the BFD for the file whose symbols are being read, and a slot for a pointer
608 to "private data" which we fill with goodies.
609
610 We read the string table into malloc'd space and stash a pointer to it.
611
612 Since BFD doesn't know how to read debug symbols in a format-independent
613 way (and may never do so...), we have to do it ourselves. We will never
614 be called unless this is an a.out (or very similar) file.
615 FIXME, there should be a cleaner peephole into the BFD environment here. */
616
69a272c4
FF
617#define DBX_STRINGTAB_SIZE_SIZE sizeof(long) /* FIXME */
618
9bba3334 619static void
80d68b1d
FF
620dbx_symfile_init (objfile)
621 struct objfile *objfile;
bd5635a1
RP
622{
623 int val;
80d68b1d 624 bfd *sym_bfd = objfile->obfd;
bd5635a1 625 char *name = bfd_get_filename (sym_bfd);
2b576293 626 asection *text_sect;
69a272c4 627 unsigned char size_temp[DBX_STRINGTAB_SIZE_SIZE];
bd5635a1
RP
628
629 /* Allocate struct to keep track of the symfile */
965a5c32 630 objfile->sym_stab_info = (PTR)
3624c875 631 xmmalloc (objfile -> md, sizeof (struct dbx_symfile_info));
bd5635a1
RP
632
633 /* FIXME POKING INSIDE BFD DATA STRUCTURES */
bd5635a1
RP
634#define STRING_TABLE_OFFSET (sym_bfd->origin + obj_str_filepos (sym_bfd))
635#define SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_sym_filepos (sym_bfd))
040b9597 636
bd5635a1
RP
637 /* FIXME POKING INSIDE BFD DATA STRUCTURES */
638
784fd92b 639 DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL;
2b576293
C
640
641 text_sect = bfd_get_section_by_name (sym_bfd, ".text");
642 if (!text_sect)
9342ecb9 643 error ("Can't find .text section in symbol file");
2b576293
C
644 DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
645 DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
9342ecb9 646
bf18ac80 647 DBX_SYMBOL_SIZE (objfile) = obj_symbol_entry_size (sym_bfd);
7da1e27d 648 DBX_SYMCOUNT (objfile) = bfd_get_symcount (sym_bfd);
9342ecb9 649 DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
3624c875
FF
650
651 /* Read the string table and stash it away in the psymbol_obstack. It is
652 only needed as long as we need to expand psymbols into full symbols,
653 so when we blow away the psymbol the string table goes away as well.
654 Note that gdb used to use the results of attempting to malloc the
655 string table, based on the size it read, as a form of sanity check
656 for botched byte swapping, on the theory that a byte swapped string
657 table size would be so totally bogus that the malloc would fail. Now
658 that we put in on the psymbol_obstack, we can't do this since gdb gets
659 a fatal error (out of virtual memory) if the size is bogus. We can
69a272c4
FF
660 however at least check to see if the size is less than the size of
661 the size field itself, or larger than the size of the entire file.
662 Note that all valid string tables have a size greater than zero, since
663 the bytes used to hold the size are included in the count. */
3624c875 664
69a272c4
FF
665 if (STRING_TABLE_OFFSET == 0)
666 {
65ce5df4
JG
667 /* It appears that with the existing bfd code, STRING_TABLE_OFFSET
668 will never be zero, even when there is no string table. This
669 would appear to be a bug in bfd. */
69a272c4
FF
670 DBX_STRINGTAB_SIZE (objfile) = 0;
671 DBX_STRINGTAB (objfile) = NULL;
672 }
673 else
674 {
2c7ab4ca 675 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
69a272c4
FF
676 if (val < 0)
677 perror_with_name (name);
678
679 memset ((PTR) size_temp, 0, sizeof (size_temp));
680 val = bfd_read ((PTR) size_temp, sizeof (size_temp), 1, sym_bfd);
681 if (val < 0)
65ce5df4
JG
682 {
683 perror_with_name (name);
684 }
685 else if (val == 0)
686 {
687 /* With the existing bfd code, STRING_TABLE_OFFSET will be set to
688 EOF if there is no string table, and attempting to read the size
689 from EOF will read zero bytes. */
690 DBX_STRINGTAB_SIZE (objfile) = 0;
691 DBX_STRINGTAB (objfile) = NULL;
692 }
693 else
694 {
695 /* Read some data that would appear to be the string table size.
696 If there really is a string table, then it is probably the right
697 size. Byteswap if necessary and validate the size. Note that
698 the minimum is DBX_STRINGTAB_SIZE_SIZE. If we just read some
699 random data that happened to be at STRING_TABLE_OFFSET, because
700 bfd can't tell us there is no string table, the sanity checks may
701 or may not catch this. */
702 DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
703
704 if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp)
705 || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
706 error ("ridiculous string table size (%d bytes).",
707 DBX_STRINGTAB_SIZE (objfile));
708
709 DBX_STRINGTAB (objfile) =
710 (char *) obstack_alloc (&objfile -> psymbol_obstack,
711 DBX_STRINGTAB_SIZE (objfile));
94f5a25f 712 OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile));
65ce5df4
JG
713
714 /* Now read in the string table in one big gulp. */
715
2c7ab4ca 716 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
65ce5df4
JG
717 if (val < 0)
718 perror_with_name (name);
719 val = bfd_read (DBX_STRINGTAB (objfile), DBX_STRINGTAB_SIZE (objfile), 1,
720 sym_bfd);
721 if (val != DBX_STRINGTAB_SIZE (objfile))
722 perror_with_name (name);
723 }
69a272c4 724 }
bd5635a1 725}
80d68b1d
FF
726
727/* Perform any local cleanups required when we are done with a particular
728 objfile. I.E, we are in the process of discarding all symbol information
729 for an objfile, freeing up all memory held for it, and unlinking the
730 objfile struct from the global list of known objfiles. */
731
732static void
733dbx_symfile_finish (objfile)
734 struct objfile *objfile;
735{
965a5c32 736 if (objfile->sym_stab_info != NULL)
80d68b1d 737 {
965a5c32 738 mfree (objfile -> md, objfile->sym_stab_info);
80d68b1d
FF
739 }
740 free_header_files ();
741}
742
bd5635a1
RP
743\f
744/* Buffer for reading the symbol table entries. */
afe4ca15 745static struct internal_nlist symbuf[4096];
bd5635a1
RP
746static int symbuf_idx;
747static int symbuf_end;
748
94f5a25f
DP
749/* cont_elem is used for continuing information in cfront.
750 It saves information about which types need to be fixed up and
751 completed after all the stabs are read. */
752struct cont_elem
753 {
754 /* sym and stabsstring for continuing information in cfront */
755 struct symbol * sym;
756 char * stabs;
757 /* state dependancies (statics that must be preserved) */
758 int sym_idx;
759 int sym_end;
760 int symnum;
761 /* other state dependancies include:
762 (assumption is that these will not change since process_now FIXME!!)
763 stringtab_global
764 n_stabs
765 objfile
766 symfile_bfd */
767};
768static struct cont_elem cont_list[100];
769static int cont_count = 0;
770
771void
772process_later(sym,p)
773 struct symbol * sym;
774 char * p;
775{
776 /* save state so we can process these stabs later */
777 cont_list[cont_count].sym_idx = symbuf_idx;
778 cont_list[cont_count].sym_end = symbuf_end;
779 cont_list[cont_count].symnum = symnum;
780 cont_list[cont_count].sym = sym;
781 cont_list[cont_count].stabs = p;
782 cont_count++;
783}
784
785void
786process_now(objfile)
787 struct objfile * objfile;
788{
789 int i;
790 /* save original state */
791 int save_symbuf_idx = symbuf_idx;
792 int save_symbuf_end = symbuf_end;
793 int save_symnum = symnum;
794 for (i=0; i<cont_count; i++)
795 {
796 /* set state as if we were parsing stabs strings
797 for this symbol */
798 symbuf_idx = cont_list[i].sym_idx; /* statics used by gdb */
799 symbuf_end = cont_list[i].sym_end;
800 symnum = cont_list[i].symnum;
801 resolve_cont(objfile,cont_list[i].sym,cont_list[i].stabs);
802 }
803 /* restore original state */
804 symbuf_idx = save_symbuf_idx;
805 symbuf_end = save_symbuf_end;
806 symnum = save_symnum;
807 cont_count=0; /* reset for next run */
808}
809
810
9342ecb9
JG
811/* Name of last function encountered. Used in Solaris to approximate
812 object file boundaries. */
813static char *last_function_name;
814
bd5635a1
RP
815/* The address in memory of the string table of the object file we are
816 reading (which might not be the "main" object file, but might be a
a367db89
JK
817 shared library or some other dynamically loaded thing). This is
818 set by read_dbx_symtab when building psymtabs, and by
819 read_ofile_symtab when building symtabs, and is used only by
820 next_symbol_text. FIXME: If that is true, we don't need it when
821 building psymtabs, right? */
bd5635a1
RP
822static char *stringtab_global;
823
2b576293
C
824/* These variables are used to control fill_symbuf when the stabs
825 symbols are not contiguous (as may be the case when a COFF file is
826 linked using --split-by-reloc). */
827static struct stab_section_list *symbuf_sections;
828static unsigned int symbuf_left;
829static unsigned int symbuf_read;
830
bd5635a1
RP
831/* Refill the symbol table input buffer
832 and set the variables that control fetching entries from it.
833 Reports an error if no data available.
834 This function can read past the end of the symbol table
835 (into the string table) but this does no harm. */
836
7d9884b9
JG
837static void
838fill_symbuf (sym_bfd)
839 bfd *sym_bfd;
bd5635a1 840{
2b576293
C
841 unsigned int count;
842 int nbytes;
843
844 if (symbuf_sections == NULL)
845 count = sizeof (symbuf);
846 else
847 {
848 if (symbuf_left <= 0)
849 {
850 file_ptr filepos = symbuf_sections->section->filepos;
851 if (bfd_seek (sym_bfd, filepos, SEEK_SET) != 0)
852 perror_with_name (bfd_get_filename (sym_bfd));
853 symbuf_left = bfd_section_size (sym_bfd, symbuf_sections->section);
854 symbol_table_offset = filepos - symbuf_read;
855 symbuf_sections = symbuf_sections->next;
856 }
857
858 count = symbuf_left;
859 if (count > sizeof (symbuf))
860 count = sizeof (symbuf);
861 }
862
863 nbytes = bfd_read ((PTR)symbuf, count, 1, sym_bfd);
bd5635a1 864 if (nbytes < 0)
7d9884b9 865 perror_with_name (bfd_get_filename (sym_bfd));
bd5635a1
RP
866 else if (nbytes == 0)
867 error ("Premature end of file reading symbol table");
afe4ca15 868 symbuf_end = nbytes / symbol_size;
bd5635a1 869 symbuf_idx = 0;
2b576293
C
870 symbuf_left -= nbytes;
871 symbuf_read += nbytes;
bd5635a1
RP
872}
873
7d9884b9 874#define SWAP_SYMBOL(symp, abfd) \
bd5635a1 875 { \
7d9884b9 876 (symp)->n_strx = bfd_h_get_32(abfd, \
afe4ca15 877 (unsigned char *)&(symp)->n_strx); \
7d9884b9 878 (symp)->n_desc = bfd_h_get_16 (abfd, \
bd5635a1 879 (unsigned char *)&(symp)->n_desc); \
7d9884b9 880 (symp)->n_value = bfd_h_get_32 (abfd, \
bd5635a1
RP
881 (unsigned char *)&(symp)->n_value); \
882 }
883
884/* Invariant: The symbol pointed to by symbuf_idx is the first one
885 that hasn't been swapped. Swap the symbol at the same time
886 that symbuf_idx is incremented. */
887
888/* dbx allows the text of a symbol name to be continued into the
889 next symbol name! When such a continuation is encountered
890 (a \ at the end of the text of a name)
891 call this function to get the continuation. */
892
021959e2 893static char *
94f5a25f
DP
894dbx_next_symbol_text (objfile)
895 struct objfile *objfile;
bd5635a1
RP
896{
897 if (symbuf_idx == symbuf_end)
7d9884b9 898 fill_symbuf (symfile_bfd);
bd5635a1 899 symnum++;
7d9884b9 900 SWAP_SYMBOL(&symbuf[symbuf_idx], symfile_bfd);
94f5a25f 901 OBJSTAT (objfile, n_stabs++);
9342ecb9
JG
902 return symbuf[symbuf_idx++].n_strx + stringtab_global
903 + file_string_table_offset;
bd5635a1
RP
904}
905\f
bd5635a1
RP
906/* Initialize the list of bincls to contain none and have some
907 allocated. */
908
909static void
021959e2 910init_bincl_list (number, objfile)
bd5635a1 911 int number;
021959e2 912 struct objfile *objfile;
bd5635a1
RP
913{
914 bincls_allocated = number;
915 next_bincl = bincl_list = (struct header_file_location *)
318bf84f 916 xmmalloc (objfile -> md, bincls_allocated * sizeof(struct header_file_location));
bd5635a1
RP
917}
918
919/* Add a bincl to the list. */
920
921static void
922add_bincl_to_list (pst, name, instance)
923 struct partial_symtab *pst;
924 char *name;
925 int instance;
926{
927 if (next_bincl >= bincl_list + bincls_allocated)
928 {
929 int offset = next_bincl - bincl_list;
930 bincls_allocated *= 2;
931 bincl_list = (struct header_file_location *)
318bf84f 932 xmrealloc (pst->objfile->md, (char *)bincl_list,
bd5635a1
RP
933 bincls_allocated * sizeof (struct header_file_location));
934 next_bincl = bincl_list + offset;
935 }
936 next_bincl->pst = pst;
937 next_bincl->instance = instance;
938 next_bincl++->name = name;
939}
940
941/* Given a name, value pair, find the corresponding
942 bincl in the list. Return the partial symtab associated
943 with that header_file_location. */
944
9bba3334 945static struct partial_symtab *
bd5635a1
RP
946find_corresponding_bincl_psymtab (name, instance)
947 char *name;
948 int instance;
949{
950 struct header_file_location *bincl;
951
952 for (bincl = bincl_list; bincl < next_bincl; bincl++)
953 if (bincl->instance == instance
2e4964ad 954 && STREQ (name, bincl->name))
bd5635a1
RP
955 return bincl->pst;
956
26a859ec 957 complain (&repeated_header_complaint, name, symnum);
bd5635a1
RP
958 return (struct partial_symtab *) 0;
959}
960
961/* Free the storage allocated for the bincl list. */
962
963static void
021959e2
JG
964free_bincl_list (objfile)
965 struct objfile *objfile;
bd5635a1 966{
ac88ca20 967 mfree (objfile -> md, (PTR)bincl_list);
bd5635a1
RP
968 bincls_allocated = 0;
969}
970
5801f348
JK
971/* Scan a SunOs dynamic symbol table for symbols of interest and
972 add them to the minimal symbol table. */
973
974static void
975read_dbx_dynamic_symtab (section_offsets, objfile)
976 struct section_offsets *section_offsets;
977 struct objfile *objfile;
978{
979 bfd *abfd = objfile->obfd;
192b64e7 980 struct cleanup *back_to;
5801f348 981 int counter;
192b64e7
ILT
982 long dynsym_size;
983 long dynsym_count;
984 asymbol **dynsyms;
985 asymbol **symptr;
986 arelent **relptr;
987 long dynrel_size;
988 long dynrel_count;
989 arelent **dynrels;
5801f348 990 CORE_ADDR sym_value;
f69ecb9c 991 char *name;
5801f348
JK
992
993 /* Check that the symbol file has dynamic symbols that we know about.
994 bfd_arch_unknown can happen if we are reading a sun3 symbol file
995 on a sun4 host (and vice versa) and bfd is not configured
996 --with-target=all. This would trigger an assertion in bfd/sunos.c,
997 so we ignore the dynamic symbols in this case. */
998 if (bfd_get_flavour (abfd) != bfd_target_aout_flavour
999 || (bfd_get_file_flags (abfd) & DYNAMIC) == 0
192b64e7 1000 || bfd_get_arch (abfd) == bfd_arch_unknown)
5801f348
JK
1001 return;
1002
192b64e7
ILT
1003 dynsym_size = bfd_get_dynamic_symtab_upper_bound (abfd);
1004 if (dynsym_size < 0)
5801f348
JK
1005 return;
1006
192b64e7
ILT
1007 dynsyms = (asymbol **) xmalloc (dynsym_size);
1008 back_to = make_cleanup (free, dynsyms);
1009
1010 dynsym_count = bfd_canonicalize_dynamic_symtab (abfd, dynsyms);
1011 if (dynsym_count < 0)
1012 {
1013 do_cleanups (back_to);
1014 return;
1015 }
1016
5801f348
JK
1017 /* Enter dynamic symbols into the minimal symbol table
1018 if this is a stripped executable. */
1019 if (bfd_get_symcount (abfd) <= 0)
1020 {
192b64e7
ILT
1021 symptr = dynsyms;
1022 for (counter = 0; counter < dynsym_count; counter++, symptr++)
5801f348 1023 {
192b64e7
ILT
1024 asymbol *sym = *symptr;
1025 asection *sec;
1026 int type;
1027
192b64e7 1028 sec = bfd_get_section (sym);
be78eb1a
PS
1029
1030 /* BFD symbols are section relative. */
0683ac4b
PS
1031 sym_value = sym->value + sec->vma;
1032
192b64e7 1033 if (bfd_get_section_flags (abfd, sec) & SEC_CODE)
5801f348 1034 {
192b64e7
ILT
1035 sym_value += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1036 type = N_TEXT;
5801f348 1037 }
192b64e7
ILT
1038 else if (bfd_get_section_flags (abfd, sec) & SEC_DATA)
1039 {
1040 sym_value += ANOFFSET (section_offsets, SECT_OFF_DATA);
1041 type = N_DATA;
1042 }
1043 else if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC)
5801f348 1044 {
192b64e7
ILT
1045 sym_value += ANOFFSET (section_offsets, SECT_OFF_BSS);
1046 type = N_BSS;
5801f348
JK
1047 }
1048 else
192b64e7
ILT
1049 continue;
1050
1051 if (sym->flags & BSF_GLOBAL)
1052 type |= N_EXT;
1053
b9e58503
PS
1054 record_minimal_symbol ((char *) bfd_asymbol_name (sym), sym_value,
1055 type, objfile);
5801f348
JK
1056 }
1057 }
1058
1059 /* Symbols from shared libraries have a dynamic relocation entry
1060 that points to the associated slot in the procedure linkage table.
1061 We make a mininal symbol table entry with type mst_solib_trampoline
1062 at the address in the procedure linkage table. */
192b64e7
ILT
1063 dynrel_size = bfd_get_dynamic_reloc_upper_bound (abfd);
1064 if (dynrel_size < 0)
1065 {
1066 do_cleanups (back_to);
1067 return;
1068 }
1069
1070 dynrels = (arelent **) xmalloc (dynrel_size);
1071 make_cleanup (free, dynrels);
5801f348 1072
192b64e7
ILT
1073 dynrel_count = bfd_canonicalize_dynamic_reloc (abfd, dynrels, dynsyms);
1074 if (dynrel_count < 0)
1075 {
1076 do_cleanups (back_to);
1077 return;
1078 }
5801f348 1079
192b64e7 1080 for (counter = 0, relptr = dynrels;
5801f348 1081 counter < dynrel_count;
192b64e7 1082 counter++, relptr++)
5801f348 1083 {
0683ac4b 1084 arelent *rel = *relptr;
26a859ec
PS
1085 CORE_ADDR address =
1086 rel->address + ANOFFSET (section_offsets, SECT_OFF_DATA);
5801f348 1087
0683ac4b
PS
1088 switch (bfd_get_arch (abfd))
1089 {
1090 case bfd_arch_sparc:
1091 if (rel->howto->type != RELOC_JMP_SLOT)
1092 continue;
1093 break;
1094 case bfd_arch_m68k:
1095 /* `16' is the type BFD produces for a jump table relocation. */
1096 if (rel->howto->type != 16)
1097 continue;
5801f348 1098
0683ac4b
PS
1099 /* Adjust address in the jump table to point to
1100 the start of the bsr instruction. */
1101 address -= 2;
1102 break;
1103 default:
1104 continue;
1105 }
5801f348 1106
b9e58503 1107 name = (char *) bfd_asymbol_name (*rel->sym_ptr_ptr);
f69ecb9c
JK
1108 prim_record_minimal_symbol
1109 (obsavestring (name, strlen (name), &objfile -> symbol_obstack),
1110 address,
1111 mst_solib_trampoline,
1112 objfile);
5801f348 1113 }
192b64e7
ILT
1114
1115 do_cleanups (back_to);
5801f348
JK
1116}
1117
bd5635a1
RP
1118/* Given pointers to an a.out symbol table in core containing dbx
1119 style data, setup partial_symtab's describing each source file for
3624c875
FF
1120 which debugging information is available.
1121 SYMFILE_NAME is the name of the file we are reading from
2af231b8
JG
1122 and SECTION_OFFSETS is the set of offsets for the various sections
1123 of the file (a set of zeros if the mainline program). */
bd5635a1
RP
1124
1125static void
2af231b8
JG
1126read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
1127 struct section_offsets *section_offsets;
7d9884b9 1128 struct objfile *objfile;
bd5635a1
RP
1129 CORE_ADDR text_addr;
1130 int text_size;
1131{
ac88ca20 1132 register struct internal_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch */
bd5635a1 1133 register char *namestring;
bd5635a1
RP
1134 int nsl;
1135 int past_first_source_file = 0;
1136 CORE_ADDR last_o_file_start = 0;
94f5a25f 1137 CORE_ADDR last_function_start = 0;
0eb22669 1138 struct cleanup *back_to;
7d9884b9 1139 bfd *abfd;
bd5635a1 1140
bd5635a1
RP
1141 /* Current partial symtab */
1142 struct partial_symtab *pst;
1143
1144 /* List of current psymtab's include files */
1145 char **psymtab_include_list;
1146 int includes_allocated;
1147 int includes_used;
1148
1149 /* Index within current psymtab dependency list */
1150 struct partial_symtab **dependency_list;
1151 int dependencies_used, dependencies_allocated;
1152
9342ecb9
JG
1153 /* FIXME. We probably want to change stringtab_global rather than add this
1154 while processing every symbol entry. FIXME. */
1155 file_string_table_offset = 0;
1156 next_file_string_table_offset = 0;
1157
3624c875 1158 stringtab_global = DBX_STRINGTAB (objfile);
bd5635a1
RP
1159
1160 pst = (struct partial_symtab *) 0;
1161
1162 includes_allocated = 30;
1163 includes_used = 0;
1164 psymtab_include_list = (char **) alloca (includes_allocated *
1165 sizeof (char *));
1166
1167 dependencies_allocated = 30;
1168 dependencies_used = 0;
1169 dependency_list =
1170 (struct partial_symtab **) alloca (dependencies_allocated *
1171 sizeof (struct partial_symtab *));
1172
bd5635a1 1173 /* Init bincl list */
021959e2 1174 init_bincl_list (20, objfile);
0eb22669 1175 back_to = make_cleanup (free_bincl_list, objfile);
bd5635a1 1176
3416d90b 1177 last_source_file = NULL;
bd5635a1 1178
9d2b8d50 1179 lowest_text_address = (CORE_ADDR)-1;
bd5635a1 1180
7d9884b9
JG
1181 symfile_bfd = objfile->obfd; /* For next_text_symbol */
1182 abfd = objfile->obfd;
bd5635a1 1183 symbuf_end = symbuf_idx = 0;
aab77d5f 1184 next_symbol_text_func = dbx_next_symbol_text;
bd5635a1 1185
3624c875 1186 for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
bd5635a1
RP
1187 {
1188 /* Get the symbol for this run and pull out some info */
1189 QUIT; /* allow this to be interruptable */
1190 if (symbuf_idx == symbuf_end)
7d9884b9 1191 fill_symbuf (abfd);
bd5635a1
RP
1192 bufp = &symbuf[symbuf_idx++];
1193
1194 /*
1195 * Special case to speed up readin.
1196 */
1197 if (bufp->n_type == (unsigned char)N_SLINE) continue;
1198
7d9884b9 1199 SWAP_SYMBOL (bufp, abfd);
94f5a25f 1200 OBJSTAT (objfile, n_stabs++);
bd5635a1
RP
1201
1202 /* Ok. There is a lot of code duplicated in the rest of this
1203 switch statement (for efficiency reasons). Since I don't
1204 like duplicating code, I will do my penance here, and
1205 describe the code which is duplicated:
1206
1207 *) The assignment to namestring.
1208 *) The call to strchr.
1209 *) The addition of a partial symbol the the two partial
1210 symbol lists. This last is a large section of code, so
1211 I've imbedded it in the following macro.
1212 */
1213
1214/* Set namestring based on bufp. If the string table index is invalid,
1215 give a fake name, and print a single error message per symbol file read,
1216 rather than abort the symbol reading or flood the user with messages. */
9342ecb9
JG
1217
1218/*FIXME: Too many adds and indirections in here for the inner loop. */
bd5635a1 1219#define SET_NAMESTRING()\
9342ecb9
JG
1220 if (((unsigned)bufp->n_strx + file_string_table_offset) >= \
1221 DBX_STRINGTAB_SIZE (objfile)) { \
51b80b00 1222 complain (&string_table_offset_complaint, symnum); \
5801f348 1223 namestring = "<bad string table offset>"; \
bd5635a1 1224 } else \
9342ecb9
JG
1225 namestring = bufp->n_strx + file_string_table_offset + \
1226 DBX_STRINGTAB (objfile)
bd5635a1 1227
7e258d18
PB
1228#define CUR_SYMBOL_TYPE bufp->n_type
1229#define CUR_SYMBOL_VALUE bufp->n_value
1230#define DBXREAD_ONLY
2af231b8
JG
1231#define START_PSYMTAB(ofile,secoff,fname,low,symoff,global_syms,static_syms)\
1232 start_psymtab(ofile, secoff, fname, low, symoff, global_syms, static_syms)
7e258d18
PB
1233#define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps)\
1234 end_psymtab(pst,ilist,ninc,c_off,c_text,dep_list,n_deps)
aab77d5f 1235
7e258d18 1236#include "partial-stab.h"
bd5635a1
RP
1237 }
1238
1239 /* If there's stuff to be cleaned up, clean it up. */
3624c875 1240 if (DBX_SYMCOUNT (objfile) > 0 /* We have some syms */
9342ecb9
JG
1241/*FIXME, does this have a bug at start address 0? */
1242 && last_o_file_start
3624c875
FF
1243 && objfile -> ei.entry_point < bufp->n_value
1244 && objfile -> ei.entry_point >= last_o_file_start)
bd5635a1 1245 {
3624c875
FF
1246 objfile -> ei.entry_file_lowpc = last_o_file_start;
1247 objfile -> ei.entry_file_highpc = bufp->n_value;
bd5635a1
RP
1248 }
1249
1250 if (pst)
1251 {
1252 end_psymtab (pst, psymtab_include_list, includes_used,
9d2b8d50
JK
1253 symnum * symbol_size,
1254 (lowest_text_address == (CORE_ADDR)-1
2fe3b329
PS
1255 ? (text_addr + section_offsets->offsets[SECT_OFF_TEXT])
1256 : lowest_text_address)
9d2b8d50 1257 + text_size,
7e258d18 1258 dependency_list, dependencies_used);
bd5635a1
RP
1259 }
1260
0eb22669 1261 do_cleanups (back_to);
bd5635a1
RP
1262}
1263
4a35d6e9
FF
1264/* Allocate and partially fill a partial symtab. It will be
1265 completely filled at the end of the symbol list.
1266
1267 SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
1268 is the address relative to which its symbols are (incremental) or 0
1269 (normal). */
1270
bd5635a1 1271
7e258d18 1272struct partial_symtab *
2af231b8 1273start_psymtab (objfile, section_offsets,
bd5635a1 1274 filename, textlow, ldsymoff, global_syms, static_syms)
7d9884b9 1275 struct objfile *objfile;
2af231b8 1276 struct section_offsets *section_offsets;
bd5635a1
RP
1277 char *filename;
1278 CORE_ADDR textlow;
1279 int ldsymoff;
94f5a25f
DP
1280 struct partial_symbol **global_syms;
1281 struct partial_symbol **static_syms;
bd5635a1
RP
1282{
1283 struct partial_symtab *result =
2af231b8 1284 start_psymtab_common(objfile, section_offsets,
021959e2 1285 filename, textlow, global_syms, static_syms);
bd5635a1 1286
021959e2
JG
1287 result->read_symtab_private = (char *)
1288 obstack_alloc (&objfile -> psymbol_obstack, sizeof (struct symloc));
1289 LDSYMOFF(result) = ldsymoff;
bd5635a1 1290 result->read_symtab = dbx_psymtab_to_symtab;
9342ecb9
JG
1291 SYMBOL_SIZE(result) = symbol_size;
1292 SYMBOL_OFFSET(result) = symbol_table_offset;
1293 STRING_OFFSET(result) = string_table_offset;
1294 FILE_STRING_OFFSET(result) = file_string_table_offset;
bd5635a1 1295
2af231b8
JG
1296 /* If we're handling an ELF file, drag some section-relocation info
1297 for this source file out of the ELF symbol table, to compensate for
1298 Sun brain death. This replaces the section_offsets in this psymtab,
1299 if successful. */
1300 elfstab_offset_sections (objfile, result);
1301
2e4964ad
FF
1302 /* Deduce the source language from the filename for this psymtab. */
1303 psymtab_language = deduce_language_from_filename (filename);
1304
bd5635a1
RP
1305 return result;
1306}
1307
cbba020f
PS
1308/* Close off the current usage of PST.
1309 Returns PST or NULL if the partial symtab was empty and thrown away.
bd5635a1 1310
cbba020f 1311 FIXME: List variables and peculiarities of same. */
bd5635a1 1312
cbba020f 1313struct partial_symtab *
bd5635a1 1314end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
7e258d18 1315 capping_text, dependency_list, number_dependencies)
bd5635a1
RP
1316 struct partial_symtab *pst;
1317 char **include_list;
1318 int num_includes;
1319 int capping_symbol_offset;
1320 CORE_ADDR capping_text;
1321 struct partial_symtab **dependency_list;
1322 int number_dependencies;
bd5635a1
RP
1323{
1324 int i;
021959e2 1325 struct objfile *objfile = pst -> objfile;
bd5635a1 1326
7e258d18
PB
1327 if (capping_symbol_offset != -1)
1328 LDSYMLEN(pst) = capping_symbol_offset - LDSYMOFF(pst);
bd5635a1
RP
1329 pst->texthigh = capping_text;
1330
b9e58503 1331#ifdef SOFUN_ADDRESS_MAYBE_MISSING
9342ecb9
JG
1332 /* Under Solaris, the N_SO symbols always have a value of 0,
1333 instead of the usual address of the .o file. Therefore,
1334 we have to do some tricks to fill in texthigh and textlow.
1335 The first trick is in partial-stab.h: if we see a static
1336 or global function, and the textlow for the current pst
1337 is still 0, then we use that function's address for
b9e58503 1338 the textlow of the pst. */
9342ecb9 1339
b9e58503 1340 /* Now, to fill in texthigh, we remember the last function seen
9342ecb9
JG
1341 in the .o file (also in partial-stab.h). Also, there's a hack in
1342 bfd/elf.c and gdb/elfread.c to pass the ELF st_size field
1343 to here via the misc_info field. Therefore, we can fill in
1344 a reliable texthigh by taking the address plus size of the
b9e58503 1345 last function in the file. */
9342ecb9 1346
bcbf9559 1347 if (pst->texthigh == 0 && last_function_name) {
9342ecb9
JG
1348 char *p;
1349 int n;
1350 struct minimal_symbol *minsym;
1351
1352 p = strchr (last_function_name, ':');
1353 if (p == NULL)
1354 p = last_function_name;
1355 n = p - last_function_name;
1356 p = alloca (n + 1);
1357 strncpy (p, last_function_name, n);
1358 p[n] = 0;
1359
b9e58503 1360 minsym = lookup_minimal_symbol (p, pst->filename, objfile);
9342ecb9 1361
b9e58503 1362 if (minsym)
2e4964ad 1363 pst->texthigh = SYMBOL_VALUE_ADDRESS (minsym) +
5573d7d4 1364 (long) MSYMBOL_INFO (minsym);
b9e58503 1365
9342ecb9
JG
1366 last_function_name = NULL;
1367 }
1368
1369 /* this test will be true if the last .o file is only data */
1370 if (pst->textlow == 0)
6545c6a0
JK
1371 /* This loses if the text section really starts at address zero
1372 (generally true when we are debugging a .o file, for example).
b9e58503 1373 That is why this whole thing is inside SOFUN_ADDRESS_MAYBE_MISSING. */
9342ecb9
JG
1374 pst->textlow = pst->texthigh;
1375
bcbf9559
JG
1376 /* If we know our own starting text address, then walk through all other
1377 psymtabs for this objfile, and if any didn't know their ending text
1378 address, set it to our starting address. Take care to not set our
1379 own ending address to our starting address, nor to set addresses on
1380 `dependency' files that have both textlow and texthigh zero. */
9342ecb9 1381 if (pst->textlow) {
bfe2f12b
JL
1382 struct partial_symtab *p1;
1383
9342ecb9 1384 ALL_OBJFILE_PSYMTABS (objfile, p1) {
bcbf9559 1385 if (p1->texthigh == 0 && p1->textlow != 0 && p1 != pst) {
9342ecb9
JG
1386 p1->texthigh = pst->textlow;
1387 /* if this file has only data, then make textlow match texthigh */
1388 if (p1->textlow == 0)
1389 p1->textlow = p1->texthigh;
1390 }
1391 }
1392 }
1393
1394 /* End of kludge for patching Solaris textlow and texthigh. */
b9e58503 1395#endif /* SOFUN_ADDRESS_MAYBE_MISSING. */
9342ecb9 1396
bd5635a1 1397 pst->n_global_syms =
021959e2 1398 objfile->global_psymbols.next - (objfile->global_psymbols.list + pst->globals_offset);
bd5635a1 1399 pst->n_static_syms =
021959e2 1400 objfile->static_psymbols.next - (objfile->static_psymbols.list + pst->statics_offset);
bd5635a1
RP
1401
1402 pst->number_of_dependencies = number_dependencies;
1403 if (number_dependencies)
1404 {
1405 pst->dependencies = (struct partial_symtab **)
021959e2 1406 obstack_alloc (&objfile->psymbol_obstack,
bd5635a1 1407 number_dependencies * sizeof (struct partial_symtab *));
7e258d18 1408 memcpy (pst->dependencies, dependency_list,
bd5635a1
RP
1409 number_dependencies * sizeof (struct partial_symtab *));
1410 }
1411 else
1412 pst->dependencies = 0;
1413
1414 for (i = 0; i < num_includes; i++)
1415 {
bd5635a1 1416 struct partial_symtab *subpst =
021959e2 1417 allocate_psymtab (include_list[i], objfile);
7d9884b9 1418
2af231b8 1419 subpst->section_offsets = pst->section_offsets;
021959e2
JG
1420 subpst->read_symtab_private =
1421 (char *) obstack_alloc (&objfile->psymbol_obstack,
1422 sizeof (struct symloc));
4a35d6e9
FF
1423 LDSYMOFF(subpst) =
1424 LDSYMLEN(subpst) =
bd5635a1
RP
1425 subpst->textlow =
1426 subpst->texthigh = 0;
1427
3f83182d
JG
1428 /* We could save slight bits of space by only making one of these,
1429 shared by the entire set of include files. FIXME-someday. */
bd5635a1 1430 subpst->dependencies = (struct partial_symtab **)
021959e2 1431 obstack_alloc (&objfile->psymbol_obstack,
bd5635a1
RP
1432 sizeof (struct partial_symtab *));
1433 subpst->dependencies[0] = pst;
1434 subpst->number_of_dependencies = 1;
1435
1436 subpst->globals_offset =
1437 subpst->n_global_syms =
1438 subpst->statics_offset =
1439 subpst->n_static_syms = 0;
1440
1441 subpst->readin = 0;
9a822037 1442 subpst->symtab = 0;
2707b48a 1443 subpst->read_symtab = pst->read_symtab;
bd5635a1
RP
1444 }
1445
021959e2 1446 sort_pst_symbols (pst);
bd5635a1 1447
f9623881
JG
1448 /* If there is already a psymtab or symtab for a file of this name, remove it.
1449 (If there is a symtab, more drastic things also happen.)
1450 This happens in VxWorks. */
1451 free_named_symtabs (pst->filename);
1452
7d9884b9 1453 if (num_includes == 0
5801f348
JK
1454 && number_dependencies == 0
1455 && pst->n_global_syms == 0
1456 && pst->n_static_syms == 0)
1457 {
1458 /* Throw away this psymtab, it's empty. We can't deallocate it, since
1459 it is on the obstack, but we can forget to chain it on the list. */
1460 /* Empty psymtabs happen as a result of header files which don't have
1461 any symbols in them. There can be a lot of them. But this check
1462 is wrong, in that a psymtab with N_SLINE entries but nothing else
1463 is not empty, but we don't realize that. Fixing that without slowing
1464 things down might be tricky. */
1465 struct partial_symtab *prev_pst;
1466
1467 /* First, snip it out of the psymtab chain */
1468
1469 if (pst->objfile->psymtabs == pst)
1470 pst->objfile->psymtabs = pst->next;
1471 else
1472 for (prev_pst = pst->objfile->psymtabs; prev_pst; prev_pst = pst->next)
1473 if (prev_pst->next == pst)
1474 prev_pst->next = pst->next;
318bf84f 1475
5801f348 1476 /* Next, put it on a free list for recycling */
318bf84f 1477
5801f348
JK
1478 pst->next = pst->objfile->free_psymtabs;
1479 pst->objfile->free_psymtabs = pst;
cbba020f 1480
5801f348
JK
1481 /* Indicate that psymtab was thrown away. */
1482 pst = (struct partial_symtab *)NULL;
1483 }
cbba020f 1484 return pst;
bd5635a1
RP
1485}
1486\f
1487static void
4c07f28d 1488dbx_psymtab_to_symtab_1 (pst)
bd5635a1 1489 struct partial_symtab *pst;
bd5635a1
RP
1490{
1491 struct cleanup *old_chain;
1492 int i;
1493
1494 if (!pst)
1495 return;
1496
1497 if (pst->readin)
1498 {
199b2450 1499 fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
bd5635a1
RP
1500 pst->filename);
1501 return;
1502 }
1503
afe4ca15 1504 /* Read in all partial symtabs on which this one is dependent */
bd5635a1
RP
1505 for (i = 0; i < pst->number_of_dependencies; i++)
1506 if (!pst->dependencies[i]->readin)
1507 {
1508 /* Inform about additional files that need to be read in. */
1509 if (info_verbose)
1510 {
199b2450 1511 fputs_filtered (" ", gdb_stdout);
bd5635a1 1512 wrap_here ("");
199b2450 1513 fputs_filtered ("and ", gdb_stdout);
bd5635a1
RP
1514 wrap_here ("");
1515 printf_filtered ("%s...", pst->dependencies[i]->filename);
1516 wrap_here (""); /* Flush output */
199b2450 1517 gdb_flush (gdb_stdout);
bd5635a1 1518 }
4c07f28d 1519 dbx_psymtab_to_symtab_1 (pst->dependencies[i]);
bd5635a1
RP
1520 }
1521
4a35d6e9 1522 if (LDSYMLEN(pst)) /* Otherwise it's a dummy */
bd5635a1
RP
1523 {
1524 /* Init stuff necessary for reading in symbols */
3416d90b 1525 stabsread_init ();
c0302457 1526 buildsym_init ();
bd5635a1 1527 old_chain = make_cleanup (really_free_pendings, 0);
9342ecb9 1528 file_string_table_offset = FILE_STRING_OFFSET (pst);
4c07f28d
FF
1529 symbol_size = SYMBOL_SIZE (pst);
1530
1531 /* Read in this file's symbols */
2c7ab4ca 1532 bfd_seek (pst->objfile->obfd, SYMBOL_OFFSET (pst), SEEK_SET);
574dac8e 1533 read_ofile_symtab (pst);
9404978d 1534 sort_symtab_syms (pst->symtab);
bd5635a1
RP
1535
1536 do_cleanups (old_chain);
1537 }
1538
1539 pst->readin = 1;
1540}
1541
ac88ca20
JG
1542/* Read in all of the symbols for a given psymtab for real.
1543 Be verbose about it if the user wants that. */
1544
bd5635a1
RP
1545static void
1546dbx_psymtab_to_symtab (pst)
1547 struct partial_symtab *pst;
1548{
bd5635a1 1549 bfd *sym_bfd;
bd5635a1
RP
1550
1551 if (!pst)
1552 return;
1553
1554 if (pst->readin)
1555 {
199b2450 1556 fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
bd5635a1
RP
1557 pst->filename);
1558 return;
1559 }
1560
4a35d6e9 1561 if (LDSYMLEN(pst) || pst->number_of_dependencies)
bd5635a1
RP
1562 {
1563 /* Print the message now, before reading the string table,
1564 to avoid disconcerting pauses. */
1565 if (info_verbose)
1566 {
1567 printf_filtered ("Reading in symbols for %s...", pst->filename);
199b2450 1568 gdb_flush (gdb_stdout);
bd5635a1
RP
1569 }
1570
7d9884b9 1571 sym_bfd = pst->objfile->obfd;
bd5635a1 1572
aab77d5f
PB
1573 next_symbol_text_func = dbx_next_symbol_text;
1574
4c07f28d 1575 dbx_psymtab_to_symtab_1 (pst);
bd5635a1
RP
1576
1577 /* Match with global symbols. This only needs to be done once,
1578 after all of the symtabs and dependencies have been read in. */
021959e2 1579 scan_file_globals (pst->objfile);
bd5635a1 1580
bd5635a1
RP
1581 /* Finish up the debug error message. */
1582 if (info_verbose)
1583 printf_filtered ("done.\n");
1584 }
1585}
1586
574dac8e 1587/* Read in a defined section of a specific object file's symbols. */
9342ecb9 1588
574dac8e
JK
1589static void
1590read_ofile_symtab (pst)
1591 struct partial_symtab *pst;
bd5635a1
RP
1592{
1593 register char *namestring;
7d9884b9 1594 register struct internal_nlist *bufp;
bd5635a1 1595 unsigned char type;
afe4ca15 1596 unsigned max_symnum;
7d9884b9 1597 register bfd *abfd;
574dac8e
JK
1598 struct objfile *objfile;
1599 int sym_offset; /* Offset to start of symbols to read */
1600 int sym_size; /* Size of symbols to read */
1601 CORE_ADDR text_offset; /* Start of text segment for symbols */
1602 int text_size; /* Size of text segment for symbols */
1603 struct section_offsets *section_offsets;
1604
1605 objfile = pst->objfile;
1606 sym_offset = LDSYMOFF(pst);
1607 sym_size = LDSYMLEN(pst);
1608 text_offset = pst->textlow;
1609 text_size = pst->texthigh - pst->textlow;
1610 section_offsets = pst->section_offsets;
7d9884b9 1611
021959e2 1612 current_objfile = objfile;
3416d90b 1613 subfile_stack = NULL;
bd5635a1 1614
3624c875 1615 stringtab_global = DBX_STRINGTAB (objfile);
3416d90b 1616 last_source_file = NULL;
bd5635a1 1617
7d9884b9
JG
1618 abfd = objfile->obfd;
1619 symfile_bfd = objfile->obfd; /* Implicit param to next_text_symbol */
bd5635a1
RP
1620 symbuf_end = symbuf_idx = 0;
1621
1622 /* It is necessary to actually read one symbol *before* the start
1623 of this symtab's symbols, because the GCC_COMPILED_FLAG_SYMBOL
1624 occurs before the N_SO symbol.
1625
1626 Detecting this in read_dbx_symtab
1627 would slow down initial readin, so we look for it here instead. */
9342ecb9 1628 if (!processing_acc_compilation && sym_offset >= (int)symbol_size)
bd5635a1 1629 {
2c7ab4ca 1630 bfd_seek (symfile_bfd, sym_offset - symbol_size, SEEK_CUR);
7d9884b9 1631 fill_symbuf (abfd);
bd5635a1 1632 bufp = &symbuf[symbuf_idx++];
7d9884b9 1633 SWAP_SYMBOL (bufp, abfd);
94f5a25f 1634 OBJSTAT (objfile, n_stabs++);
bd5635a1 1635
afe4ca15 1636 SET_NAMESTRING ();
bd5635a1 1637
1aed6766
SG
1638 processing_gcc_compilation = 0;
1639 if (bufp->n_type == N_TEXT)
1640 {
db2302cb
PS
1641 const char *tempstring = namestring;
1642
2e4964ad 1643 if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1aed6766 1644 processing_gcc_compilation = 1;
2e4964ad 1645 else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1aed6766 1646 processing_gcc_compilation = 2;
db2302cb
PS
1647 if (tempstring[0] == bfd_get_symbol_leading_char (symfile_bfd))
1648 ++tempstring;
1649 if (STREQN (tempstring, "__gnu_compiled", 14))
1650 processing_gcc_compilation = 2;
1aed6766 1651 }
3416d90b
FF
1652
1653 /* Try to select a C++ demangling based on the compilation unit
1654 producer. */
1655
1656 if (processing_gcc_compilation)
1657 {
1aed6766 1658 if (AUTO_DEMANGLING)
3416d90b
FF
1659 {
1660 set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1661 }
3416d90b 1662 }
bd5635a1
RP
1663 }
1664 else
1665 {
1666 /* The N_SO starting this symtab is the first symbol, so we
1667 better not check the symbol before it. I'm not this can
1668 happen, but it doesn't hurt to check for it. */
2c7ab4ca 1669 bfd_seek (symfile_bfd, sym_offset, SEEK_CUR);
bd5635a1
RP
1670 processing_gcc_compilation = 0;
1671 }
1672
1673 if (symbuf_idx == symbuf_end)
7d9884b9 1674 fill_symbuf (abfd);
bd5635a1
RP
1675 bufp = &symbuf[symbuf_idx];
1676 if (bufp->n_type != (unsigned char)N_SO)
1677 error("First symbol in segment of executable not a source symbol");
1678
afe4ca15
JG
1679 max_symnum = sym_size / symbol_size;
1680
bd5635a1 1681 for (symnum = 0;
afe4ca15 1682 symnum < max_symnum;
bd5635a1
RP
1683 symnum++)
1684 {
1685 QUIT; /* Allow this to be interruptable */
1686 if (symbuf_idx == symbuf_end)
7d9884b9 1687 fill_symbuf(abfd);
bd5635a1 1688 bufp = &symbuf[symbuf_idx++];
7d9884b9 1689 SWAP_SYMBOL (bufp, abfd);
94f5a25f 1690 OBJSTAT (objfile, n_stabs++);
bd5635a1 1691
c0302457 1692 type = bufp->n_type;
bd5635a1 1693
afe4ca15 1694 SET_NAMESTRING ();
bd5635a1 1695
7d9884b9 1696 if (type & N_STAB) {
c55e6167 1697 process_one_symbol (type, bufp->n_desc, bufp->n_value,
2af231b8 1698 namestring, section_offsets, objfile);
7d9884b9 1699 }
bd5635a1
RP
1700 /* We skip checking for a new .o or -l file; that should never
1701 happen in this routine. */
1aed6766 1702 else if (type == N_TEXT)
3416d90b
FF
1703 {
1704 /* I don't think this code will ever be executed, because
1705 the GCC_COMPILED_FLAG_SYMBOL usually is right before
1706 the N_SO symbol which starts this source file.
1707 However, there is no reason not to accept
1708 the GCC_COMPILED_FLAG_SYMBOL anywhere. */
1aed6766 1709
2e4964ad 1710 if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1aed6766 1711 processing_gcc_compilation = 1;
2e4964ad 1712 else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1aed6766
SG
1713 processing_gcc_compilation = 2;
1714
1aed6766 1715 if (AUTO_DEMANGLING)
3416d90b
FF
1716 {
1717 set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1718 }
3416d90b 1719 }
bd5635a1
RP
1720 else if (type & N_EXT || type == (unsigned char)N_TEXT
1721 || type == (unsigned char)N_NBTEXT
0c4d2cc2 1722 ) {
bd5635a1
RP
1723 /* Global symbol: see if we came across a dbx defintion for
1724 a corresponding symbol. If so, store the value. Remove
1725 syms from the chain when their values are stored, but
1726 search the whole chain, as there may be several syms from
1727 different files with the same name. */
1728 /* This is probably not true. Since the files will be read
1729 in one at a time, each reference to a global symbol will
1730 be satisfied in each file as it appears. So we skip this
1731 section. */
1732 ;
0c4d2cc2 1733 }
bd5635a1 1734 }
9404978d 1735
021959e2 1736 current_objfile = NULL;
9342ecb9
JG
1737
1738 /* In a Solaris elf file, this variable, which comes from the
1739 value of the N_SO symbol, will still be 0. Luckily, text_offset,
1740 which comes from pst->textlow is correct. */
1741 if (last_source_start_addr == 0)
1742 last_source_start_addr = text_offset;
1743
94f5a25f
DP
1744 /* In reordered executables last_source_start_addr may not be the
1745 lower bound for this symtab, instead use text_offset which comes
1746 from pst->textlow which is correct. */
1747 if (last_source_start_addr > text_offset)
1748 last_source_start_addr = text_offset;
1749
1750 pst->symtab = end_symtab (text_offset + text_size, objfile, SECT_OFF_TEXT);
1751
1752 if (ARM_DEMANGLING) /* process incomplete C++ types now */
1753 process_now(objfile);
1754
3416d90b 1755 end_stabs ();
bd5635a1 1756}
574dac8e 1757
bd5635a1 1758\f
c55e6167
JG
1759/* This handles a single symbol from the symbol-file, building symbols
1760 into a GDB symtab. It takes these arguments and an implicit argument.
1761
1762 TYPE is the type field of the ".stab" symbol entry.
1763 DESC is the desc field of the ".stab" entry.
1764 VALU is the value field of the ".stab" entry.
1765 NAME is the symbol name, in our address space.
2af231b8
JG
1766 SECTION_OFFSETS is a set of amounts by which the sections of this object
1767 file were relocated when it was loaded into memory.
1768 All symbols that refer
1769 to memory locations need to be offset by these amounts.
9342ecb9 1770 OBJFILE is the object file from which we are reading symbols.
c55e6167
JG
1771 It is used in end_symtab. */
1772
7e258d18 1773void
2af231b8 1774process_one_symbol (type, desc, valu, name, section_offsets, objfile)
bd5635a1
RP
1775 int type, desc;
1776 CORE_ADDR valu;
1777 char *name;
2af231b8 1778 struct section_offsets *section_offsets;
9342ecb9 1779 struct objfile *objfile;
bd5635a1 1780{
a5e6391b
JK
1781#ifdef SUN_FIXED_LBRAC_BUG
1782 /* If SUN_FIXED_LBRAC_BUG is defined, then it tells us whether we need
1783 to correct the address of N_LBRAC's. If it is not defined, then
1784 we never need to correct the addresses. */
1785
0cf9329b 1786 /* This records the last pc address we've seen. We depend on there being
bd5635a1
RP
1787 an SLINE or FUN or SO before the first LBRAC, since the variable does
1788 not get reset in between reads of different symbol files. */
1789 static CORE_ADDR last_pc_address;
a5e6391b 1790#endif
8357834f 1791
bd5635a1 1792 register struct context_stack *new;
9342ecb9
JG
1793 /* This remembers the address of the start of a function. It is used
1794 because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries are
1795 relative to the current function's start address. On systems
2af231b8
JG
1796 other than Solaris 2, this just holds the SECT_OFF_TEXT value, and is
1797 used to relocate these symbol types rather than SECTION_OFFSETS. */
9342ecb9 1798 static CORE_ADDR function_start_offset;
bd5635a1 1799
8357834f 1800 /* If this is nonzero, we've seen a non-gcc N_OPT symbol for this source
b8ec9a79 1801 file. Used to detect the SunPRO solaris compiler. */
4d57c599 1802 static int n_opt_found;
8357834f 1803
b8ec9a79
JK
1804 /* The stab type used for the definition of the last function.
1805 N_STSYM or N_GSYM for SunOS4 acc; N_FUN for other compilers. */
1806 static int function_stab_type = 0;
1807
574dac8e
JK
1808 if (!block_address_function_relative)
1809 /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
1810 function start address, so just use the text offset. */
1811 function_start_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT);
51b80b00 1812
bd5635a1
RP
1813 /* Something is wrong if we see real data before
1814 seeing a source file name. */
1815
3416d90b 1816 if (last_source_file == NULL && type != (unsigned char)N_SO)
bd5635a1 1817 {
a5e6391b
JK
1818 /* Ignore any symbols which appear before an N_SO symbol. Currently
1819 no one puts symbols there, but we should deal gracefully with the
1820 case. A complain()t might be in order (if !IGNORE_SYMBOL (type)),
1821 but this should not be an error (). */
1822 return;
bd5635a1
RP
1823 }
1824
1825 switch (type)
1826 {
1827 case N_FUN:
1828 case N_FNAME:
94f5a25f
DP
1829
1830 if (! strcmp (name, ""))
1831 {
1832 /* This N_FUN marks the end of a function. This closes off the
1833 current block. */
1834 within_function = 0;
1835 new = pop_context ();
1836
1837 /* Make a block for the local symbols within. */
1838 finish_block (new->name, &local_symbols, new->old_blocks,
1839 function_start_offset, function_start_offset + valu,
1840 objfile);
1841 break;
1842 }
1843
2af231b8
JG
1844 /* Relocate for dynamic loading */
1845 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
b8ec9a79 1846 goto define_a_symbol;
bd5635a1 1847
bd5635a1
RP
1848 case N_LBRAC:
1849 /* This "symbol" just indicates the start of an inner lexical
1850 context within a function. */
1851
b9e58503
PS
1852 /* Ignore extra outermost context from SunPRO cc and acc. */
1853 if (n_opt_found && desc == 1)
1854 break;
1855
574dac8e
JK
1856#if defined(BLOCK_ADDRESS_ABSOLUTE)
1857 /* Relocate for dynamic loading (?). */
9342ecb9 1858 valu += function_start_offset;
c55e6167 1859#else
574dac8e
JK
1860 if (block_address_function_relative)
1861 /* Relocate for Sun ELF acc fn-relative syms. */
1862 valu += function_start_offset;
1863 else
1864 /* On most machines, the block addresses are relative to the
1865 N_SO, the linker did not relocate them (sigh). */
1866 valu += last_source_start_addr;
bd5635a1
RP
1867#endif
1868
a5e6391b 1869#ifdef SUN_FIXED_LBRAC_BUG
8357834f 1870 if (!SUN_FIXED_LBRAC_BUG && valu < last_pc_address) {
bd5635a1 1871 /* Patch current LBRAC pc value to match last handy pc value */
51b80b00 1872 complain (&lbrac_complaint);
bd5635a1
RP
1873 valu = last_pc_address;
1874 }
a5e6391b 1875#endif
7d9884b9 1876 new = push_context (desc, valu);
bd5635a1
RP
1877 break;
1878
1879 case N_RBRAC:
1880 /* This "symbol" just indicates the end of an inner lexical
1881 context that was started with N_LBRAC. */
1882
b9e58503
PS
1883 /* Ignore extra outermost context from SunPRO cc and acc. */
1884 if (n_opt_found && desc == 1)
1885 break;
1886
574dac8e
JK
1887#if defined(BLOCK_ADDRESS_ABSOLUTE)
1888 /* Relocate for dynamic loading (?). */
9342ecb9 1889 valu += function_start_offset;
c55e6167 1890#else
574dac8e
JK
1891 if (block_address_function_relative)
1892 /* Relocate for Sun ELF acc fn-relative syms. */
1893 valu += function_start_offset;
1894 else
1895 /* On most machines, the block addresses are relative to the
1896 N_SO, the linker did not relocate them (sigh). */
1897 valu += last_source_start_addr;
bd5635a1
RP
1898#endif
1899
7d9884b9 1900 new = pop_context();
bd5635a1 1901 if (desc != new->depth)
51b80b00 1902 complain (&lbrac_mismatch_complaint, symnum);
bd5635a1
RP
1903
1904 /* Some compilers put the variable decls inside of an
1905 LBRAC/RBRAC block. This macro should be nonzero if this
1906 is true. DESC is N_DESC from the N_RBRAC symbol.
0cf9329b
PB
1907 GCC_P is true if we've detected the GCC_COMPILED_SYMBOL
1908 or the GCC2_COMPILED_SYMBOL. */
bd5635a1
RP
1909#if !defined (VARIABLES_INSIDE_BLOCK)
1910#define VARIABLES_INSIDE_BLOCK(desc, gcc_p) 0
1911#endif
1912
1913 /* Can only use new->locals as local symbols here if we're in
1914 gcc or on a machine that puts them before the lbrack. */
1915 if (!VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1916 local_symbols = new->locals;
1917
2f8c3639
JL
1918 if (context_stack_depth
1919 > !VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
bd5635a1 1920 {
2f8c3639
JL
1921 /* This is not the outermost LBRAC...RBRAC pair in the function,
1922 its local symbols preceded it, and are the ones just recovered
1923 from the context stack. Define the block for them (but don't
1924 bother if the block contains no symbols. Should we complain
1925 on blocks without symbols? I can't think of any useful purpose
1926 for them). */
1927 if (local_symbols != NULL)
bd5635a1 1928 {
2f8c3639
JL
1929 /* Muzzle a compiler bug that makes end < start. (which
1930 compilers? Is this ever harmful?). */
1931 if (new->start_addr > valu)
1932 {
1933 complain (&lbrac_rbrac_complaint);
1934 new->start_addr = valu;
1935 }
1936 /* Make a block for the local symbols within. */
1937 finish_block (0, &local_symbols, new->old_blocks,
1938 new->start_addr, valu, objfile);
bd5635a1 1939 }
bd5635a1
RP
1940 }
1941 else
1942 {
2f8c3639
JL
1943 /* This is the outermost LBRAC...RBRAC pair. There is no
1944 need to do anything; leave the symbols that preceded it
1945 to be attached to the function's own block. We need to
1946 indicate that we just moved outside of the function. */
bd5635a1
RP
1947 within_function = 0;
1948 }
2f8c3639 1949
bd5635a1
RP
1950 if (VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1951 /* Now pop locals of block just finished. */
1952 local_symbols = new->locals;
1953 break;
1954
9bb30452 1955 case N_FN:
6150cc73 1956 case N_FN_SEQ:
9bb30452 1957 /* This kind of symbol indicates the start of an object file. */
2af231b8
JG
1958 /* Relocate for dynamic loading */
1959 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
bd5635a1
RP
1960 break;
1961
1962 case N_SO:
1963 /* This type of symbol indicates the start of data
1964 for one source file.
1965 Finish the symbol table of the previous source file
1966 (if any) and start accumulating a new symbol table. */
2af231b8
JG
1967 /* Relocate for dynamic loading */
1968 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
c55e6167 1969
8357834f
JK
1970 n_opt_found = 0;
1971
a5e6391b 1972#ifdef SUN_FIXED_LBRAC_BUG
bd5635a1 1973 last_pc_address = valu; /* Save for SunOS bug circumcision */
a5e6391b 1974#endif
8357834f 1975
bd5635a1
RP
1976#ifdef PCC_SOL_BROKEN
1977 /* pcc bug, occasionally puts out SO for SOL. */
1978 if (context_stack_depth > 0)
1979 {
1980 start_subfile (name, NULL);
1981 break;
1982 }
1983#endif
1984 if (last_source_file)
7e258d18
PB
1985 {
1986 /* Check if previous symbol was also an N_SO (with some
1987 sanity checks). If so, that one was actually the directory
1988 name, and the current one is the real file name.
1989 Patch things up. */
6985bc54 1990 if (previous_stab_code == (unsigned char) N_SO)
7e258d18 1991 {
3416d90b 1992 patch_subfile_names (current_subfile, name);
c72af089 1993 break; /* Ignore repeated SOs */
7e258d18 1994 }
94f5a25f 1995 end_symtab (valu, objfile, SECT_OFF_TEXT);
3416d90b 1996 end_stabs ();
7e258d18 1997 }
320f93f7
SG
1998
1999 /* Null name means this just marks the end of text for this .o file.
2000 Don't start a new symtab in this case. */
2001 if (*name == '\000')
2002 break;
2003
3416d90b 2004 start_stabs ();
bd5635a1
RP
2005 start_symtab (name, NULL, valu);
2006 break;
2007
2008 case N_SOL:
2009 /* This type of symbol indicates the start of data for
2010 a sub-source-file, one whose contents were copied or
2011 included in the compilation of the main source file
2012 (whose name was given in the N_SO symbol.) */
2af231b8
JG
2013 /* Relocate for dynamic loading */
2014 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
784fd92b 2015 start_subfile (name, current_subfile->dirname);
bd5635a1
RP
2016 break;
2017
2018 case N_BINCL:
2019 push_subfile ();
2020 add_new_header_file (name, valu);
784fd92b 2021 start_subfile (name, current_subfile->dirname);
bd5635a1
RP
2022 break;
2023
2024 case N_EINCL:
784fd92b 2025 start_subfile (pop_subfile (), current_subfile->dirname);
bd5635a1
RP
2026 break;
2027
2028 case N_EXCL:
2029 add_old_header_file (name, valu);
2030 break;
2031
2032 case N_SLINE:
2033 /* This type of "symbol" really just records
2034 one line-number -- core-address correspondence.
2035 Enter it in the line list for this symbol table. */
9342ecb9
JG
2036 /* Relocate for dynamic loading and for ELF acc fn-relative syms. */
2037 valu += function_start_offset;
a5e6391b 2038#ifdef SUN_FIXED_LBRAC_BUG
bd5635a1 2039 last_pc_address = valu; /* Save for SunOS bug circumcision */
a5e6391b 2040#endif
4137c5fc 2041 record_line (current_subfile, desc, valu);
bd5635a1
RP
2042 break;
2043
2044 case N_BCOMM:
4d57c599 2045 common_block_start (name, objfile);
bd5635a1
RP
2046 break;
2047
2048 case N_ECOMM:
4d57c599
JK
2049 common_block_end (objfile);
2050 break;
bd5635a1 2051
2af231b8
JG
2052 /* The following symbol types need to have the appropriate offset added
2053 to their value; then we process symbol definitions in the name. */
2054
2055 case N_STSYM: /* Static symbol in data seg */
2056 case N_LCSYM: /* Static symbol in BSS seg */
2057 case N_ROSYM: /* Static symbol in Read-only data seg */
4d57c599
JK
2058 /* HORRID HACK DEPT. However, it's Sun's furgin' fault.
2059 Solaris2's stabs-in-elf makes *most* symbols relative
2060 but leaves a few absolute (at least for Solaris 2.1 and version
2061 2.0.1 of the SunPRO compiler). N_STSYM and friends sit on the fence.
2af231b8
JG
2062 .stab "foo:S...",N_STSYM is absolute (ld relocates it)
2063 .stab "foo:V...",N_STSYM is relative (section base subtracted).
2064 This leaves us no choice but to search for the 'S' or 'V'...
2065 (or pass the whole section_offsets stuff down ONE MORE function
4d57c599 2066 call level, which we really don't want to do). */
2af231b8
JG
2067 {
2068 char *p;
a66e8382
SG
2069
2070 /* .o files and NLMs have non-zero text seg offsets, but don't need
2071 their static syms offset in this fashion. XXX - This is really a
2072 crock that should be fixed in the solib handling code so that I
2073 don't have to work around it here. */
2074
2075 if (!symfile_relocatable)
2af231b8 2076 {
a66e8382
SG
2077 p = strchr (name, ':');
2078 if (p != 0 && p[1] == 'S')
2079 {
2080 /* The linker relocated it. We don't want to add an
2081 elfstab_offset_sections-type offset, but we *do* want
2082 to add whatever solib.c passed to symbol_file_add as
2083 addr (this is known to affect SunOS4, and I suspect ELF
2084 too). Since elfstab_offset_sections currently does not
2085 muck with the text offset (there is no Ttext.text
2086 symbol), we can get addr from the text offset. If
2087 elfstab_offset_sections ever starts dealing with the
2088 text offset, and we still need to do this, we need to
2089 invent a SECT_OFF_ADDR_KLUDGE or something. */
2090 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2091 goto define_a_symbol;
2092 }
2af231b8
JG
2093 }
2094 /* Since it's not the kludge case, re-dispatch to the right handler. */
2095 switch (type) {
2096 case N_STSYM: goto case_N_STSYM;
2097 case N_LCSYM: goto case_N_LCSYM;
2098 case N_ROSYM: goto case_N_ROSYM;
2099 default: abort();
2100 }
2101 }
2102
2103 case_N_STSYM: /* Static symbol in data seg */
c55e6167 2104 case N_DSLINE: /* Source line number, data seg */
2af231b8
JG
2105 valu += ANOFFSET (section_offsets, SECT_OFF_DATA);
2106 goto define_a_symbol;
2107
2108 case_N_LCSYM: /* Static symbol in BSS seg */
c55e6167
JG
2109 case N_BSLINE: /* Source line number, bss seg */
2110 /* N_BROWS: overlaps with N_BSLINE */
2af231b8
JG
2111 valu += ANOFFSET (section_offsets, SECT_OFF_BSS);
2112 goto define_a_symbol;
2113
2114 case_N_ROSYM: /* Static symbol in Read-only data seg */
2115 valu += ANOFFSET (section_offsets, SECT_OFF_RODATA);
2116 goto define_a_symbol;
2117
c55e6167 2118 case N_ENTRY: /* Alternate entry point */
2af231b8
JG
2119 /* Relocate for dynamic loading */
2120 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2121 goto define_a_symbol;
c55e6167 2122
4f470205
JK
2123 /* The following symbol types we don't know how to process. Handle
2124 them in a "default" way, but complain to people who care. */
2125 default:
2126 case N_CATCH: /* Exception handler catcher */
2127 case N_EHDECL: /* Exception handler name */
2128 case N_PC: /* Global symbol in Pascal */
2129 case N_M2C: /* Modula-2 compilation unit */
2130 /* N_MOD2: overlaps with N_EHDECL */
2131 case N_SCOPE: /* Modula-2 scope information */
2132 case N_ECOML: /* End common (local name) */
2133 case N_NBTEXT: /* Gould Non-Base-Register symbols??? */
2134 case N_NBDATA:
2135 case N_NBBSS:
2136 case N_NBSTS:
2137 case N_NBLCS:
9d2b8d50 2138 complain (&unknown_symtype_complaint, local_hex_string (type));
4f470205
JK
2139 /* FALLTHROUGH */
2140
c55e6167
JG
2141 /* The following symbol types don't need the address field relocated,
2142 since it is either unused, or is absolute. */
2af231b8 2143 define_a_symbol:
c55e6167
JG
2144 case N_GSYM: /* Global variable */
2145 case N_NSYMS: /* Number of symbols (ultrix) */
2146 case N_NOMAP: /* No map? (ultrix) */
2147 case N_RSYM: /* Register variable */
2148 case N_DEFD: /* Modula-2 GNU module dependency */
2149 case N_SSYM: /* Struct or union element */
2150 case N_LSYM: /* Local symbol in stack */
2151 case N_PSYM: /* Parameter variable */
2152 case N_LENG: /* Length of preceding symbol type */
2153 if (name)
4f470205 2154 {
b8ec9a79
JK
2155 int deftype;
2156 char *colon_pos = strchr (name, ':');
2157 if (colon_pos == NULL)
2158 deftype = '\0';
2159 else
2160 deftype = colon_pos[1];
2161
2162 switch (deftype)
4f470205 2163 {
b8ec9a79
JK
2164 case 'f':
2165 case 'F':
2166 function_stab_type = type;
2167
b9e58503
PS
2168#ifdef SOFUN_ADDRESS_MAYBE_MISSING
2169 /* Deal with the SunPRO 3.0 compiler which omits the address
2170 from N_FUN symbols. */
989d9cba
JK
2171 if (type == N_FUN
2172 && valu == ANOFFSET (section_offsets, SECT_OFF_TEXT))
b9e58503
PS
2173 {
2174 struct minimal_symbol *msym;
2175 char *p;
2176 int n;
2177
2178 p = strchr (name, ':');
2179 if (p == NULL)
2180 p = name;
2181 n = p - name;
2182 p = alloca (n + 1);
2183 strncpy (p, name, n);
2184 p[n] = 0;
2185
2186 msym = lookup_minimal_symbol (p, last_source_file,
2187 objfile);
2188 if (msym)
2189 valu = SYMBOL_VALUE_ADDRESS (msym);
2190 }
2191#endif
2192
3ef0fc8c 2193#ifdef SUN_FIXED_LBRAC_BUG
b8ec9a79
JK
2194 /* The Sun acc compiler, under SunOS4, puts out
2195 functions with N_GSYM or N_STSYM. The problem is
2196 that the address of the symbol is no good (for N_GSYM
2197 it doesn't even attept an address; for N_STSYM it
2198 puts out an address but then it gets relocated
2199 relative to the data segment, not the text segment).
2200 Currently we can't fix this up later as we do for
2201 some types of symbol in scan_file_globals.
2202 Fortunately we do have a way of finding the address -
2203 we know that the value in last_pc_address is either
2204 the one we want (if we're dealing with the first
2205 function in an object file), or somewhere in the
2206 previous function. This means that we can use the
2207 minimal symbol table to get the address. */
2208
b9e58503
PS
2209 /* Starting with release 3.0, the Sun acc compiler,
2210 under SunOS4, puts out functions with N_FUN and a value
2211 of zero. This gets relocated to the start of the text
2212 segment of the module, which is no good either.
2213 Under SunOS4 we can deal with this as N_SLINE and N_SO
2214 entries contain valid absolute addresses.
2215 Release 3.0 acc also puts out N_OPT entries, which makes
2216 it possible to discern acc from cc or gcc. */
2217
2218 if (type == N_GSYM || type == N_STSYM
2219 || (type == N_FUN
2220 && n_opt_found && !block_address_function_relative))
b8ec9a79
JK
2221 {
2222 struct minimal_symbol *m;
2223 int l = colon_pos - name;
2224
2225 m = lookup_minimal_symbol_by_pc (last_pc_address);
2b576293
C
2226 if (m && STREQN (SYMBOL_NAME (m), name, l)
2227 && SYMBOL_NAME (m) [l] == '\0')
b8ec9a79
JK
2228 /* last_pc_address was in this function */
2229 valu = SYMBOL_VALUE (m);
94f5a25f
DP
2230 else if (m && SYMBOL_NAME (m+1)
2231 && STREQN (SYMBOL_NAME (m+1), name, l)
2b576293 2232 && SYMBOL_NAME (m+1) [l] == '\0')
3c7d3064
JK
2233 /* last_pc_address was in last function */
2234 valu = SYMBOL_VALUE (m+1);
b8ec9a79 2235 else
3c7d3064
JK
2236 /* Not found - use last_pc_address (for finish_block) */
2237 valu = last_pc_address;
b8ec9a79
JK
2238 }
2239
b8ec9a79
JK
2240 last_pc_address = valu; /* Save for SunOS bug circumcision */
2241#endif
2242
2243 if (block_address_function_relative)
2244 /* For Solaris 2.0 compilers, the block addresses and
2245 N_SLINE's are relative to the start of the
2246 function. On normal systems, and when using gcc on
2247 Solaris 2.0, these addresses are just absolute, or
2248 relative to the N_SO, depending on
2249 BLOCK_ADDRESS_ABSOLUTE. */
2250 function_start_offset = valu;
2251
2252 within_function = 1;
2253 if (context_stack_depth > 0)
2254 {
2255 new = pop_context ();
2256 /* Make a block for the local symbols within. */
2257 finish_block (new->name, &local_symbols, new->old_blocks,
2258 new->start_addr, valu, objfile);
2259 }
2260 /* Stack must be empty now. */
2261 if (context_stack_depth != 0)
2262 complain (&lbrac_unmatched_complaint, symnum);
2263
2264 new = push_context (0, valu);
2265 new->name = define_symbol (valu, name, desc, type, objfile);
2266 break;
2267
2268 default:
2269 define_symbol (valu, name, desc, type, objfile);
2270 break;
4f470205
JK
2271 }
2272 }
bd5635a1
RP
2273 break;
2274
ec8ceca3
JG
2275 /* We use N_OPT to carry the gcc2_compiled flag. Sun uses it
2276 for a bunch of other flags, too. Someday we may parse their
2277 flags; for now we ignore theirs and hope they'll ignore ours. */
2278 case N_OPT: /* Solaris 2: Compiler options */
2279 if (name)
2280 {
2e4964ad 2281 if (STREQ (name, GCC2_COMPILED_FLAG_SYMBOL))
3416d90b 2282 {
1aed6766 2283 processing_gcc_compilation = 2;
3416d90b 2284#if 1 /* Works, but is experimental. -fnf */
1aed6766 2285 if (AUTO_DEMANGLING)
3416d90b
FF
2286 {
2287 set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
2288 }
2289#endif
2290 }
8357834f
JK
2291 else
2292 n_opt_found = 1;
ec8ceca3
JG
2293 }
2294 break;
2295
bcbf9559
JG
2296 /* The following symbol types can be ignored. */
2297 case N_OBJ: /* Solaris 2: Object file dir and name */
bcbf9559
JG
2298 /* N_UNDF: Solaris 2: file separator mark */
2299 /* N_UNDF: -- we will never encounter it, since we only process one
2300 file's symbols at once. */
4c7c6bab
JG
2301 case N_ENDM: /* Solaris 2: End of module */
2302 case N_MAIN: /* Name of main routine. */
9342ecb9 2303 break;
bd5635a1 2304 }
7e258d18
PB
2305
2306 previous_stab_code = type;
bd5635a1
RP
2307}
2308\f
2b576293
C
2309/* FIXME: The only difference between this and elfstab_build_psymtabs
2310 is the call to install_minimal_symbols for elf, and the support for
2311 split sections. If the differences are really that small, the code
2312 should be shared. */
965a5c32 2313
b5b186a2
SS
2314/* Scan and build partial symbols for an coff symbol file.
2315 The coff file has already been processed to get its minimal symbols.
2316
2317 This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2318 rolled into one.
2319
2320 OBJFILE is the object file we are reading symbols from.
2321 ADDR is the address relative to which the symbols are (e.g.
2322 the base address of the text segment).
2323 MAINLINE is true if we are reading the main symbol
2324 table (as opposed to a shared lib or dynamically loaded file).
2b576293
C
2325 TEXTADDR is the address of the text section.
2326 TEXTSIZE is the size of the text section.
2327 STABSECTS is the list of .stab sections in OBJFILE.
b5b186a2
SS
2328 STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
2329 .stabstr section exists.
2330
2331 This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
2332 adjusted for coff details. */
2333
2334void
2335coffstab_build_psymtabs (objfile, section_offsets, mainline,
2b576293 2336 textaddr, textsize, stabsects,
b5b186a2
SS
2337 stabstroffset, stabstrsize)
2338 struct objfile *objfile;
2339 struct section_offsets *section_offsets;
2340 int mainline;
2b576293
C
2341 CORE_ADDR textaddr;
2342 unsigned int textsize;
2343 struct stab_section_list *stabsects;
b5b186a2
SS
2344 file_ptr stabstroffset;
2345 unsigned int stabstrsize;
2346{
2347 int val;
2348 bfd *sym_bfd = objfile->obfd;
2349 char *name = bfd_get_filename (sym_bfd);
2350 struct dbx_symfile_info *info;
2b576293 2351 unsigned int stabsize;
b5b186a2
SS
2352
2353 /* There is already a dbx_symfile_info allocated by our caller.
2354 It might even contain some info from the coff symtab to help us. */
965a5c32 2355 info = (struct dbx_symfile_info *) objfile->sym_stab_info;
b5b186a2 2356
2b576293
C
2357 DBX_TEXT_ADDR (objfile) = textaddr;
2358 DBX_TEXT_SIZE (objfile) = textsize;
b5b186a2
SS
2359
2360#define COFF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */
2361 DBX_SYMBOL_SIZE (objfile) = COFF_STABS_SYMBOL_SIZE;
b5b186a2 2362 DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
b5b186a2
SS
2363
2364 if (stabstrsize > bfd_get_size (sym_bfd))
2365 error ("ridiculous string table size: %d bytes", stabstrsize);
2366 DBX_STRINGTAB (objfile) = (char *)
2367 obstack_alloc (&objfile->psymbol_obstack, stabstrsize+1);
94f5a25f 2368 OBJSTAT (objfile, sz_strtab += stabstrsize+1);
b5b186a2
SS
2369
2370 /* Now read in the string table in one big gulp. */
2371
2372 val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
2373 if (val < 0)
2374 perror_with_name (name);
2375 val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, 1, sym_bfd);
2376 if (val != stabstrsize)
2377 perror_with_name (name);
2378
2379 stabsread_new_init ();
2380 buildsym_new_init ();
2381 free_header_files ();
2382 init_header_files ();
2383
2384 processing_acc_compilation = 1;
2385
2386 /* In a coff file, we've already installed the minimal symbols that came
2387 from the coff (non-stab) symbol table, so always act like an
2388 incremental load here. */
2b576293
C
2389 if (stabsects->next == NULL)
2390 {
2391 stabsize = bfd_section_size (sym_bfd, stabsects->section);
2392 DBX_SYMCOUNT (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
2393 DBX_SYMTAB_OFFSET (objfile) = stabsects->section->filepos;
2394 }
2395 else
2396 {
2397 struct stab_section_list *stabsect;
2398
2399 DBX_SYMCOUNT (objfile) = 0;
2400 for (stabsect = stabsects; stabsect != NULL; stabsect = stabsect->next)
2401 {
2402 stabsize = bfd_section_size (sym_bfd, stabsect->section);
2403 DBX_SYMCOUNT (objfile) += stabsize / DBX_SYMBOL_SIZE (objfile);
2404 }
2405
2406 DBX_SYMTAB_OFFSET (objfile) = stabsects->section->filepos;
2407
2408 symbuf_sections = stabsects->next;
2409 symbuf_left = bfd_section_size (sym_bfd, stabsects->section);
2410 symbuf_read = 0;
2411 }
2412
b5b186a2
SS
2413 dbx_symfile_read (objfile, section_offsets, 0);
2414}
2415\f
9342ecb9
JG
2416/* Scan and build partial symbols for an ELF symbol file.
2417 This ELF file has already been processed to get its minimal symbols,
2418 and any DWARF symbols that were in it.
2419
2420 This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2421 rolled into one.
2422
2423 OBJFILE is the object file we are reading symbols from.
2424 ADDR is the address relative to which the symbols are (e.g.
2425 the base address of the text segment).
2426 MAINLINE is true if we are reading the main symbol
2427 table (as opposed to a shared lib or dynamically loaded file).
2428 STABOFFSET and STABSIZE define the location in OBJFILE where the .stab
2429 section exists.
2430 STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
2431 .stabstr section exists.
2432
2433 This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
2434 adjusted for elf details. */
2435
2436void
1aed6766 2437elfstab_build_psymtabs (objfile, section_offsets, mainline,
9342ecb9 2438 staboffset, stabsize,
1aed6766
SG
2439 stabstroffset, stabstrsize)
2440 struct objfile *objfile;
2441 struct section_offsets *section_offsets;
2442 int mainline;
51b80b00 2443 file_ptr staboffset;
1aed6766 2444 unsigned int stabsize;
51b80b00 2445 file_ptr stabstroffset;
1aed6766 2446 unsigned int stabstrsize;
9342ecb9
JG
2447{
2448 int val;
2449 bfd *sym_bfd = objfile->obfd;
2450 char *name = bfd_get_filename (sym_bfd);
2451 struct dbx_symfile_info *info;
2b576293 2452 asection *text_sect;
9342ecb9 2453
2af231b8
JG
2454 /* There is already a dbx_symfile_info allocated by our caller.
2455 It might even contain some info from the ELF symtab to help us. */
965a5c32 2456 info = (struct dbx_symfile_info *) objfile->sym_stab_info;
9342ecb9 2457
2b576293
C
2458 text_sect = bfd_get_section_by_name (sym_bfd, ".text");
2459 if (!text_sect)
9342ecb9 2460 error ("Can't find .text section in symbol file");
2b576293
C
2461 DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
2462 DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
9342ecb9
JG
2463
2464#define ELF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */
2465 DBX_SYMBOL_SIZE (objfile) = ELF_STABS_SYMBOL_SIZE;
2466 DBX_SYMCOUNT (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
2467 DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
2468 DBX_SYMTAB_OFFSET (objfile) = staboffset;
2469
996ccb30 2470 if (stabstrsize > bfd_get_size (sym_bfd))
9342ecb9
JG
2471 error ("ridiculous string table size: %d bytes", stabstrsize);
2472 DBX_STRINGTAB (objfile) = (char *)
2473 obstack_alloc (&objfile->psymbol_obstack, stabstrsize+1);
94f5a25f 2474 OBJSTAT (objfile, sz_strtab += stabstrsize+1);
9342ecb9
JG
2475
2476 /* Now read in the string table in one big gulp. */
2477
2c7ab4ca 2478 val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
9342ecb9
JG
2479 if (val < 0)
2480 perror_with_name (name);
2481 val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, 1, sym_bfd);
2482 if (val != stabstrsize)
2483 perror_with_name (name);
2484
3416d90b 2485 stabsread_new_init ();
9342ecb9
JG
2486 buildsym_new_init ();
2487 free_header_files ();
2488 init_header_files ();
2489 install_minimal_symbols (objfile);
2490
2491 processing_acc_compilation = 1;
2492
2493 /* In an elf file, we've already installed the minimal symbols that came
2494 from the elf (non-stab) symbol table, so always act like an
2495 incremental load here. */
2af231b8
JG
2496 dbx_symfile_read (objfile, section_offsets, 0);
2497}
2498\f
a66e8382
SG
2499/* Scan and build partial symbols for a file with special sections for stabs
2500 and stabstrings. The file has already been processed to get its minimal
2501 symbols, and any other symbols that might be necessary to resolve GSYMs.
2502
2503 This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2504 rolled into one.
2505
2506 OBJFILE is the object file we are reading symbols from.
2507 ADDR is the address relative to which the symbols are (e.g. the base address
2508 of the text segment).
2509 MAINLINE is true if we are reading the main symbol table (as opposed to a
2510 shared lib or dynamically loaded file).
2511 STAB_NAME is the name of the section that contains the stabs.
2512 STABSTR_NAME is the name of the section that contains the stab strings.
2513
2514 This routine is mostly copied from dbx_symfile_init and dbx_symfile_read. */
2515
2516void
2517stabsect_build_psymtabs (objfile, section_offsets, mainline, stab_name,
320f93f7 2518 stabstr_name, text_name)
a66e8382
SG
2519 struct objfile *objfile;
2520 struct section_offsets *section_offsets;
2521 int mainline;
2522 char *stab_name;
2523 char *stabstr_name;
320f93f7 2524 char *text_name;
a66e8382
SG
2525{
2526 int val;
2527 bfd *sym_bfd = objfile->obfd;
2528 char *name = bfd_get_filename (sym_bfd);
2529 asection *stabsect;
2530 asection *stabstrsect;
2b576293 2531 asection *text_sect;
a66e8382
SG
2532
2533 stabsect = bfd_get_section_by_name (sym_bfd, stab_name);
2534 stabstrsect = bfd_get_section_by_name (sym_bfd, stabstr_name);
2535
2536 if (!stabsect)
2537 return;
2538
2539 if (!stabstrsect)
2540 error ("stabsect_build_psymtabs: Found stabs (%s), but not string section (%s)",
2541 stab_name, stabstr_name);
2542
bfe2f12b 2543 objfile->sym_stab_info = (PTR) xmalloc (sizeof (struct dbx_symfile_info));
a66e8382
SG
2544 memset (DBX_SYMFILE_INFO (objfile), 0, sizeof (struct dbx_symfile_info));
2545
2b576293
C
2546 text_sect = bfd_get_section_by_name (sym_bfd, text_name);
2547 if (!text_sect)
320f93f7 2548 error ("Can't find %s section in symbol file", text_name);
2b576293
C
2549 DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
2550 DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
a66e8382
SG
2551
2552 DBX_SYMBOL_SIZE (objfile) = sizeof (struct external_nlist);
2553 DBX_SYMCOUNT (objfile) = bfd_section_size (sym_bfd, stabsect)
2554 / DBX_SYMBOL_SIZE (objfile);
2555 DBX_STRINGTAB_SIZE (objfile) = bfd_section_size (sym_bfd, stabstrsect);
2556 DBX_SYMTAB_OFFSET (objfile) = stabsect->filepos; /* XXX - FIXME: POKING INSIDE BFD DATA STRUCTURES */
2557
2558 if (DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
2559 error ("ridiculous string table size: %d bytes", DBX_STRINGTAB_SIZE (objfile));
2560 DBX_STRINGTAB (objfile) = (char *)
2561 obstack_alloc (&objfile->psymbol_obstack, DBX_STRINGTAB_SIZE (objfile) + 1);
94f5a25f 2562 OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile) + 1);
a66e8382
SG
2563
2564 /* Now read in the string table in one big gulp. */
2565
2566 val = bfd_get_section_contents (sym_bfd, /* bfd */
2567 stabstrsect, /* bfd section */
2568 DBX_STRINGTAB (objfile), /* input buffer */
2569 0, /* offset into section */
2570 DBX_STRINGTAB_SIZE (objfile)); /* amount to read */
2571
2572 if (!val)
2573 perror_with_name (name);
2574
2575 stabsread_new_init ();
2576 buildsym_new_init ();
2577 free_header_files ();
2578 init_header_files ();
2579 install_minimal_symbols (objfile);
2580
2581 /* Now, do an incremental load */
2582
2583 processing_acc_compilation = 1;
2584 dbx_symfile_read (objfile, section_offsets, 0);
2585}
2586\f
2af231b8
JG
2587/* Parse the user's idea of an offset for dynamic linking, into our idea
2588 of how to represent it for fast symbol reading. */
2589
040b9597 2590static struct section_offsets *
2af231b8
JG
2591dbx_symfile_offsets (objfile, addr)
2592 struct objfile *objfile;
2593 CORE_ADDR addr;
2594{
2595 struct section_offsets *section_offsets;
2596 int i;
4d57c599
JK
2597
2598 objfile->num_sections = SECT_OFF_MAX;
2af231b8
JG
2599 section_offsets = (struct section_offsets *)
2600 obstack_alloc (&objfile -> psymbol_obstack,
4d57c599
JK
2601 sizeof (struct section_offsets)
2602 + sizeof (section_offsets->offsets) * (SECT_OFF_MAX-1));
2af231b8
JG
2603
2604 for (i = 0; i < SECT_OFF_MAX; i++)
2605 ANOFFSET (section_offsets, i) = addr;
2606
2607 return section_offsets;
9342ecb9
JG
2608}
2609\f
80d68b1d
FF
2610static struct sym_fns aout_sym_fns =
2611{
0eed42de 2612 bfd_target_aout_flavour,
80d68b1d
FF
2613 dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */
2614 dbx_symfile_init, /* sym_init: read initial info, setup for sym_read() */
2615 dbx_symfile_read, /* sym_read: read a symbol file into symtab */
2616 dbx_symfile_finish, /* sym_finish: finished with file, cleanup */
2af231b8 2617 dbx_symfile_offsets, /* sym_offsets: parse user's offsets to internal form */
80d68b1d
FF
2618 NULL /* next: pointer to next struct sym_fns */
2619};
bd5635a1
RP
2620
2621void
2622_initialize_dbxread ()
2623{
bd5635a1 2624 add_symtab_fns(&aout_sym_fns);
bd5635a1 2625}
This page took 0.370627 seconds and 4 git commands to generate.