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