]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/dbxread.c
* .Sanitize (Things-to-keep): Add emulparams, emultempl, scripttempl.
[thirdparty/binutils-gdb.git] / gdb / dbxread.c
CommitLineData
bd5635a1 1/* Read dbx symbol tables and convert to internal format, for GDB.
65ce5df4
JG
2 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993
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
JG
18along with this program; if not, write to the Free Software
19Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, 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"
318bf84f 36#include <string.h>
bd5635a1 37
9342ecb9 38#if defined(USG) || defined(__CYGNUSCLIB__)
bd5635a1
RP
39#include <sys/types.h>
40#include <fcntl.h>
41#define L_SET 0
42#define L_INCR 1
43#endif
44
afe4ca15
JG
45#include <obstack.h>
46#include <sys/param.h>
021959e2 47#ifndef NO_SYS_FILE
afe4ca15 48#include <sys/file.h>
021959e2 49#endif
afe4ca15 50#include <sys/stat.h>
bd5635a1 51#include <ctype.h>
afe4ca15
JG
52#include "symtab.h"
53#include "breakpoint.h"
54#include "command.h"
55#include "target.h"
56#include "gdbcore.h" /* for bfd stuff */
ac88ca20 57#include "libbfd.h" /* FIXME Secret internal BFD stuff (bfd_read) */
afe4ca15
JG
58#include "libaout.h" /* FIXME Secret internal BFD stuff for a.out */
59#include "symfile.h"
3624c875 60#include "objfiles.h"
c0302457 61#include "buildsym.h"
3416d90b 62#include "stabsread.h"
2af231b8 63#include "gdb-stabs.h"
3416d90b 64#include "demangle.h"
51b80b00
FF
65#include "language.h" /* Needed inside partial-stab.h */
66#include "complaints.h"
afe4ca15 67
7e258d18
PB
68#include "aout/aout64.h"
69#include "aout/stab_gnu.h" /* We always use GNU stabs, not native, now */
bd5635a1 70
4a35d6e9
FF
71/* Each partial symbol table entry contains a pointer to private data for the
72 read_symtab() function to use when expanding a partial symbol table entry
73 to a full symbol table entry.
74
75 For dbxread this structure contains the offset within the file symbol table
76 of first local symbol for this file, and length (in bytes) of the section
77 of the symbol table devoted to this file's symbols (actually, the section
9342ecb9
JG
78 bracketed may contain more than just this file's symbols). It also contains
79 further information needed to locate the symbols if they are in an ELF file.
80
81 If ldsymlen is 0, the only reason for this thing's existence is the
82 dependency list. Nothing else will happen when it is read in. */
4a35d6e9
FF
83
84#define LDSYMOFF(p) (((struct symloc *)((p)->read_symtab_private))->ldsymoff)
85#define LDSYMLEN(p) (((struct symloc *)((p)->read_symtab_private))->ldsymlen)
9342ecb9
JG
86#define SYMLOC(p) ((struct symloc *)((p)->read_symtab_private))
87#define SYMBOL_SIZE(p) (SYMLOC(p)->symbol_size)
88#define SYMBOL_OFFSET(p) (SYMLOC(p)->symbol_offset)
89#define STRING_OFFSET(p) (SYMLOC(p)->string_offset)
90#define FILE_STRING_OFFSET(p) (SYMLOC(p)->file_string_offset)
4a35d6e9
FF
91
92struct symloc {
93 int ldsymoff;
94 int ldsymlen;
9342ecb9
JG
95 int symbol_size;
96 int symbol_offset;
97 int string_offset;
98 int file_string_offset;
4a35d6e9
FF
99};
100
bd5635a1
RP
101/* Macro to determine which symbols to ignore when reading the first symbol
102 of a file. Some machines override this definition. */
103#ifndef IGNORE_SYMBOL
104/* This code is used on Ultrix systems. Ignore it */
105#define IGNORE_SYMBOL(type) (type == (int)N_NSYMS)
106#endif
107
108/* Macro for name of symbol to indicate a file compiled with gcc. */
109#ifndef GCC_COMPILED_FLAG_SYMBOL
110#define GCC_COMPILED_FLAG_SYMBOL "gcc_compiled."
111#endif
112
0cf9329b
PB
113/* Macro for name of symbol to indicate a file compiled with gcc2. */
114#ifndef GCC2_COMPILED_FLAG_SYMBOL
115#define GCC2_COMPILED_FLAG_SYMBOL "gcc2_compiled."
116#endif
117
bd5635a1
RP
118/* Define this as 1 if a pcc declaration of a char or short argument
119 gives the correct address. Otherwise assume pcc gives the
120 address of the corresponding int, which is not the same on a
121 big-endian machine. */
122
123#ifndef BELIEVE_PCC_PROMOTION
124#define BELIEVE_PCC_PROMOTION 0
125#endif
c0302457 126
2e4964ad
FF
127/* Remember what we deduced to be the source language of this psymtab. */
128
129static enum language psymtab_language = language_unknown;
130
bd5635a1
RP
131/* Nonzero means give verbose info on gdb action. From main.c. */
132extern int info_verbose;
133
7d9884b9 134/* The BFD for this file -- implicit parameter to next_symbol_text. */
bd5635a1 135
c0302457 136static bfd *symfile_bfd;
bd5635a1 137
afe4ca15
JG
138/* The size of each symbol in the symbol file (in external form).
139 This is set by dbx_symfile_read when building psymtabs, and by
140 dbx_psymtab_to_symtab when building symtabs. */
141
142static unsigned symbol_size;
143
9342ecb9
JG
144/* This is the offset of the symbol table in the executable file */
145static unsigned symbol_table_offset;
146
147/* This is the offset of the string table in the executable file */
148static unsigned string_table_offset;
149
150/* For elf+stab executables, the n_strx field is not a simple index
151 into the string table. Instead, each .o file has a base offset
152 in the string table, and the associated symbols contain offsets
153 from this base. The following two variables contain the base
154 offset for the current and next .o files. */
155static unsigned int file_string_table_offset;
156static unsigned int next_file_string_table_offset;
157
bd5635a1
RP
158/* Complaints about the symbols we have encountered. */
159
bd5635a1
RP
160struct complaint lbrac_complaint =
161 {"bad block start address patched", 0, 0};
162
bd5635a1
RP
163struct complaint string_table_offset_complaint =
164 {"bad string table offset in symbol %d", 0, 0};
165
166struct complaint unknown_symtype_complaint =
0c4d2cc2 167 {"unknown symbol type %s", 0, 0};
bd5635a1 168
65ce5df4
JG
169struct complaint unknown_symchar_complaint =
170 {"unknown symbol type character `%c'", 0, 0};
171
bd5635a1
RP
172struct complaint lbrac_rbrac_complaint =
173 {"block start larger than block end", 0, 0};
7d9884b9
JG
174
175struct complaint lbrac_unmatched_complaint =
176 {"unmatched N_LBRAC before symtab pos %d", 0, 0};
177
178struct complaint lbrac_mismatch_complaint =
179 {"N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d", 0, 0};
9342ecb9
JG
180
181struct complaint repeated_header_complaint =
182 {"\"repeated\" header file not previously seen, at symtab pos %d", 0, 0};
183
184struct complaint repeated_header_name_complaint =
185 {"\"repeated\" header file not previously seen, named %s", 0, 0};
bd5635a1 186\f
bd5635a1
RP
187/* During initial symbol readin, we need to have a structure to keep
188 track of which psymtabs have which bincls in them. This structure
189 is used during readin to setup the list of dependencies within each
190 partial symbol table. */
191
192struct header_file_location
193{
194 char *name; /* Name of header file */
195 int instance; /* See above */
196 struct partial_symtab *pst; /* Partial symtab that has the
197 BINCL/EINCL defs for this file */
198};
199
200/* The actual list and controling variables */
201static struct header_file_location *bincl_list, *next_bincl;
202static int bincls_allocated;
203
021959e2
JG
204/* Local function prototypes */
205
206static void
80d68b1d
FF
207free_header_files PARAMS ((void));
208
209static void
210init_header_files PARAMS ((void));
021959e2
JG
211
212static struct pending *
213copy_pending PARAMS ((struct pending *, int, struct pending *));
214
574dac8e
JK
215static void
216read_ofile_symtab PARAMS ((struct partial_symtab *));
021959e2
JG
217
218static void
219dbx_psymtab_to_symtab PARAMS ((struct partial_symtab *));
220
221static void
4c07f28d 222dbx_psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
021959e2
JG
223
224static void
2af231b8
JG
225read_dbx_symtab PARAMS ((struct section_offsets *, struct objfile *,
226 CORE_ADDR, int));
021959e2
JG
227
228static void
229free_bincl_list PARAMS ((struct objfile *));
230
231static struct partial_symtab *
232find_corresponding_bincl_psymtab PARAMS ((char *, int));
233
234static void
235add_bincl_to_list PARAMS ((struct partial_symtab *, char *, int));
236
237static void
238init_bincl_list PARAMS ((int, struct objfile *));
239
240static void
3624c875 241init_psymbol_list PARAMS ((struct objfile *));
021959e2
JG
242
243static char *
244dbx_next_symbol_text PARAMS ((void));
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
RP
277{
278 register int i;
bd5635a1 279
80d68b1d
FF
280 if (header_files != NULL)
281 {
282 for (i = 0; i < n_header_files; i++)
283 {
284 free (header_files[i].name);
285 }
ac88ca20 286 free ((PTR)header_files);
80d68b1d
FF
287 header_files = NULL;
288 n_header_files = 0;
289 }
290 if (this_object_header_files)
291 {
ac88ca20 292 free ((PTR)this_object_header_files);
80d68b1d
FF
293 this_object_header_files = NULL;
294 }
295 n_allocated_header_files = 0;
296 n_allocated_this_object_header_files = 0;
297}
298
299/* Allocate new header file tables */
300
301static void
302init_header_files ()
303{
bd5635a1 304 n_header_files = 0;
80d68b1d
FF
305 n_allocated_header_files = 10;
306 header_files = (struct header_file *)
307 xmalloc (10 * sizeof (struct header_file));
bd5635a1
RP
308
309 n_allocated_this_object_header_files = 10;
310 this_object_header_files = (int *) xmalloc (10 * sizeof (int));
311}
312
bd5635a1
RP
313/* Add header file number I for this object file
314 at the next successive FILENUM. */
315
316static void
317add_this_object_header_file (i)
318 int i;
319{
320 if (n_this_object_header_files == n_allocated_this_object_header_files)
321 {
322 n_allocated_this_object_header_files *= 2;
323 this_object_header_files
021959e2 324 = (int *) xrealloc ((char *) this_object_header_files,
bd5635a1
RP
325 n_allocated_this_object_header_files * sizeof (int));
326 }
327
328 this_object_header_files[n_this_object_header_files++] = i;
329}
330
331/* Add to this file an "old" header file, one already seen in
332 a previous object file. NAME is the header file's name.
333 INSTANCE is its instance code, to select among multiple
334 symbol tables for the same header file. */
335
336static void
337add_old_header_file (name, instance)
338 char *name;
339 int instance;
340{
341 register struct header_file *p = header_files;
342 register int i;
343
344 for (i = 0; i < n_header_files; i++)
2e4964ad 345 if (STREQ (p[i].name, name) && instance == p[i].instance)
bd5635a1
RP
346 {
347 add_this_object_header_file (i);
348 return;
349 }
51b80b00 350 complain (&repeated_header_complaint, symnum);
9342ecb9 351 complain (&repeated_header_name_complaint, name);
bd5635a1
RP
352}
353
354/* Add to this file a "new" header file: definitions for its types follow.
355 NAME is the header file's name.
356 Most often this happens only once for each distinct header file,
357 but not necessarily. If it happens more than once, INSTANCE has
358 a different value each time, and references to the header file
359 use INSTANCE values to select among them.
360
361 dbx output contains "begin" and "end" markers for each new header file,
362 but at this level we just need to know which files there have been;
363 so we record the file when its "begin" is seen and ignore the "end". */
364
365static void
366add_new_header_file (name, instance)
367 char *name;
368 int instance;
369{
370 register int i;
bd5635a1
RP
371
372 /* Make sure there is room for one more header file. */
373
374 if (n_header_files == n_allocated_header_files)
375 {
376 n_allocated_header_files *= 2;
377 header_files = (struct header_file *)
021959e2
JG
378 xrealloc ((char *) header_files,
379 (n_allocated_header_files * sizeof (struct header_file)));
bd5635a1
RP
380 }
381
382 /* Create an entry for this header file. */
383
384 i = n_header_files++;
385 header_files[i].name = savestring (name, strlen(name));
386 header_files[i].instance = instance;
387 header_files[i].length = 10;
388 header_files[i].vector
389 = (struct type **) xmalloc (10 * sizeof (struct type *));
4ed3a9ea 390 memset (header_files[i].vector, 0, 10 * sizeof (struct type *));
bd5635a1
RP
391
392 add_this_object_header_file (i);
393}
394
bd5635a1
RP
395#if 0
396static struct type **
397explicit_lookup_type (real_filenum, index)
398 int real_filenum, index;
399{
400 register struct header_file *f = &header_files[real_filenum];
401
402 if (index >= f->length)
403 {
404 f->length *= 2;
405 f->vector = (struct type **)
406 xrealloc (f->vector, f->length * sizeof (struct type *));
407 bzero (&f->vector[f->length / 2],
408 f->length * sizeof (struct type *) / 2);
409 }
410 return &f->vector[index];
411}
412#endif
413\f
9bba3334 414static void
021959e2 415record_minimal_symbol (name, address, type, objfile)
bd5635a1
RP
416 char *name;
417 CORE_ADDR address;
418 int type;
021959e2 419 struct objfile *objfile;
bd5635a1 420{
021959e2 421 enum minimal_symbol_type ms_type;
0c4d2cc2
JG
422
423 switch (type &~ N_EXT) {
021959e2
JG
424 case N_TEXT: ms_type = mst_text; break;
425 case N_DATA: ms_type = mst_data; break;
426 case N_BSS: ms_type = mst_bss; break;
427 case N_ABS: ms_type = mst_abs; break;
0c4d2cc2 428#ifdef N_SETV
021959e2 429 case N_SETV: ms_type = mst_data; break;
0c4d2cc2 430#endif
021959e2 431 default: ms_type = mst_unknown; break;
0c4d2cc2 432 }
bd5635a1 433
021959e2
JG
434 prim_record_minimal_symbol (obsavestring (name, strlen (name), &objfile -> symbol_obstack),
435 address, ms_type);
bd5635a1
RP
436}
437\f
438/* Scan and build partial symbols for a symbol file.
439 We have been initialized by a call to dbx_symfile_init, which
3624c875
FF
440 put all the relevant info into a "struct dbx_symfile_info",
441 hung off the objfile structure.
bd5635a1 442
2af231b8
JG
443 SECTION_OFFSETS contains offsets relative to which the symbols in the
444 various sections are (depending where the sections were actually loaded).
bd5635a1
RP
445 MAINLINE is true if we are reading the main symbol
446 table (as opposed to a shared lib or dynamically loaded file). */
447
9bba3334 448static void
2af231b8 449dbx_symfile_read (objfile, section_offsets, mainline)
80d68b1d 450 struct objfile *objfile;
2af231b8 451 struct section_offsets *section_offsets;
bd5635a1
RP
452 int mainline; /* FIXME comments above */
453{
80d68b1d 454 bfd *sym_bfd;
bd5635a1 455 int val;
bd5635a1 456
80d68b1d 457 sym_bfd = objfile->obfd;
3624c875 458 val = bfd_seek (objfile->obfd, DBX_SYMTAB_OFFSET (objfile), L_SET);
bd5635a1 459 if (val < 0)
80d68b1d 460 perror_with_name (objfile->name);
bd5635a1 461
66eeea27 462 /* If we are reinitializing, or if we have never loaded syms yet, init */
80d68b1d 463 if (mainline || objfile->global_psymbols.size == 0 || objfile->static_psymbols.size == 0)
3624c875 464 init_psymbol_list (objfile);
66eeea27 465
9342ecb9
JG
466 symbol_size = DBX_SYMBOL_SIZE (objfile);
467 symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
afe4ca15 468
bd5635a1
RP
469 pending_blocks = 0;
470 make_cleanup (really_free_pendings, 0);
471
021959e2
JG
472 init_minimal_symbol_collection ();
473 make_cleanup (discard_minimal_symbols, 0);
bd5635a1
RP
474
475 /* Now that the symbol table data of the executable file are all in core,
476 process them and define symbols accordingly. */
477
2af231b8 478 read_dbx_symtab (section_offsets, objfile,
3624c875
FF
479 bfd_section_vma (sym_bfd, DBX_TEXT_SECT (objfile)),
480 bfd_section_size (sym_bfd, DBX_TEXT_SECT (objfile)));
bd5635a1 481
021959e2
JG
482 /* Install any minimal symbols that have been collected as the current
483 minimal symbols for this objfile. */
bd5635a1 484
80d68b1d 485 install_minimal_symbols (objfile);
bd5635a1 486
021959e2 487 if (!have_partial_symbols ()) {
9404978d
MT
488 wrap_here ("");
489 printf_filtered ("(no debugging symbols found)...");
490 wrap_here ("");
491 }
bd5635a1
RP
492}
493
9404978d
MT
494/* Initialize anything that needs initializing when a completely new
495 symbol file is specified (not just adding some symbols from another
496 file, e.g. a shared library). */
bd5635a1 497
9bba3334 498static void
ac88ca20
JG
499dbx_new_init (ignore)
500 struct objfile *ignore;
bd5635a1 501{
3416d90b 502 stabsread_new_init ();
c0302457 503 buildsym_new_init ();
80d68b1d 504 init_header_files ();
bd5635a1
RP
505}
506
507
508/* dbx_symfile_init ()
509 is the dbx-specific initialization routine for reading symbols.
80d68b1d 510 It is passed a struct objfile which contains, among other things,
bd5635a1
RP
511 the BFD for the file whose symbols are being read, and a slot for a pointer
512 to "private data" which we fill with goodies.
513
514 We read the string table into malloc'd space and stash a pointer to it.
515
516 Since BFD doesn't know how to read debug symbols in a format-independent
517 way (and may never do so...), we have to do it ourselves. We will never
518 be called unless this is an a.out (or very similar) file.
519 FIXME, there should be a cleaner peephole into the BFD environment here. */
520
69a272c4
FF
521#define DBX_STRINGTAB_SIZE_SIZE sizeof(long) /* FIXME */
522
9bba3334 523static void
80d68b1d
FF
524dbx_symfile_init (objfile)
525 struct objfile *objfile;
bd5635a1
RP
526{
527 int val;
80d68b1d 528 bfd *sym_bfd = objfile->obfd;
bd5635a1 529 char *name = bfd_get_filename (sym_bfd);
69a272c4 530 unsigned char size_temp[DBX_STRINGTAB_SIZE_SIZE];
bd5635a1
RP
531
532 /* Allocate struct to keep track of the symfile */
ac88ca20 533 objfile->sym_private = (PTR)
3624c875 534 xmmalloc (objfile -> md, sizeof (struct dbx_symfile_info));
bd5635a1
RP
535
536 /* FIXME POKING INSIDE BFD DATA STRUCTURES */
bd5635a1
RP
537#define STRING_TABLE_OFFSET (sym_bfd->origin + obj_str_filepos (sym_bfd))
538#define SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_sym_filepos (sym_bfd))
040b9597 539
bd5635a1
RP
540 /* FIXME POKING INSIDE BFD DATA STRUCTURES */
541
784fd92b 542 DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL;
3624c875
FF
543 DBX_TEXT_SECT (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
544 if (!DBX_TEXT_SECT (objfile))
9342ecb9
JG
545 error ("Can't find .text section in symbol file");
546
bf18ac80 547 DBX_SYMBOL_SIZE (objfile) = obj_symbol_entry_size (sym_bfd);
7da1e27d 548 DBX_SYMCOUNT (objfile) = bfd_get_symcount (sym_bfd);
9342ecb9 549 DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
3624c875
FF
550
551 /* Read the string table and stash it away in the psymbol_obstack. It is
552 only needed as long as we need to expand psymbols into full symbols,
553 so when we blow away the psymbol the string table goes away as well.
554 Note that gdb used to use the results of attempting to malloc the
555 string table, based on the size it read, as a form of sanity check
556 for botched byte swapping, on the theory that a byte swapped string
557 table size would be so totally bogus that the malloc would fail. Now
558 that we put in on the psymbol_obstack, we can't do this since gdb gets
559 a fatal error (out of virtual memory) if the size is bogus. We can
69a272c4
FF
560 however at least check to see if the size is less than the size of
561 the size field itself, or larger than the size of the entire file.
562 Note that all valid string tables have a size greater than zero, since
563 the bytes used to hold the size are included in the count. */
3624c875 564
69a272c4
FF
565 if (STRING_TABLE_OFFSET == 0)
566 {
65ce5df4
JG
567 /* It appears that with the existing bfd code, STRING_TABLE_OFFSET
568 will never be zero, even when there is no string table. This
569 would appear to be a bug in bfd. */
69a272c4
FF
570 DBX_STRINGTAB_SIZE (objfile) = 0;
571 DBX_STRINGTAB (objfile) = NULL;
572 }
573 else
574 {
575 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, L_SET);
576 if (val < 0)
577 perror_with_name (name);
578
579 memset ((PTR) size_temp, 0, sizeof (size_temp));
580 val = bfd_read ((PTR) size_temp, sizeof (size_temp), 1, sym_bfd);
581 if (val < 0)
65ce5df4
JG
582 {
583 perror_with_name (name);
584 }
585 else if (val == 0)
586 {
587 /* With the existing bfd code, STRING_TABLE_OFFSET will be set to
588 EOF if there is no string table, and attempting to read the size
589 from EOF will read zero bytes. */
590 DBX_STRINGTAB_SIZE (objfile) = 0;
591 DBX_STRINGTAB (objfile) = NULL;
592 }
593 else
594 {
595 /* Read some data that would appear to be the string table size.
596 If there really is a string table, then it is probably the right
597 size. Byteswap if necessary and validate the size. Note that
598 the minimum is DBX_STRINGTAB_SIZE_SIZE. If we just read some
599 random data that happened to be at STRING_TABLE_OFFSET, because
600 bfd can't tell us there is no string table, the sanity checks may
601 or may not catch this. */
602 DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
603
604 if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp)
605 || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
606 error ("ridiculous string table size (%d bytes).",
607 DBX_STRINGTAB_SIZE (objfile));
608
609 DBX_STRINGTAB (objfile) =
610 (char *) obstack_alloc (&objfile -> psymbol_obstack,
611 DBX_STRINGTAB_SIZE (objfile));
612
613 /* Now read in the string table in one big gulp. */
614
615 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, L_SET);
616 if (val < 0)
617 perror_with_name (name);
618 val = bfd_read (DBX_STRINGTAB (objfile), DBX_STRINGTAB_SIZE (objfile), 1,
619 sym_bfd);
620 if (val != DBX_STRINGTAB_SIZE (objfile))
621 perror_with_name (name);
622 }
69a272c4 623 }
bd5635a1 624}
80d68b1d
FF
625
626/* Perform any local cleanups required when we are done with a particular
627 objfile. I.E, we are in the process of discarding all symbol information
628 for an objfile, freeing up all memory held for it, and unlinking the
629 objfile struct from the global list of known objfiles. */
630
631static void
632dbx_symfile_finish (objfile)
633 struct objfile *objfile;
634{
ac88ca20 635 if (objfile->sym_private != NULL)
80d68b1d 636 {
ac88ca20 637 mfree (objfile -> md, objfile->sym_private);
80d68b1d
FF
638 }
639 free_header_files ();
640}
641
bd5635a1
RP
642\f
643/* Buffer for reading the symbol table entries. */
afe4ca15 644static struct internal_nlist symbuf[4096];
bd5635a1
RP
645static int symbuf_idx;
646static int symbuf_end;
647
9342ecb9
JG
648/* Name of last function encountered. Used in Solaris to approximate
649 object file boundaries. */
650static char *last_function_name;
651
bd5635a1
RP
652/* The address in memory of the string table of the object file we are
653 reading (which might not be the "main" object file, but might be a
654 shared library or some other dynamically loaded thing). This is set
655 by read_dbx_symtab when building psymtabs, and by read_ofile_symtab
656 when building symtabs, and is used only by next_symbol_text. */
657static char *stringtab_global;
658
659/* Refill the symbol table input buffer
660 and set the variables that control fetching entries from it.
661 Reports an error if no data available.
662 This function can read past the end of the symbol table
663 (into the string table) but this does no harm. */
664
7d9884b9
JG
665static void
666fill_symbuf (sym_bfd)
667 bfd *sym_bfd;
bd5635a1 668{
ac88ca20 669 int nbytes = bfd_read ((PTR)symbuf, sizeof (symbuf), 1, sym_bfd);
bd5635a1 670 if (nbytes < 0)
7d9884b9 671 perror_with_name (bfd_get_filename (sym_bfd));
bd5635a1
RP
672 else if (nbytes == 0)
673 error ("Premature end of file reading symbol table");
afe4ca15 674 symbuf_end = nbytes / symbol_size;
bd5635a1 675 symbuf_idx = 0;
bd5635a1
RP
676}
677
7d9884b9 678#define SWAP_SYMBOL(symp, abfd) \
bd5635a1 679 { \
7d9884b9 680 (symp)->n_strx = bfd_h_get_32(abfd, \
afe4ca15 681 (unsigned char *)&(symp)->n_strx); \
7d9884b9 682 (symp)->n_desc = bfd_h_get_16 (abfd, \
bd5635a1 683 (unsigned char *)&(symp)->n_desc); \
7d9884b9 684 (symp)->n_value = bfd_h_get_32 (abfd, \
bd5635a1
RP
685 (unsigned char *)&(symp)->n_value); \
686 }
687
688/* Invariant: The symbol pointed to by symbuf_idx is the first one
689 that hasn't been swapped. Swap the symbol at the same time
690 that symbuf_idx is incremented. */
691
692/* dbx allows the text of a symbol name to be continued into the
693 next symbol name! When such a continuation is encountered
694 (a \ at the end of the text of a name)
695 call this function to get the continuation. */
696
021959e2 697static char *
aab77d5f 698dbx_next_symbol_text ()
bd5635a1
RP
699{
700 if (symbuf_idx == symbuf_end)
7d9884b9 701 fill_symbuf (symfile_bfd);
bd5635a1 702 symnum++;
7d9884b9 703 SWAP_SYMBOL(&symbuf[symbuf_idx], symfile_bfd);
9342ecb9
JG
704 return symbuf[symbuf_idx++].n_strx + stringtab_global
705 + file_string_table_offset;
bd5635a1
RP
706}
707\f
708/* Initializes storage for all of the partial symbols that will be
709 created by read_dbx_symtab and subsidiaries. */
710
711static void
3624c875 712init_psymbol_list (objfile)
021959e2 713 struct objfile *objfile;
bd5635a1
RP
714{
715 /* Free any previously allocated psymbol lists. */
021959e2 716 if (objfile -> global_psymbols.list)
ac88ca20 717 mfree (objfile -> md, (PTR)objfile -> global_psymbols.list);
021959e2 718 if (objfile -> static_psymbols.list)
ac88ca20 719 mfree (objfile -> md, (PTR)objfile -> static_psymbols.list);
bd5635a1
RP
720
721 /* Current best guess is that there are approximately a twentieth
722 of the total symbols (in a debugging file) are global or static
723 oriented symbols */
3624c875
FF
724 objfile -> global_psymbols.size = DBX_SYMCOUNT (objfile) / 10;
725 objfile -> static_psymbols.size = DBX_SYMCOUNT (objfile) / 10;
021959e2 726 objfile -> global_psymbols.next = objfile -> global_psymbols.list = (struct partial_symbol *)
318bf84f 727 xmmalloc (objfile -> md, objfile -> global_psymbols.size * sizeof (struct partial_symbol));
021959e2 728 objfile -> static_psymbols.next = objfile -> static_psymbols.list = (struct partial_symbol *)
318bf84f 729 xmmalloc (objfile -> md, objfile -> static_psymbols.size * sizeof (struct partial_symbol));
bd5635a1
RP
730}
731
732/* Initialize the list of bincls to contain none and have some
733 allocated. */
734
735static void
021959e2 736init_bincl_list (number, objfile)
bd5635a1 737 int number;
021959e2 738 struct objfile *objfile;
bd5635a1
RP
739{
740 bincls_allocated = number;
741 next_bincl = bincl_list = (struct header_file_location *)
318bf84f 742 xmmalloc (objfile -> md, bincls_allocated * sizeof(struct header_file_location));
bd5635a1
RP
743}
744
745/* Add a bincl to the list. */
746
747static void
748add_bincl_to_list (pst, name, instance)
749 struct partial_symtab *pst;
750 char *name;
751 int instance;
752{
753 if (next_bincl >= bincl_list + bincls_allocated)
754 {
755 int offset = next_bincl - bincl_list;
756 bincls_allocated *= 2;
757 bincl_list = (struct header_file_location *)
318bf84f 758 xmrealloc (pst->objfile->md, (char *)bincl_list,
bd5635a1
RP
759 bincls_allocated * sizeof (struct header_file_location));
760 next_bincl = bincl_list + offset;
761 }
762 next_bincl->pst = pst;
763 next_bincl->instance = instance;
764 next_bincl++->name = name;
765}
766
767/* Given a name, value pair, find the corresponding
768 bincl in the list. Return the partial symtab associated
769 with that header_file_location. */
770
9bba3334 771static struct partial_symtab *
bd5635a1
RP
772find_corresponding_bincl_psymtab (name, instance)
773 char *name;
774 int instance;
775{
776 struct header_file_location *bincl;
777
778 for (bincl = bincl_list; bincl < next_bincl; bincl++)
779 if (bincl->instance == instance
2e4964ad 780 && STREQ (name, bincl->name))
bd5635a1
RP
781 return bincl->pst;
782
783 return (struct partial_symtab *) 0;
784}
785
786/* Free the storage allocated for the bincl list. */
787
788static void
021959e2
JG
789free_bincl_list (objfile)
790 struct objfile *objfile;
bd5635a1 791{
ac88ca20 792 mfree (objfile -> md, (PTR)bincl_list);
bd5635a1
RP
793 bincls_allocated = 0;
794}
795
bd5635a1
RP
796/* Given pointers to an a.out symbol table in core containing dbx
797 style data, setup partial_symtab's describing each source file for
3624c875
FF
798 which debugging information is available.
799 SYMFILE_NAME is the name of the file we are reading from
2af231b8
JG
800 and SECTION_OFFSETS is the set of offsets for the various sections
801 of the file (a set of zeros if the mainline program). */
bd5635a1
RP
802
803static void
2af231b8
JG
804read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
805 struct section_offsets *section_offsets;
7d9884b9 806 struct objfile *objfile;
bd5635a1
RP
807 CORE_ADDR text_addr;
808 int text_size;
809{
ac88ca20 810 register struct internal_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch */
bd5635a1 811 register char *namestring;
bd5635a1
RP
812 int nsl;
813 int past_first_source_file = 0;
814 CORE_ADDR last_o_file_start = 0;
815 struct cleanup *old_chain;
7d9884b9 816 bfd *abfd;
bd5635a1
RP
817
818 /* End of the text segment of the executable file. */
819 CORE_ADDR end_of_text_addr;
820
821 /* Current partial symtab */
822 struct partial_symtab *pst;
823
824 /* List of current psymtab's include files */
825 char **psymtab_include_list;
826 int includes_allocated;
827 int includes_used;
828
829 /* Index within current psymtab dependency list */
830 struct partial_symtab **dependency_list;
831 int dependencies_used, dependencies_allocated;
832
9342ecb9
JG
833 /* FIXME. We probably want to change stringtab_global rather than add this
834 while processing every symbol entry. FIXME. */
835 file_string_table_offset = 0;
836 next_file_string_table_offset = 0;
837
3624c875 838 stringtab_global = DBX_STRINGTAB (objfile);
bd5635a1
RP
839
840 pst = (struct partial_symtab *) 0;
841
842 includes_allocated = 30;
843 includes_used = 0;
844 psymtab_include_list = (char **) alloca (includes_allocated *
845 sizeof (char *));
846
847 dependencies_allocated = 30;
848 dependencies_used = 0;
849 dependency_list =
850 (struct partial_symtab **) alloca (dependencies_allocated *
851 sizeof (struct partial_symtab *));
852
7d9884b9 853 old_chain = make_cleanup (free_objfile, objfile);
bd5635a1
RP
854
855 /* Init bincl list */
021959e2
JG
856 init_bincl_list (20, objfile);
857 make_cleanup (free_bincl_list, objfile);
bd5635a1 858
3416d90b 859 last_source_file = NULL;
bd5635a1
RP
860
861#ifdef END_OF_TEXT_DEFAULT
862 end_of_text_addr = END_OF_TEXT_DEFAULT;
863#else
2af231b8
JG
864 end_of_text_addr = text_addr + section_offsets->offsets[SECT_OFF_TEXT]
865 + text_size; /* Relocate */
bd5635a1
RP
866#endif
867
7d9884b9
JG
868 symfile_bfd = objfile->obfd; /* For next_text_symbol */
869 abfd = objfile->obfd;
bd5635a1 870 symbuf_end = symbuf_idx = 0;
aab77d5f 871 next_symbol_text_func = dbx_next_symbol_text;
bd5635a1 872
3624c875 873 for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
bd5635a1
RP
874 {
875 /* Get the symbol for this run and pull out some info */
876 QUIT; /* allow this to be interruptable */
877 if (symbuf_idx == symbuf_end)
7d9884b9 878 fill_symbuf (abfd);
bd5635a1
RP
879 bufp = &symbuf[symbuf_idx++];
880
881 /*
882 * Special case to speed up readin.
883 */
884 if (bufp->n_type == (unsigned char)N_SLINE) continue;
885
7d9884b9 886 SWAP_SYMBOL (bufp, abfd);
bd5635a1
RP
887
888 /* Ok. There is a lot of code duplicated in the rest of this
889 switch statement (for efficiency reasons). Since I don't
890 like duplicating code, I will do my penance here, and
891 describe the code which is duplicated:
892
893 *) The assignment to namestring.
894 *) The call to strchr.
895 *) The addition of a partial symbol the the two partial
896 symbol lists. This last is a large section of code, so
897 I've imbedded it in the following macro.
898 */
899
900/* Set namestring based on bufp. If the string table index is invalid,
901 give a fake name, and print a single error message per symbol file read,
902 rather than abort the symbol reading or flood the user with messages. */
9342ecb9
JG
903
904/*FIXME: Too many adds and indirections in here for the inner loop. */
bd5635a1 905#define SET_NAMESTRING()\
9342ecb9
JG
906 if (((unsigned)bufp->n_strx + file_string_table_offset) >= \
907 DBX_STRINGTAB_SIZE (objfile)) { \
51b80b00 908 complain (&string_table_offset_complaint, symnum); \
bd5635a1
RP
909 namestring = "foo"; \
910 } else \
9342ecb9
JG
911 namestring = bufp->n_strx + file_string_table_offset + \
912 DBX_STRINGTAB (objfile)
bd5635a1 913
7e258d18
PB
914#define CUR_SYMBOL_TYPE bufp->n_type
915#define CUR_SYMBOL_VALUE bufp->n_value
916#define DBXREAD_ONLY
2af231b8
JG
917#define START_PSYMTAB(ofile,secoff,fname,low,symoff,global_syms,static_syms)\
918 start_psymtab(ofile, secoff, fname, low, symoff, global_syms, static_syms)
7e258d18
PB
919#define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps)\
920 end_psymtab(pst,ilist,ninc,c_off,c_text,dep_list,n_deps)
aab77d5f 921
7e258d18 922#include "partial-stab.h"
bd5635a1
RP
923 }
924
925 /* If there's stuff to be cleaned up, clean it up. */
3624c875 926 if (DBX_SYMCOUNT (objfile) > 0 /* We have some syms */
9342ecb9
JG
927/*FIXME, does this have a bug at start address 0? */
928 && last_o_file_start
3624c875
FF
929 && objfile -> ei.entry_point < bufp->n_value
930 && objfile -> ei.entry_point >= last_o_file_start)
bd5635a1 931 {
3624c875
FF
932 objfile -> ei.entry_file_lowpc = last_o_file_start;
933 objfile -> ei.entry_file_highpc = bufp->n_value;
bd5635a1
RP
934 }
935
936 if (pst)
937 {
938 end_psymtab (pst, psymtab_include_list, includes_used,
afe4ca15 939 symnum * symbol_size, end_of_text_addr,
7e258d18 940 dependency_list, dependencies_used);
bd5635a1
RP
941 }
942
021959e2 943 free_bincl_list (objfile);
bd5635a1
RP
944 discard_cleanups (old_chain);
945}
946
4a35d6e9
FF
947/* Allocate and partially fill a partial symtab. It will be
948 completely filled at the end of the symbol list.
949
950 SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
951 is the address relative to which its symbols are (incremental) or 0
952 (normal). */
953
bd5635a1 954
7e258d18 955struct partial_symtab *
2af231b8 956start_psymtab (objfile, section_offsets,
bd5635a1 957 filename, textlow, ldsymoff, global_syms, static_syms)
7d9884b9 958 struct objfile *objfile;
2af231b8 959 struct section_offsets *section_offsets;
bd5635a1
RP
960 char *filename;
961 CORE_ADDR textlow;
962 int ldsymoff;
963 struct partial_symbol *global_syms;
964 struct partial_symbol *static_syms;
965{
966 struct partial_symtab *result =
2af231b8 967 start_psymtab_common(objfile, section_offsets,
021959e2 968 filename, textlow, global_syms, static_syms);
bd5635a1 969
021959e2
JG
970 result->read_symtab_private = (char *)
971 obstack_alloc (&objfile -> psymbol_obstack, sizeof (struct symloc));
972 LDSYMOFF(result) = ldsymoff;
bd5635a1 973 result->read_symtab = dbx_psymtab_to_symtab;
9342ecb9
JG
974 SYMBOL_SIZE(result) = symbol_size;
975 SYMBOL_OFFSET(result) = symbol_table_offset;
976 STRING_OFFSET(result) = string_table_offset;
977 FILE_STRING_OFFSET(result) = file_string_table_offset;
bd5635a1 978
2af231b8
JG
979 /* If we're handling an ELF file, drag some section-relocation info
980 for this source file out of the ELF symbol table, to compensate for
981 Sun brain death. This replaces the section_offsets in this psymtab,
982 if successful. */
983 elfstab_offset_sections (objfile, result);
984
2e4964ad
FF
985 /* Deduce the source language from the filename for this psymtab. */
986 psymtab_language = deduce_language_from_filename (filename);
987
bd5635a1
RP
988 return result;
989}
990
bd5635a1
RP
991/* Close off the current usage of a partial_symbol table entry. This
992 involves setting the correct number of includes (with a realloc),
993 setting the high text mark, setting the symbol length in the
994 executable, and setting the length of the global and static lists
995 of psymbols.
996
997 The global symbols and static symbols are then seperately sorted.
998
999 Then the partial symtab is put on the global list.
1000 *** List variables and peculiarities of same. ***
1001 */
021959e2 1002
7e258d18 1003void
bd5635a1 1004end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
7e258d18 1005 capping_text, dependency_list, number_dependencies)
bd5635a1
RP
1006 struct partial_symtab *pst;
1007 char **include_list;
1008 int num_includes;
1009 int capping_symbol_offset;
1010 CORE_ADDR capping_text;
1011 struct partial_symtab **dependency_list;
1012 int number_dependencies;
7e258d18 1013/* struct partial_symbol *capping_global, *capping_static;*/
bd5635a1
RP
1014{
1015 int i;
9342ecb9 1016 struct partial_symtab *p1;
021959e2 1017 struct objfile *objfile = pst -> objfile;
bd5635a1 1018
7e258d18
PB
1019 if (capping_symbol_offset != -1)
1020 LDSYMLEN(pst) = capping_symbol_offset - LDSYMOFF(pst);
bd5635a1
RP
1021 pst->texthigh = capping_text;
1022
9342ecb9
JG
1023 /* Under Solaris, the N_SO symbols always have a value of 0,
1024 instead of the usual address of the .o file. Therefore,
1025 we have to do some tricks to fill in texthigh and textlow.
1026 The first trick is in partial-stab.h: if we see a static
1027 or global function, and the textlow for the current pst
1028 is still 0, then we use that function's address for
1029 the textlow of the pst.
1030
1031 Now, to fill in texthigh, we remember the last function seen
1032 in the .o file (also in partial-stab.h). Also, there's a hack in
1033 bfd/elf.c and gdb/elfread.c to pass the ELF st_size field
1034 to here via the misc_info field. Therefore, we can fill in
1035 a reliable texthigh by taking the address plus size of the
1036 last function in the file.
1037
1038 Unfortunately, that does not cover the case where the last function
1039 in the file is static. See the paragraph below for more comments
1040 on this situation.
1041
1042 Finally, if we have a valid textlow for the current file, we run
1043 down the partial_symtab_list filling in previous texthighs that
1044 are still unknown. */
1045
bcbf9559 1046 if (pst->texthigh == 0 && last_function_name) {
9342ecb9
JG
1047 char *p;
1048 int n;
1049 struct minimal_symbol *minsym;
1050
1051 p = strchr (last_function_name, ':');
1052 if (p == NULL)
1053 p = last_function_name;
1054 n = p - last_function_name;
1055 p = alloca (n + 1);
1056 strncpy (p, last_function_name, n);
1057 p[n] = 0;
1058
1059 minsym = lookup_minimal_symbol (p, objfile);
1060
1061 if (minsym) {
2e4964ad
FF
1062 pst->texthigh = SYMBOL_VALUE_ADDRESS (minsym) +
1063 (int) MSYMBOL_INFO (minsym);
9342ecb9
JG
1064 } else {
1065 /* This file ends with a static function, and it's
1066 difficult to imagine how hard it would be to track down
1067 the elf symbol. Luckily, most of the time no one will notice,
1068 since the next file will likely be compiled with -g, so
1069 the code below will copy the first fuction's start address
1070 back to our texthigh variable. (Also, if this file is the
1071 last one in a dynamically linked program, texthigh already
1072 has the right value.) If the next file isn't compiled
1073 with -g, then the last function in this file winds up owning
1074 all of the text space up to the next -g file, or the end (minus
1075 shared libraries). This only matters for single stepping,
1076 and even then it will still work, except that it will single
1077 step through all of the covered functions, instead of setting
1078 breakpoints around them as it usualy does. This makes it
1079 pretty slow, but at least it doesn't fail.
1080
1081 We can fix this with a fairly big change to bfd, but we need
1082 to coordinate better with Cygnus if we want to do that. FIXME. */
1083 }
1084 last_function_name = NULL;
1085 }
1086
1087 /* this test will be true if the last .o file is only data */
1088 if (pst->textlow == 0)
1089 pst->textlow = pst->texthigh;
1090
bcbf9559
JG
1091 /* If we know our own starting text address, then walk through all other
1092 psymtabs for this objfile, and if any didn't know their ending text
1093 address, set it to our starting address. Take care to not set our
1094 own ending address to our starting address, nor to set addresses on
1095 `dependency' files that have both textlow and texthigh zero. */
9342ecb9
JG
1096 if (pst->textlow) {
1097 ALL_OBJFILE_PSYMTABS (objfile, p1) {
bcbf9559 1098 if (p1->texthigh == 0 && p1->textlow != 0 && p1 != pst) {
9342ecb9
JG
1099 p1->texthigh = pst->textlow;
1100 /* if this file has only data, then make textlow match texthigh */
1101 if (p1->textlow == 0)
1102 p1->textlow = p1->texthigh;
1103 }
1104 }
1105 }
1106
1107 /* End of kludge for patching Solaris textlow and texthigh. */
1108
1109
bd5635a1 1110 pst->n_global_syms =
021959e2 1111 objfile->global_psymbols.next - (objfile->global_psymbols.list + pst->globals_offset);
bd5635a1 1112 pst->n_static_syms =
021959e2 1113 objfile->static_psymbols.next - (objfile->static_psymbols.list + pst->statics_offset);
bd5635a1
RP
1114
1115 pst->number_of_dependencies = number_dependencies;
1116 if (number_dependencies)
1117 {
1118 pst->dependencies = (struct partial_symtab **)
021959e2 1119 obstack_alloc (&objfile->psymbol_obstack,
bd5635a1 1120 number_dependencies * sizeof (struct partial_symtab *));
7e258d18 1121 memcpy (pst->dependencies, dependency_list,
bd5635a1
RP
1122 number_dependencies * sizeof (struct partial_symtab *));
1123 }
1124 else
1125 pst->dependencies = 0;
1126
1127 for (i = 0; i < num_includes; i++)
1128 {
bd5635a1 1129 struct partial_symtab *subpst =
021959e2 1130 allocate_psymtab (include_list[i], objfile);
7d9884b9 1131
2af231b8 1132 subpst->section_offsets = pst->section_offsets;
021959e2
JG
1133 subpst->read_symtab_private =
1134 (char *) obstack_alloc (&objfile->psymbol_obstack,
1135 sizeof (struct symloc));
4a35d6e9
FF
1136 LDSYMOFF(subpst) =
1137 LDSYMLEN(subpst) =
bd5635a1
RP
1138 subpst->textlow =
1139 subpst->texthigh = 0;
1140
3f83182d
JG
1141 /* We could save slight bits of space by only making one of these,
1142 shared by the entire set of include files. FIXME-someday. */
bd5635a1 1143 subpst->dependencies = (struct partial_symtab **)
021959e2 1144 obstack_alloc (&objfile->psymbol_obstack,
bd5635a1
RP
1145 sizeof (struct partial_symtab *));
1146 subpst->dependencies[0] = pst;
1147 subpst->number_of_dependencies = 1;
1148
1149 subpst->globals_offset =
1150 subpst->n_global_syms =
1151 subpst->statics_offset =
1152 subpst->n_static_syms = 0;
1153
1154 subpst->readin = 0;
9a822037 1155 subpst->symtab = 0;
2707b48a 1156 subpst->read_symtab = pst->read_symtab;
bd5635a1
RP
1157 }
1158
021959e2 1159 sort_pst_symbols (pst);
bd5635a1 1160
f9623881
JG
1161 /* If there is already a psymtab or symtab for a file of this name, remove it.
1162 (If there is a symtab, more drastic things also happen.)
1163 This happens in VxWorks. */
1164 free_named_symtabs (pst->filename);
1165
7d9884b9
JG
1166 if (num_includes == 0
1167 && number_dependencies == 0
1168 && pst->n_global_syms == 0
1169 && pst->n_static_syms == 0) {
1170 /* Throw away this psymtab, it's empty. We can't deallocate it, since
1171 it is on the obstack, but we can forget to chain it on the list. */
318bf84f
FF
1172 struct partial_symtab *prev_pst;
1173
1174 /* First, snip it out of the psymtab chain */
1175
1176 if (pst->objfile->psymtabs == pst)
1177 pst->objfile->psymtabs = pst->next;
1178 else
1179 for (prev_pst = pst->objfile->psymtabs; prev_pst; prev_pst = pst->next)
1180 if (prev_pst->next == pst)
1181 prev_pst->next = pst->next;
1182
1183 /* Next, put it on a free list for recycling */
1184
1185 pst->next = pst->objfile->free_psymtabs;
1186 pst->objfile->free_psymtabs = pst;
7d9884b9 1187 }
bd5635a1
RP
1188}
1189\f
1190static void
4c07f28d 1191dbx_psymtab_to_symtab_1 (pst)
bd5635a1 1192 struct partial_symtab *pst;
bd5635a1
RP
1193{
1194 struct cleanup *old_chain;
1195 int i;
1196
1197 if (!pst)
1198 return;
1199
1200 if (pst->readin)
1201 {
1202 fprintf (stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
1203 pst->filename);
1204 return;
1205 }
1206
afe4ca15 1207 /* Read in all partial symtabs on which this one is dependent */
bd5635a1
RP
1208 for (i = 0; i < pst->number_of_dependencies; i++)
1209 if (!pst->dependencies[i]->readin)
1210 {
1211 /* Inform about additional files that need to be read in. */
1212 if (info_verbose)
1213 {
1214 fputs_filtered (" ", stdout);
1215 wrap_here ("");
1216 fputs_filtered ("and ", stdout);
1217 wrap_here ("");
1218 printf_filtered ("%s...", pst->dependencies[i]->filename);
1219 wrap_here (""); /* Flush output */
1220 fflush (stdout);
1221 }
4c07f28d 1222 dbx_psymtab_to_symtab_1 (pst->dependencies[i]);
bd5635a1
RP
1223 }
1224
4a35d6e9 1225 if (LDSYMLEN(pst)) /* Otherwise it's a dummy */
bd5635a1
RP
1226 {
1227 /* Init stuff necessary for reading in symbols */
3416d90b 1228 stabsread_init ();
c0302457 1229 buildsym_init ();
bd5635a1 1230 old_chain = make_cleanup (really_free_pendings, 0);
9342ecb9 1231 file_string_table_offset = FILE_STRING_OFFSET (pst);
4c07f28d
FF
1232 symbol_size = SYMBOL_SIZE (pst);
1233
1234 /* Read in this file's symbols */
1235 bfd_seek (pst->objfile->obfd, SYMBOL_OFFSET (pst), L_SET);
574dac8e 1236 read_ofile_symtab (pst);
9404978d 1237 sort_symtab_syms (pst->symtab);
bd5635a1
RP
1238
1239 do_cleanups (old_chain);
1240 }
1241
1242 pst->readin = 1;
1243}
1244
ac88ca20
JG
1245/* Read in all of the symbols for a given psymtab for real.
1246 Be verbose about it if the user wants that. */
1247
bd5635a1
RP
1248static void
1249dbx_psymtab_to_symtab (pst)
1250 struct partial_symtab *pst;
1251{
bd5635a1 1252 bfd *sym_bfd;
bd5635a1
RP
1253
1254 if (!pst)
1255 return;
1256
1257 if (pst->readin)
1258 {
1259 fprintf (stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
1260 pst->filename);
1261 return;
1262 }
1263
4a35d6e9 1264 if (LDSYMLEN(pst) || pst->number_of_dependencies)
bd5635a1
RP
1265 {
1266 /* Print the message now, before reading the string table,
1267 to avoid disconcerting pauses. */
1268 if (info_verbose)
1269 {
1270 printf_filtered ("Reading in symbols for %s...", pst->filename);
1271 fflush (stdout);
1272 }
1273
7d9884b9 1274 sym_bfd = pst->objfile->obfd;
bd5635a1 1275
aab77d5f
PB
1276 next_symbol_text_func = dbx_next_symbol_text;
1277
4c07f28d 1278 dbx_psymtab_to_symtab_1 (pst);
bd5635a1
RP
1279
1280 /* Match with global symbols. This only needs to be done once,
1281 after all of the symtabs and dependencies have been read in. */
021959e2 1282 scan_file_globals (pst->objfile);
bd5635a1 1283
bd5635a1
RP
1284 /* Finish up the debug error message. */
1285 if (info_verbose)
1286 printf_filtered ("done.\n");
1287 }
1288}
1289
574dac8e 1290/* Read in a defined section of a specific object file's symbols. */
9342ecb9 1291
574dac8e
JK
1292static void
1293read_ofile_symtab (pst)
1294 struct partial_symtab *pst;
bd5635a1
RP
1295{
1296 register char *namestring;
7d9884b9 1297 register struct internal_nlist *bufp;
bd5635a1 1298 unsigned char type;
afe4ca15 1299 unsigned max_symnum;
7d9884b9 1300 register bfd *abfd;
3416d90b 1301 struct symtab *rtn;
574dac8e
JK
1302 struct objfile *objfile;
1303 int sym_offset; /* Offset to start of symbols to read */
1304 int sym_size; /* Size of symbols to read */
1305 CORE_ADDR text_offset; /* Start of text segment for symbols */
1306 int text_size; /* Size of text segment for symbols */
1307 struct section_offsets *section_offsets;
1308
1309 objfile = pst->objfile;
1310 sym_offset = LDSYMOFF(pst);
1311 sym_size = LDSYMLEN(pst);
1312 text_offset = pst->textlow;
1313 text_size = pst->texthigh - pst->textlow;
1314 section_offsets = pst->section_offsets;
7d9884b9 1315
021959e2 1316 current_objfile = objfile;
3416d90b 1317 subfile_stack = NULL;
bd5635a1 1318
3624c875 1319 stringtab_global = DBX_STRINGTAB (objfile);
3416d90b 1320 last_source_file = NULL;
bd5635a1 1321
7d9884b9
JG
1322 abfd = objfile->obfd;
1323 symfile_bfd = objfile->obfd; /* Implicit param to next_text_symbol */
bd5635a1
RP
1324 symbuf_end = symbuf_idx = 0;
1325
1326 /* It is necessary to actually read one symbol *before* the start
1327 of this symtab's symbols, because the GCC_COMPILED_FLAG_SYMBOL
1328 occurs before the N_SO symbol.
1329
1330 Detecting this in read_dbx_symtab
1331 would slow down initial readin, so we look for it here instead. */
9342ecb9 1332 if (!processing_acc_compilation && sym_offset >= (int)symbol_size)
bd5635a1 1333 {
7d9884b9
JG
1334 bfd_seek (symfile_bfd, sym_offset - symbol_size, L_INCR);
1335 fill_symbuf (abfd);
bd5635a1 1336 bufp = &symbuf[symbuf_idx++];
7d9884b9 1337 SWAP_SYMBOL (bufp, abfd);
bd5635a1 1338
afe4ca15 1339 SET_NAMESTRING ();
bd5635a1 1340
1aed6766
SG
1341 processing_gcc_compilation = 0;
1342 if (bufp->n_type == N_TEXT)
1343 {
2e4964ad 1344 if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1aed6766 1345 processing_gcc_compilation = 1;
2e4964ad 1346 else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1aed6766
SG
1347 processing_gcc_compilation = 2;
1348 }
3416d90b
FF
1349
1350 /* Try to select a C++ demangling based on the compilation unit
1351 producer. */
1352
1353 if (processing_gcc_compilation)
1354 {
1aed6766 1355 if (AUTO_DEMANGLING)
3416d90b
FF
1356 {
1357 set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1358 }
3416d90b 1359 }
bd5635a1
RP
1360 }
1361 else
1362 {
1363 /* The N_SO starting this symtab is the first symbol, so we
1364 better not check the symbol before it. I'm not this can
1365 happen, but it doesn't hurt to check for it. */
7d9884b9 1366 bfd_seek (symfile_bfd, sym_offset, L_INCR);
bd5635a1
RP
1367 processing_gcc_compilation = 0;
1368 }
1369
1370 if (symbuf_idx == symbuf_end)
7d9884b9 1371 fill_symbuf (abfd);
bd5635a1
RP
1372 bufp = &symbuf[symbuf_idx];
1373 if (bufp->n_type != (unsigned char)N_SO)
1374 error("First symbol in segment of executable not a source symbol");
1375
afe4ca15
JG
1376 max_symnum = sym_size / symbol_size;
1377
bd5635a1 1378 for (symnum = 0;
afe4ca15 1379 symnum < max_symnum;
bd5635a1
RP
1380 symnum++)
1381 {
1382 QUIT; /* Allow this to be interruptable */
1383 if (symbuf_idx == symbuf_end)
7d9884b9 1384 fill_symbuf(abfd);
bd5635a1 1385 bufp = &symbuf[symbuf_idx++];
7d9884b9 1386 SWAP_SYMBOL (bufp, abfd);
bd5635a1 1387
c0302457 1388 type = bufp->n_type;
bd5635a1 1389
afe4ca15 1390 SET_NAMESTRING ();
bd5635a1 1391
7d9884b9 1392 if (type & N_STAB) {
c55e6167 1393 process_one_symbol (type, bufp->n_desc, bufp->n_value,
2af231b8 1394 namestring, section_offsets, objfile);
7d9884b9 1395 }
bd5635a1
RP
1396 /* We skip checking for a new .o or -l file; that should never
1397 happen in this routine. */
1aed6766 1398 else if (type == N_TEXT)
3416d90b
FF
1399 {
1400 /* I don't think this code will ever be executed, because
1401 the GCC_COMPILED_FLAG_SYMBOL usually is right before
1402 the N_SO symbol which starts this source file.
1403 However, there is no reason not to accept
1404 the GCC_COMPILED_FLAG_SYMBOL anywhere. */
1aed6766 1405
2e4964ad 1406 if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1aed6766 1407 processing_gcc_compilation = 1;
2e4964ad 1408 else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1aed6766
SG
1409 processing_gcc_compilation = 2;
1410
1aed6766 1411 if (AUTO_DEMANGLING)
3416d90b
FF
1412 {
1413 set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1414 }
3416d90b 1415 }
bd5635a1
RP
1416 else if (type & N_EXT || type == (unsigned char)N_TEXT
1417 || type == (unsigned char)N_NBTEXT
0c4d2cc2 1418 ) {
bd5635a1
RP
1419 /* Global symbol: see if we came across a dbx defintion for
1420 a corresponding symbol. If so, store the value. Remove
1421 syms from the chain when their values are stored, but
1422 search the whole chain, as there may be several syms from
1423 different files with the same name. */
1424 /* This is probably not true. Since the files will be read
1425 in one at a time, each reference to a global symbol will
1426 be satisfied in each file as it appears. So we skip this
1427 section. */
1428 ;
0c4d2cc2 1429 }
bd5635a1 1430 }
9404978d 1431
021959e2 1432 current_objfile = NULL;
9342ecb9
JG
1433
1434 /* In a Solaris elf file, this variable, which comes from the
1435 value of the N_SO symbol, will still be 0. Luckily, text_offset,
1436 which comes from pst->textlow is correct. */
1437 if (last_source_start_addr == 0)
1438 last_source_start_addr = text_offset;
1439
574dac8e
JK
1440 pst->symtab = end_symtab (text_offset + text_size, 0, 0, objfile,
1441 SECT_OFF_TEXT);
3416d90b 1442 end_stabs ();
bd5635a1 1443}
574dac8e 1444
bd5635a1 1445\f
c55e6167
JG
1446/* This handles a single symbol from the symbol-file, building symbols
1447 into a GDB symtab. It takes these arguments and an implicit argument.
1448
1449 TYPE is the type field of the ".stab" symbol entry.
1450 DESC is the desc field of the ".stab" entry.
1451 VALU is the value field of the ".stab" entry.
1452 NAME is the symbol name, in our address space.
2af231b8
JG
1453 SECTION_OFFSETS is a set of amounts by which the sections of this object
1454 file were relocated when it was loaded into memory.
1455 All symbols that refer
1456 to memory locations need to be offset by these amounts.
9342ecb9 1457 OBJFILE is the object file from which we are reading symbols.
c55e6167
JG
1458 It is used in end_symtab. */
1459
7e258d18 1460void
2af231b8 1461process_one_symbol (type, desc, valu, name, section_offsets, objfile)
bd5635a1
RP
1462 int type, desc;
1463 CORE_ADDR valu;
1464 char *name;
2af231b8 1465 struct section_offsets *section_offsets;
9342ecb9 1466 struct objfile *objfile;
bd5635a1 1467{
a5e6391b
JK
1468#ifdef SUN_FIXED_LBRAC_BUG
1469 /* If SUN_FIXED_LBRAC_BUG is defined, then it tells us whether we need
1470 to correct the address of N_LBRAC's. If it is not defined, then
1471 we never need to correct the addresses. */
1472
0cf9329b 1473 /* This records the last pc address we've seen. We depend on there being
bd5635a1
RP
1474 an SLINE or FUN or SO before the first LBRAC, since the variable does
1475 not get reset in between reads of different symbol files. */
1476 static CORE_ADDR last_pc_address;
a5e6391b 1477#endif
8357834f 1478
bd5635a1 1479 register struct context_stack *new;
9342ecb9
JG
1480 /* This remembers the address of the start of a function. It is used
1481 because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries are
1482 relative to the current function's start address. On systems
2af231b8
JG
1483 other than Solaris 2, this just holds the SECT_OFF_TEXT value, and is
1484 used to relocate these symbol types rather than SECTION_OFFSETS. */
9342ecb9 1485 static CORE_ADDR function_start_offset;
bd5635a1
RP
1486 char *colon_pos;
1487
574dac8e
JK
1488 /* If this is nonzero, N_LBRAC, N_RBRAC, and N_SLINE entries are relative
1489 to the function start address. */
1490 int block_address_function_relative;
1491
8357834f
JK
1492 /* If this is nonzero, we've seen a non-gcc N_OPT symbol for this source
1493 file. */
1494 int n_opt_found;
1495
574dac8e
JK
1496 /* This is true for Solaris (and all other stabs-in-elf systems, hopefully,
1497 since it would be silly to do things differently from Solaris), and
1498 false for SunOS4 and other a.out file formats. */
1499 block_address_function_relative =
1500 0 == strncmp (bfd_get_target (objfile->obfd), "elf", 3);
1501
1502 if (!block_address_function_relative)
1503 /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
1504 function start address, so just use the text offset. */
1505 function_start_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT);
51b80b00 1506
bd5635a1
RP
1507 /* Something is wrong if we see real data before
1508 seeing a source file name. */
1509
3416d90b 1510 if (last_source_file == NULL && type != (unsigned char)N_SO)
bd5635a1 1511 {
a5e6391b
JK
1512 /* Ignore any symbols which appear before an N_SO symbol. Currently
1513 no one puts symbols there, but we should deal gracefully with the
1514 case. A complain()t might be in order (if !IGNORE_SYMBOL (type)),
1515 but this should not be an error (). */
1516 return;
bd5635a1
RP
1517 }
1518
1519 switch (type)
1520 {
1521 case N_FUN:
1522 case N_FNAME:
0bd83fd7 1523#if 0
3c03b5de
SG
1524/* It seems that the Sun ANSI C compiler (acc) replaces N_FUN with N_GSYM and
1525 N_STSYM with a type code of f or F. Can't enable this until we get some
4c7c6bab 1526 stuff straightened out with psymtabs. FIXME. */
0bd83fd7 1527
3c03b5de
SG
1528 case N_GSYM:
1529 case N_STSYM:
0bd83fd7 1530#endif /* 0 */
3c03b5de 1531
2af231b8
JG
1532 /* Relocate for dynamic loading */
1533 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
c55e6167 1534
bd5635a1
RP
1535 /* Either of these types of symbols indicates the start of
1536 a new function. We must process its "name" normally for dbx,
1537 but also record the start of a new lexical context, and possibly
1538 also the end of the lexical context for the previous function. */
1539 /* This is not always true. This type of symbol may indicate a
1540 text segment variable. */
1541
bd5635a1
RP
1542 colon_pos = strchr (name, ':');
1543 if (!colon_pos++
1544 || (*colon_pos != 'f' && *colon_pos != 'F'))
1545 {
9342ecb9 1546 define_symbol (valu, name, desc, type, objfile);
bd5635a1
RP
1547 break;
1548 }
1549
a5e6391b 1550#ifdef SUN_FIXED_LBRAC_BUG
3c03b5de 1551 last_pc_address = valu; /* Save for SunOS bug circumcision */
a5e6391b 1552#endif
3c03b5de 1553
574dac8e
JK
1554 if (block_address_function_relative)
1555 /* On Solaris 2.0 compilers, the block addresses and N_SLINE's
1556 are relative to the start of the function. On normal systems,
1557 and when using gcc on Solaris 2.0, these addresses are just
1558 absolute, or relative to the N_SO, depending on
1559 BLOCK_ADDRESS_ABSOLUTE. */
1560 function_start_offset = valu;
9342ecb9 1561
bd5635a1
RP
1562 within_function = 1;
1563 if (context_stack_depth > 0)
1564 {
7d9884b9 1565 new = pop_context ();
bd5635a1
RP
1566 /* Make a block for the local symbols within. */
1567 finish_block (new->name, &local_symbols, new->old_blocks,
9342ecb9 1568 new->start_addr, valu, objfile);
bd5635a1
RP
1569 }
1570 /* Stack must be empty now. */
1571 if (context_stack_depth != 0)
51b80b00 1572 complain (&lbrac_unmatched_complaint, symnum);
bd5635a1 1573
7d9884b9 1574 new = push_context (0, valu);
9342ecb9 1575 new->name = define_symbol (valu, name, desc, type, objfile);
bd5635a1
RP
1576 break;
1577
bd5635a1
RP
1578 case N_LBRAC:
1579 /* This "symbol" just indicates the start of an inner lexical
1580 context within a function. */
1581
574dac8e
JK
1582#if defined(BLOCK_ADDRESS_ABSOLUTE)
1583 /* Relocate for dynamic loading (?). */
9342ecb9 1584 valu += function_start_offset;
c55e6167 1585#else
574dac8e
JK
1586 if (block_address_function_relative)
1587 /* Relocate for Sun ELF acc fn-relative syms. */
1588 valu += function_start_offset;
1589 else
1590 /* On most machines, the block addresses are relative to the
1591 N_SO, the linker did not relocate them (sigh). */
1592 valu += last_source_start_addr;
bd5635a1
RP
1593#endif
1594
a5e6391b 1595#ifdef SUN_FIXED_LBRAC_BUG
8357834f 1596 if (!SUN_FIXED_LBRAC_BUG && valu < last_pc_address) {
bd5635a1 1597 /* Patch current LBRAC pc value to match last handy pc value */
51b80b00 1598 complain (&lbrac_complaint);
bd5635a1
RP
1599 valu = last_pc_address;
1600 }
a5e6391b 1601#endif
7d9884b9 1602 new = push_context (desc, valu);
bd5635a1
RP
1603 break;
1604
1605 case N_RBRAC:
1606 /* This "symbol" just indicates the end of an inner lexical
1607 context that was started with N_LBRAC. */
1608
574dac8e
JK
1609#if defined(BLOCK_ADDRESS_ABSOLUTE)
1610 /* Relocate for dynamic loading (?). */
9342ecb9 1611 valu += function_start_offset;
c55e6167 1612#else
574dac8e
JK
1613 if (block_address_function_relative)
1614 /* Relocate for Sun ELF acc fn-relative syms. */
1615 valu += function_start_offset;
1616 else
1617 /* On most machines, the block addresses are relative to the
1618 N_SO, the linker did not relocate them (sigh). */
1619 valu += last_source_start_addr;
bd5635a1
RP
1620#endif
1621
7d9884b9 1622 new = pop_context();
bd5635a1 1623 if (desc != new->depth)
51b80b00 1624 complain (&lbrac_mismatch_complaint, symnum);
bd5635a1
RP
1625
1626 /* Some compilers put the variable decls inside of an
1627 LBRAC/RBRAC block. This macro should be nonzero if this
1628 is true. DESC is N_DESC from the N_RBRAC symbol.
0cf9329b
PB
1629 GCC_P is true if we've detected the GCC_COMPILED_SYMBOL
1630 or the GCC2_COMPILED_SYMBOL. */
bd5635a1
RP
1631#if !defined (VARIABLES_INSIDE_BLOCK)
1632#define VARIABLES_INSIDE_BLOCK(desc, gcc_p) 0
1633#endif
1634
1635 /* Can only use new->locals as local symbols here if we're in
1636 gcc or on a machine that puts them before the lbrack. */
1637 if (!VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1638 local_symbols = new->locals;
1639
1640 /* If this is not the outermost LBRAC...RBRAC pair in the
1641 function, its local symbols preceded it, and are the ones
1642 just recovered from the context stack. Defined the block for them.
1643
1644 If this is the outermost LBRAC...RBRAC pair, there is no
1645 need to do anything; leave the symbols that preceded it
1646 to be attached to the function's own block. However, if
1647 it is so, we need to indicate that we just moved outside
1648 of the function. */
1649 if (local_symbols
1650 && (context_stack_depth
1651 > !VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation)))
1652 {
1653 /* FIXME Muzzle a compiler bug that makes end < start. */
1654 if (new->start_addr > valu)
1655 {
51b80b00 1656 complain (&lbrac_rbrac_complaint);
bd5635a1
RP
1657 new->start_addr = valu;
1658 }
1659 /* Make a block for the local symbols within. */
1660 finish_block (0, &local_symbols, new->old_blocks,
9342ecb9 1661 new->start_addr, valu, objfile);
bd5635a1
RP
1662 }
1663 else
1664 {
1665 within_function = 0;
1666 }
1667 if (VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1668 /* Now pop locals of block just finished. */
1669 local_symbols = new->locals;
1670 break;
1671
9bb30452 1672 case N_FN:
6150cc73 1673 case N_FN_SEQ:
9bb30452 1674 /* This kind of symbol indicates the start of an object file. */
2af231b8
JG
1675 /* Relocate for dynamic loading */
1676 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
bd5635a1
RP
1677 break;
1678
1679 case N_SO:
1680 /* This type of symbol indicates the start of data
1681 for one source file.
1682 Finish the symbol table of the previous source file
1683 (if any) and start accumulating a new symbol table. */
2af231b8
JG
1684 /* Relocate for dynamic loading */
1685 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
c55e6167 1686
8357834f
JK
1687 n_opt_found = 0;
1688
a5e6391b 1689#ifdef SUN_FIXED_LBRAC_BUG
bd5635a1 1690 last_pc_address = valu; /* Save for SunOS bug circumcision */
a5e6391b 1691#endif
8357834f 1692
bd5635a1
RP
1693#ifdef PCC_SOL_BROKEN
1694 /* pcc bug, occasionally puts out SO for SOL. */
1695 if (context_stack_depth > 0)
1696 {
1697 start_subfile (name, NULL);
1698 break;
1699 }
1700#endif
1701 if (last_source_file)
7e258d18
PB
1702 {
1703 /* Check if previous symbol was also an N_SO (with some
1704 sanity checks). If so, that one was actually the directory
1705 name, and the current one is the real file name.
1706 Patch things up. */
6985bc54 1707 if (previous_stab_code == (unsigned char) N_SO)
7e258d18 1708 {
3416d90b 1709 patch_subfile_names (current_subfile, name);
c72af089 1710 break; /* Ignore repeated SOs */
7e258d18 1711 }
65ce5df4 1712 end_symtab (valu, 0, 0, objfile, SECT_OFF_TEXT);
3416d90b 1713 end_stabs ();
7e258d18 1714 }
3416d90b 1715 start_stabs ();
bd5635a1
RP
1716 start_symtab (name, NULL, valu);
1717 break;
1718
c55e6167 1719
bd5635a1
RP
1720 case N_SOL:
1721 /* This type of symbol indicates the start of data for
1722 a sub-source-file, one whose contents were copied or
1723 included in the compilation of the main source file
1724 (whose name was given in the N_SO symbol.) */
2af231b8
JG
1725 /* Relocate for dynamic loading */
1726 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
784fd92b 1727 start_subfile (name, current_subfile->dirname);
bd5635a1
RP
1728 break;
1729
1730 case N_BINCL:
1731 push_subfile ();
1732 add_new_header_file (name, valu);
784fd92b 1733 start_subfile (name, current_subfile->dirname);
bd5635a1
RP
1734 break;
1735
1736 case N_EINCL:
784fd92b 1737 start_subfile (pop_subfile (), current_subfile->dirname);
bd5635a1
RP
1738 break;
1739
1740 case N_EXCL:
1741 add_old_header_file (name, valu);
1742 break;
1743
1744 case N_SLINE:
1745 /* This type of "symbol" really just records
1746 one line-number -- core-address correspondence.
1747 Enter it in the line list for this symbol table. */
9342ecb9
JG
1748 /* Relocate for dynamic loading and for ELF acc fn-relative syms. */
1749 valu += function_start_offset;
a5e6391b 1750#ifdef SUN_FIXED_LBRAC_BUG
bd5635a1 1751 last_pc_address = valu; /* Save for SunOS bug circumcision */
a5e6391b 1752#endif
4137c5fc 1753 record_line (current_subfile, desc, valu);
bd5635a1
RP
1754 break;
1755
1756 case N_BCOMM:
1757 if (common_block)
a5e6391b
JK
1758 {
1759 static struct complaint msg = {
1760 "Invalid symbol data: common within common at symtab pos %d",
1761 0, 0};
1762 complain (&msg, symnum);
1763 }
bd5635a1
RP
1764 common_block = local_symbols;
1765 common_block_i = local_symbols ? local_symbols->nsyms : 0;
1766 break;
1767
1768 case N_ECOMM:
1769 /* Symbols declared since the BCOMM are to have the common block
1770 start address added in when we know it. common_block points to
1771 the first symbol after the BCOMM in the local_symbols list;
1772 copy the list and hang it off the symbol for the common block name
1773 for later fixup. */
1774 {
1775 int i;
1776 struct symbol *sym =
9342ecb9 1777 (struct symbol *) xmmalloc (objfile -> md, sizeof (struct symbol));
4ed3a9ea 1778 memset (sym, 0, sizeof *sym);
bd5635a1
RP
1779 SYMBOL_NAME (sym) = savestring (name, strlen (name));
1780 SYMBOL_CLASS (sym) = LOC_BLOCK;
1781 SYMBOL_NAMESPACE (sym) = (enum namespace)((long)
1782 copy_pending (local_symbols, common_block_i, common_block));
1783 i = hashname (SYMBOL_NAME (sym));
1784 SYMBOL_VALUE_CHAIN (sym) = global_sym_chain[i];
1785 global_sym_chain[i] = sym;
1786 common_block = 0;
1787 break;
1788 }
1789
2af231b8
JG
1790 /* The following symbol types need to have the appropriate offset added
1791 to their value; then we process symbol definitions in the name. */
1792
1793 case N_STSYM: /* Static symbol in data seg */
1794 case N_LCSYM: /* Static symbol in BSS seg */
1795 case N_ROSYM: /* Static symbol in Read-only data seg */
1796 /* HORRID HACK DEPT. However, it's Sun's furgin' fault. FIXME.
1797 Solaris2's stabs-in-coff makes *most* symbols relative
1798 but leaves a few absolute. N_STSYM and friends sit on the fence.
1799 .stab "foo:S...",N_STSYM is absolute (ld relocates it)
1800 .stab "foo:V...",N_STSYM is relative (section base subtracted).
1801 This leaves us no choice but to search for the 'S' or 'V'...
1802 (or pass the whole section_offsets stuff down ONE MORE function
1803 call level, which we really don't want to do). */
1804 {
1805 char *p;
1806 p = strchr (name, ':');
1807 if (p != 0 && p[1] == 'S')
1808 {
1809 /* FIXME! We relocate it by the TEXT offset, in case the
1810 whole module moved in memory. But this is wrong, since
1811 the sections can side around independently. */
1812 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1813 goto define_a_symbol;
1814 }
1815 /* Since it's not the kludge case, re-dispatch to the right handler. */
1816 switch (type) {
1817 case N_STSYM: goto case_N_STSYM;
1818 case N_LCSYM: goto case_N_LCSYM;
1819 case N_ROSYM: goto case_N_ROSYM;
1820 default: abort();
1821 }
1822 }
1823
1824 case_N_STSYM: /* Static symbol in data seg */
c55e6167 1825 case N_DSLINE: /* Source line number, data seg */
2af231b8
JG
1826 valu += ANOFFSET (section_offsets, SECT_OFF_DATA);
1827 goto define_a_symbol;
1828
1829 case_N_LCSYM: /* Static symbol in BSS seg */
c55e6167
JG
1830 case N_BSLINE: /* Source line number, bss seg */
1831 /* N_BROWS: overlaps with N_BSLINE */
2af231b8
JG
1832 valu += ANOFFSET (section_offsets, SECT_OFF_BSS);
1833 goto define_a_symbol;
1834
1835 case_N_ROSYM: /* Static symbol in Read-only data seg */
1836 valu += ANOFFSET (section_offsets, SECT_OFF_RODATA);
1837 goto define_a_symbol;
1838
c55e6167 1839 case N_ENTRY: /* Alternate entry point */
2af231b8
JG
1840 /* Relocate for dynamic loading */
1841 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1842 goto define_a_symbol;
c55e6167
JG
1843
1844 /* The following symbol types don't need the address field relocated,
1845 since it is either unused, or is absolute. */
2af231b8 1846 define_a_symbol:
c55e6167
JG
1847 case N_GSYM: /* Global variable */
1848 case N_NSYMS: /* Number of symbols (ultrix) */
1849 case N_NOMAP: /* No map? (ultrix) */
1850 case N_RSYM: /* Register variable */
1851 case N_DEFD: /* Modula-2 GNU module dependency */
1852 case N_SSYM: /* Struct or union element */
1853 case N_LSYM: /* Local symbol in stack */
1854 case N_PSYM: /* Parameter variable */
1855 case N_LENG: /* Length of preceding symbol type */
1856 if (name)
9342ecb9 1857 define_symbol (valu, name, desc, type, objfile);
bd5635a1
RP
1858 break;
1859
ec8ceca3
JG
1860 /* We use N_OPT to carry the gcc2_compiled flag. Sun uses it
1861 for a bunch of other flags, too. Someday we may parse their
1862 flags; for now we ignore theirs and hope they'll ignore ours. */
1863 case N_OPT: /* Solaris 2: Compiler options */
1864 if (name)
1865 {
2e4964ad 1866 if (STREQ (name, GCC2_COMPILED_FLAG_SYMBOL))
3416d90b 1867 {
1aed6766 1868 processing_gcc_compilation = 2;
3416d90b 1869#if 1 /* Works, but is experimental. -fnf */
1aed6766 1870 if (AUTO_DEMANGLING)
3416d90b
FF
1871 {
1872 set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1873 }
1874#endif
1875 }
8357834f
JK
1876 else
1877 n_opt_found = 1;
ec8ceca3
JG
1878 }
1879 break;
1880
bcbf9559
JG
1881 /* The following symbol types can be ignored. */
1882 case N_OBJ: /* Solaris 2: Object file dir and name */
bcbf9559
JG
1883 /* N_UNDF: Solaris 2: file separator mark */
1884 /* N_UNDF: -- we will never encounter it, since we only process one
1885 file's symbols at once. */
4c7c6bab
JG
1886 case N_ENDM: /* Solaris 2: End of module */
1887 case N_MAIN: /* Name of main routine. */
9342ecb9
JG
1888 break;
1889
c55e6167
JG
1890 /* The following symbol types we don't know how to process. Handle
1891 them in a "default" way, but complain to people who care. */
bd5635a1 1892 default:
2af231b8 1893 case N_CATCH: /* Exception handler catcher */
c55e6167 1894 case N_EHDECL: /* Exception handler name */
c55e6167
JG
1895 case N_PC: /* Global symbol in Pascal */
1896 case N_M2C: /* Modula-2 compilation unit */
1897 /* N_MOD2: overlaps with N_EHDECL */
1898 case N_SCOPE: /* Modula-2 scope information */
1899 case N_ECOML: /* End common (local name) */
1900 case N_NBTEXT: /* Gould Non-Base-Register symbols??? */
1901 case N_NBDATA:
1902 case N_NBBSS:
1903 case N_NBSTS:
1904 case N_NBLCS:
1905 complain (&unknown_symtype_complaint, local_hex_string(type));
bd5635a1 1906 if (name)
9342ecb9 1907 define_symbol (valu, name, desc, type, objfile);
bd5635a1 1908 }
7e258d18
PB
1909
1910 previous_stab_code = type;
bd5635a1
RP
1911}
1912\f
bd5635a1
RP
1913/* Copy a pending list, used to record the contents of a common
1914 block for later fixup. */
1915static struct pending *
1916copy_pending (beg, begi, end)
021959e2 1917 struct pending *beg;
bd5635a1 1918 int begi;
021959e2 1919 struct pending *end;
bd5635a1
RP
1920{
1921 struct pending *new = 0;
1922 struct pending *next;
1923
1924 for (next = beg; next != 0 && (next != end || begi < end->nsyms);
1925 next = next->next, begi = 0)
1926 {
1927 register int j;
1928 for (j = begi; j < next->nsyms; j++)
1929 add_symbol_to_list (next->symbol[j], &new);
1930 }
1931 return new;
1932}
bd5635a1 1933\f
9342ecb9
JG
1934/* Scan and build partial symbols for an ELF symbol file.
1935 This ELF file has already been processed to get its minimal symbols,
1936 and any DWARF symbols that were in it.
1937
1938 This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
1939 rolled into one.
1940
1941 OBJFILE is the object file we are reading symbols from.
1942 ADDR is the address relative to which the symbols are (e.g.
1943 the base address of the text segment).
1944 MAINLINE is true if we are reading the main symbol
1945 table (as opposed to a shared lib or dynamically loaded file).
1946 STABOFFSET and STABSIZE define the location in OBJFILE where the .stab
1947 section exists.
1948 STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
1949 .stabstr section exists.
1950
1951 This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
1952 adjusted for elf details. */
1953
1954void
1aed6766 1955elfstab_build_psymtabs (objfile, section_offsets, mainline,
9342ecb9 1956 staboffset, stabsize,
1aed6766
SG
1957 stabstroffset, stabstrsize)
1958 struct objfile *objfile;
1959 struct section_offsets *section_offsets;
1960 int mainline;
51b80b00 1961 file_ptr staboffset;
1aed6766 1962 unsigned int stabsize;
51b80b00 1963 file_ptr stabstroffset;
1aed6766 1964 unsigned int stabstrsize;
9342ecb9
JG
1965{
1966 int val;
1967 bfd *sym_bfd = objfile->obfd;
1968 char *name = bfd_get_filename (sym_bfd);
1969 struct dbx_symfile_info *info;
1970
2af231b8
JG
1971 /* There is already a dbx_symfile_info allocated by our caller.
1972 It might even contain some info from the ELF symtab to help us. */
1973 info = (struct dbx_symfile_info *) objfile->sym_private;
9342ecb9
JG
1974
1975 DBX_TEXT_SECT (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
1976 if (!DBX_TEXT_SECT (objfile))
1977 error ("Can't find .text section in symbol file");
1978
1979#define ELF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */
1980 DBX_SYMBOL_SIZE (objfile) = ELF_STABS_SYMBOL_SIZE;
1981 DBX_SYMCOUNT (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
1982 DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
1983 DBX_SYMTAB_OFFSET (objfile) = staboffset;
1984
51db2323
FF
1985 if (stabstrsize < 0 /* FIXME: stabstrsize is unsigned; never true! */
1986 || stabstrsize > bfd_get_size (sym_bfd))
9342ecb9
JG
1987 error ("ridiculous string table size: %d bytes", stabstrsize);
1988 DBX_STRINGTAB (objfile) = (char *)
1989 obstack_alloc (&objfile->psymbol_obstack, stabstrsize+1);
1990
1991 /* Now read in the string table in one big gulp. */
1992
1993 val = bfd_seek (sym_bfd, stabstroffset, L_SET);
1994 if (val < 0)
1995 perror_with_name (name);
1996 val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, 1, sym_bfd);
1997 if (val != stabstrsize)
1998 perror_with_name (name);
1999
3416d90b 2000 stabsread_new_init ();
9342ecb9
JG
2001 buildsym_new_init ();
2002 free_header_files ();
2003 init_header_files ();
2004 install_minimal_symbols (objfile);
2005
2006 processing_acc_compilation = 1;
2007
2008 /* In an elf file, we've already installed the minimal symbols that came
2009 from the elf (non-stab) symbol table, so always act like an
2010 incremental load here. */
2af231b8
JG
2011 dbx_symfile_read (objfile, section_offsets, 0);
2012}
2013\f
040b9597
RP
2014/* Scan and build partial symbols for a PA symbol file.
2015 This PA file has already been processed to get its minimal symbols.
2016
2017 OBJFILE is the object file we are reading symbols from.
2018 ADDR is the address relative to which the symbols are (e.g.
2019 the base address of the text segment).
2020 MAINLINE is true if we are reading the main symbol
2021 table (as opposed to a shared lib or dynamically loaded file).
2022
2023 */
2024
2025void
2026pastab_build_psymtabs (objfile, section_offsets, mainline)
2027 struct objfile *objfile;
2028 struct section_offsets *section_offsets;
2029 int mainline;
2030{
2031 free_header_files ();
2032 init_header_files ();
2033
2034 /* In a PA file, we've already installed the minimal symbols that came
2035 from the PA (non-stab) symbol table, so always act like an
2036 incremental load here. */
2037
2038 dbx_symfile_read (objfile, section_offsets, mainline);
2039}
2040\f
2af231b8
JG
2041/* Parse the user's idea of an offset for dynamic linking, into our idea
2042 of how to represent it for fast symbol reading. */
2043
040b9597 2044static struct section_offsets *
2af231b8
JG
2045dbx_symfile_offsets (objfile, addr)
2046 struct objfile *objfile;
2047 CORE_ADDR addr;
2048{
2049 struct section_offsets *section_offsets;
2050 int i;
2051
2052 section_offsets = (struct section_offsets *)
2053 obstack_alloc (&objfile -> psymbol_obstack,
2054 sizeof (struct section_offsets) +
2055 sizeof (section_offsets->offsets) * (SECT_OFF_MAX-1));
2056
2057 for (i = 0; i < SECT_OFF_MAX; i++)
2058 ANOFFSET (section_offsets, i) = addr;
2059
2060 return section_offsets;
9342ecb9
JG
2061}
2062\f
bd5635a1
RP
2063/* Register our willingness to decode symbols for SunOS and a.out and
2064 b.out files handled by BFD... */
80d68b1d
FF
2065static struct sym_fns sunos_sym_fns =
2066{
2067 "sunOs", /* sym_name: name or name prefix of BFD target type */
2068 6, /* sym_namelen: number of significant sym_name chars */
2069 dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */
2070 dbx_symfile_init, /* sym_init: read initial info, setup for sym_read() */
2071 dbx_symfile_read, /* sym_read: read a symbol file into symtab */
2072 dbx_symfile_finish, /* sym_finish: finished with file, cleanup */
2af231b8 2073 dbx_symfile_offsets, /* sym_offsets: parse user's offsets to internal form */
80d68b1d
FF
2074 NULL /* next: pointer to next struct sym_fns */
2075};
bd5635a1 2076
80d68b1d
FF
2077static struct sym_fns aout_sym_fns =
2078{
2079 "a.out", /* sym_name: name or name prefix of BFD target type */
2080 5, /* sym_namelen: number of significant sym_name chars */
2081 dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */
2082 dbx_symfile_init, /* sym_init: read initial info, setup for sym_read() */
2083 dbx_symfile_read, /* sym_read: read a symbol file into symtab */
2084 dbx_symfile_finish, /* sym_finish: finished with file, cleanup */
2af231b8 2085 dbx_symfile_offsets, /* sym_offsets: parse user's offsets to internal form */
80d68b1d
FF
2086 NULL /* next: pointer to next struct sym_fns */
2087};
bd5635a1 2088
80d68b1d
FF
2089static struct sym_fns bout_sym_fns =
2090{
2091 "b.out", /* sym_name: name or name prefix of BFD target type */
2092 5, /* sym_namelen: number of significant sym_name chars */
2093 dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */
2094 dbx_symfile_init, /* sym_init: read initial info, setup for sym_read() */
2095 dbx_symfile_read, /* sym_read: read a symbol file into symtab */
2096 dbx_symfile_finish, /* sym_finish: finished with file, cleanup */
2af231b8 2097 dbx_symfile_offsets, /* sym_offsets: parse user's offsets to internal form */
80d68b1d
FF
2098 NULL /* next: pointer to next struct sym_fns */
2099};
bd5635a1
RP
2100
2101void
2102_initialize_dbxread ()
2103{
2104 add_symtab_fns(&sunos_sym_fns);
2105 add_symtab_fns(&aout_sym_fns);
2106 add_symtab_fns(&bout_sym_fns);
bd5635a1 2107}