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