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