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