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