Thu Aug 7 13:39:31 1997 Geoffrey Noer <noer@cygnus.com>
[deliverable/binutils-gdb.git] / gdb / dbxread.c
1 /* Read dbx symbol tables and convert to internal format, for GDB.
2 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
3 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
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 */
34
35 #include "defs.h"
36 #include "gdb_string.h"
37
38 #if defined(USG) || defined(__CYGNUSCLIB__)
39 #include <sys/types.h>
40 #include <fcntl.h>
41 #endif
42
43 #include "obstack.h"
44 #include "gdb_stat.h"
45 #include <ctype.h>
46 #include "symtab.h"
47 #include "breakpoint.h"
48 #include "command.h"
49 #include "target.h"
50 #include "gdbcore.h" /* for bfd stuff */
51 #include "libaout.h" /* FIXME Secret internal BFD stuff for a.out */
52 #include "symfile.h"
53 #include "objfiles.h"
54 #include "buildsym.h"
55 #include "stabsread.h"
56 #include "gdb-stabs.h"
57 #include "demangle.h"
58 #include "language.h" /* Needed inside partial-stab.h */
59 #include "complaints.h"
60
61 #include "aout/aout64.h"
62 #include "aout/stab_gnu.h" /* We always use GNU stabs, not native, now */
63
64 \f
65 /* We put a pointer to this structure in the read_symtab_private field
66 of the psymtab. */
67
68 struct symloc {
69
70 /* Offset within the file symbol table of first local symbol for this
71 file. */
72
73 int ldsymoff;
74
75 /* Length (in bytes) of the section of the symbol table devoted to
76 this file's symbols (actually, the section bracketed may contain
77 more than just this file's symbols). If ldsymlen is 0, the only
78 reason for this thing's existence is the dependency list. Nothing
79 else will happen when it is read in. */
80
81 int ldsymlen;
82
83 /* The size of each symbol in the symbol file (in external form). */
84
85 int symbol_size;
86
87 /* Further information needed to locate the symbols if they are in
88 an ELF file. */
89
90 int symbol_offset;
91 int string_offset;
92 int file_string_offset;
93 };
94
95 #define LDSYMOFF(p) (((struct symloc *)((p)->read_symtab_private))->ldsymoff)
96 #define LDSYMLEN(p) (((struct symloc *)((p)->read_symtab_private))->ldsymlen)
97 #define SYMLOC(p) ((struct symloc *)((p)->read_symtab_private))
98 #define SYMBOL_SIZE(p) (SYMLOC(p)->symbol_size)
99 #define SYMBOL_OFFSET(p) (SYMLOC(p)->symbol_offset)
100 #define STRING_OFFSET(p) (SYMLOC(p)->string_offset)
101 #define FILE_STRING_OFFSET(p) (SYMLOC(p)->file_string_offset)
102
103 \f
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 /* Remember what we deduced to be the source language of this psymtab. */
112
113 static enum language psymtab_language = language_unknown;
114
115 /* Nonzero means give verbose info on gdb action. From main.c. */
116 extern int info_verbose;
117
118 /* The BFD for this file -- implicit parameter to next_symbol_text. */
119
120 static bfd *symfile_bfd;
121
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
126 static unsigned symbol_size;
127
128 /* This is the offset of the symbol table in the executable file */
129 static unsigned symbol_table_offset;
130
131 /* This is the offset of the string table in the executable file */
132 static 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. */
139 static unsigned int file_string_table_offset;
140 static unsigned int next_file_string_table_offset;
141
142 /* .o and NLM files contain unrelocated addresses which are based at 0. When
143 non-zero, this flag disables some of the special cases for Solaris elf+stab
144 text addresses at location 0. */
145
146 static int symfile_relocatable = 0;
147
148 /* If this is nonzero, N_LBRAC, N_RBRAC, and N_SLINE entries are relative
149 to the function start address. */
150
151 static int block_address_function_relative = 0;
152 \f
153 /* The lowest text address we have yet encountered. This is needed
154 because in an a.out file, there is no header field which tells us
155 what address the program is actually going to be loaded at, so we
156 need to make guesses based on the symbols (which *are* relocated to
157 reflect the address it will be loaded at). */
158 static CORE_ADDR lowest_text_address;
159
160 /* Complaints about the symbols we have encountered. */
161
162 struct complaint lbrac_complaint =
163 {"bad block start address patched", 0, 0};
164
165 struct complaint string_table_offset_complaint =
166 {"bad string table offset in symbol %d", 0, 0};
167
168 struct complaint unknown_symtype_complaint =
169 {"unknown symbol type %s", 0, 0};
170
171 struct complaint unknown_symchar_complaint =
172 {"unknown symbol descriptor `%c'", 0, 0};
173
174 struct complaint lbrac_rbrac_complaint =
175 {"block start larger than block end", 0, 0};
176
177 struct complaint lbrac_unmatched_complaint =
178 {"unmatched N_LBRAC before symtab pos %d", 0, 0};
179
180 struct complaint lbrac_mismatch_complaint =
181 {"N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d", 0, 0};
182
183 struct complaint repeated_header_complaint =
184 {"\"repeated\" header file %s not previously seen, at symtab pos %d", 0, 0};
185 \f
186 /* During initial symbol readin, we need to have a structure to keep
187 track of which psymtabs have which bincls in them. This structure
188 is used during readin to setup the list of dependencies within each
189 partial symbol table. */
190
191 struct header_file_location
192 {
193 char *name; /* Name of header file */
194 int instance; /* See above */
195 struct partial_symtab *pst; /* Partial symtab that has the
196 BINCL/EINCL defs for this file */
197 };
198
199 /* The actual list and controling variables */
200 static struct header_file_location *bincl_list, *next_bincl;
201 static int bincls_allocated;
202
203 /* Local function prototypes */
204
205 static void
206 process_now PARAMS ((struct objfile *));
207
208 static void
209 free_header_files PARAMS ((void));
210
211 static void
212 init_header_files PARAMS ((void));
213
214 static void
215 read_ofile_symtab PARAMS ((struct partial_symtab *));
216
217 static void
218 dbx_psymtab_to_symtab PARAMS ((struct partial_symtab *));
219
220 static void
221 dbx_psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
222
223 static void
224 read_dbx_dynamic_symtab PARAMS ((struct section_offsets *,
225 struct objfile *objfile));
226
227 static void
228 read_dbx_symtab PARAMS ((struct section_offsets *, struct objfile *,
229 CORE_ADDR, int));
230
231 static void
232 free_bincl_list PARAMS ((struct objfile *));
233
234 static struct partial_symtab *
235 find_corresponding_bincl_psymtab PARAMS ((char *, int));
236
237 static void
238 add_bincl_to_list PARAMS ((struct partial_symtab *, char *, int));
239
240 static void
241 init_bincl_list PARAMS ((int, struct objfile *));
242
243 static char *
244 dbx_next_symbol_text PARAMS ((struct objfile *));
245
246 static void
247 fill_symbuf PARAMS ((bfd *));
248
249 static void
250 dbx_symfile_init PARAMS ((struct objfile *));
251
252 static void
253 dbx_new_init PARAMS ((struct objfile *));
254
255 static void
256 dbx_symfile_read PARAMS ((struct objfile *, struct section_offsets *, int));
257
258 static void
259 dbx_symfile_finish PARAMS ((struct objfile *));
260
261 static void
262 record_minimal_symbol PARAMS ((char *, CORE_ADDR, int, struct objfile *));
263
264 static void
265 add_new_header_file PARAMS ((char *, int));
266
267 static void
268 add_old_header_file PARAMS ((char *, int));
269
270 static void
271 add_this_object_header_file PARAMS ((int));
272
273 /* Free up old header file tables */
274
275 static void
276 free_header_files ()
277 {
278 if (this_object_header_files)
279 {
280 free ((PTR)this_object_header_files);
281 this_object_header_files = NULL;
282 }
283 n_allocated_this_object_header_files = 0;
284 }
285
286 /* Allocate new header file tables */
287
288 static void
289 init_header_files ()
290 {
291 n_allocated_this_object_header_files = 10;
292 this_object_header_files = (int *) xmalloc (10 * sizeof (int));
293 }
294
295 /* Add header file number I for this object file
296 at the next successive FILENUM. */
297
298 static void
299 add_this_object_header_file (i)
300 int i;
301 {
302 if (n_this_object_header_files == n_allocated_this_object_header_files)
303 {
304 n_allocated_this_object_header_files *= 2;
305 this_object_header_files
306 = (int *) xrealloc ((char *) this_object_header_files,
307 n_allocated_this_object_header_files * sizeof (int));
308 }
309
310 this_object_header_files[n_this_object_header_files++] = i;
311 }
312
313 /* Add to this file an "old" header file, one already seen in
314 a previous object file. NAME is the header file's name.
315 INSTANCE is its instance code, to select among multiple
316 symbol tables for the same header file. */
317
318 static void
319 add_old_header_file (name, instance)
320 char *name;
321 int instance;
322 {
323 register struct header_file *p = HEADER_FILES (current_objfile);
324 register int i;
325
326 for (i = 0; i < N_HEADER_FILES (current_objfile); i++)
327 if (STREQ (p[i].name, name) && instance == p[i].instance)
328 {
329 add_this_object_header_file (i);
330 return;
331 }
332 complain (&repeated_header_complaint, name, symnum);
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
346 static void
347 add_new_header_file (name, instance)
348 char *name;
349 int instance;
350 {
351 register int i;
352 register struct header_file *hfile;
353
354 /* Make sure there is room for one more header file. */
355
356 i = N_ALLOCATED_HEADER_FILES (current_objfile);
357
358 if (N_HEADER_FILES (current_objfile) == i)
359 {
360 if (i == 0)
361 {
362 N_ALLOCATED_HEADER_FILES (current_objfile) = 10;
363 HEADER_FILES (current_objfile) = (struct header_file *)
364 xmalloc (10 * sizeof (struct header_file));
365 }
366 else
367 {
368 i *= 2;
369 N_ALLOCATED_HEADER_FILES (current_objfile) = i;
370 HEADER_FILES (current_objfile) = (struct header_file *)
371 xrealloc ((char *) HEADER_FILES (current_objfile),
372 (i * sizeof (struct header_file)));
373 }
374 }
375
376 /* Create an entry for this header file. */
377
378 i = N_HEADER_FILES (current_objfile)++;
379 hfile = HEADER_FILES (current_objfile) + i;
380 hfile->name = savestring (name, strlen(name));
381 hfile->instance = instance;
382 hfile->length = 10;
383 hfile->vector
384 = (struct type **) xmalloc (10 * sizeof (struct type *));
385 memset (hfile->vector, 0, 10 * sizeof (struct type *));
386
387 add_this_object_header_file (i);
388 }
389
390 #if 0
391 static struct type **
392 explicit_lookup_type (real_filenum, index)
393 int real_filenum, index;
394 {
395 register struct header_file *f = &HEADER_FILES (current_objfile)[real_filenum];
396
397 if (index >= f->length)
398 {
399 f->length *= 2;
400 f->vector = (struct type **)
401 xrealloc (f->vector, f->length * sizeof (struct type *));
402 memset (&f->vector[f->length / 2],
403 '\0', f->length * sizeof (struct type *) / 2);
404 }
405 return &f->vector[index];
406 }
407 #endif
408 \f
409 static void
410 record_minimal_symbol (name, address, type, objfile)
411 char *name;
412 CORE_ADDR address;
413 int type;
414 struct objfile *objfile;
415 {
416 enum minimal_symbol_type ms_type;
417 int section;
418 asection *bfd_section;
419
420 switch (type)
421 {
422 case N_TEXT | N_EXT:
423 ms_type = mst_text;
424 section = SECT_OFF_TEXT;
425 bfd_section = DBX_TEXT_SECTION (objfile);
426 break;
427 case N_DATA | N_EXT:
428 ms_type = mst_data;
429 section = SECT_OFF_DATA;
430 bfd_section = DBX_DATA_SECTION (objfile);
431 break;
432 case N_BSS | N_EXT:
433 ms_type = mst_bss;
434 section = SECT_OFF_BSS;
435 bfd_section = DBX_BSS_SECTION (objfile);
436 break;
437 case N_ABS | N_EXT:
438 ms_type = mst_abs;
439 section = -1;
440 bfd_section = NULL;
441 break;
442 #ifdef N_SETV
443 case N_SETV | N_EXT:
444 ms_type = mst_data;
445 section = SECT_OFF_DATA;
446 bfd_section = DBX_DATA_SECTION (objfile);
447 break;
448 case N_SETV:
449 /* I don't think this type actually exists; since a N_SETV is the result
450 of going over many .o files, it doesn't make sense to have one
451 file local. */
452 ms_type = mst_file_data;
453 section = SECT_OFF_DATA;
454 bfd_section = DBX_DATA_SECTION (objfile);
455 break;
456 #endif
457 case N_TEXT:
458 case N_NBTEXT:
459 case N_FN:
460 case N_FN_SEQ:
461 ms_type = mst_file_text;
462 section = SECT_OFF_TEXT;
463 bfd_section = DBX_TEXT_SECTION (objfile);
464 break;
465 case N_DATA:
466 ms_type = mst_file_data;
467
468 /* Check for __DYNAMIC, which is used by Sun shared libraries.
469 Record it as global even if it's local, not global, so
470 lookup_minimal_symbol can find it. We don't check symbol_leading_char
471 because for SunOS4 it always is '_'. */
472 if (name[8] == 'C' && STREQ ("__DYNAMIC", name))
473 ms_type = mst_data;
474
475 /* Same with virtual function tables, both global and static. */
476 {
477 char *tempstring = name;
478 if (tempstring[0] == bfd_get_symbol_leading_char (objfile->obfd))
479 ++tempstring;
480 if (VTBL_PREFIX_P ((tempstring)))
481 ms_type = mst_data;
482 }
483 section = SECT_OFF_DATA;
484 bfd_section = DBX_DATA_SECTION (objfile);
485 break;
486 case N_BSS:
487 ms_type = mst_file_bss;
488 section = SECT_OFF_BSS;
489 bfd_section = DBX_BSS_SECTION (objfile);
490 break;
491 default:
492 ms_type = mst_unknown;
493 section = -1;
494 bfd_section = NULL;
495 break;
496 }
497
498 if ((ms_type == mst_file_text || ms_type == mst_text)
499 && address < lowest_text_address)
500 lowest_text_address = address;
501
502 prim_record_minimal_symbol_and_info
503 (name, address, ms_type, NULL, section, bfd_section, objfile);
504 }
505 \f
506 /* Scan and build partial symbols for a symbol file.
507 We have been initialized by a call to dbx_symfile_init, which
508 put all the relevant info into a "struct dbx_symfile_info",
509 hung off the objfile structure.
510
511 SECTION_OFFSETS contains offsets relative to which the symbols in the
512 various sections are (depending where the sections were actually loaded).
513 MAINLINE is true if we are reading the main symbol
514 table (as opposed to a shared lib or dynamically loaded file). */
515
516 static void
517 dbx_symfile_read (objfile, section_offsets, mainline)
518 struct objfile *objfile;
519 struct section_offsets *section_offsets;
520 int mainline; /* FIXME comments above */
521 {
522 bfd *sym_bfd;
523 int val;
524 struct cleanup *back_to;
525
526 val = strlen (objfile->name);
527
528 sym_bfd = objfile->obfd;
529
530 /* .o and .nlm files are relocatables with text, data and bss segs based at
531 0. This flag disables special (Solaris stabs-in-elf only) fixups for
532 symbols with a value of 0. */
533
534 symfile_relocatable = bfd_get_file_flags (sym_bfd) & HAS_RELOC;
535
536 /* This is true for Solaris (and all other systems which put stabs
537 in sections, hopefully, since it would be silly to do things
538 differently from Solaris), and false for SunOS4 and other a.out
539 file formats. */
540 block_address_function_relative =
541 ((0 == strncmp (bfd_get_target (sym_bfd), "elf", 3))
542 || (0 == strncmp (bfd_get_target (sym_bfd), "som", 3))
543 || (0 == strncmp (bfd_get_target (sym_bfd), "coff", 4))
544 || (0 == strncmp (bfd_get_target (sym_bfd), "pe", 2))
545 || (0 == strncmp (bfd_get_target (sym_bfd), "nlm", 3)));
546
547 val = bfd_seek (sym_bfd, DBX_SYMTAB_OFFSET (objfile), SEEK_SET);
548 if (val < 0)
549 perror_with_name (objfile->name);
550
551 /* If we are reinitializing, or if we have never loaded syms yet, init */
552 if (mainline
553 || objfile->global_psymbols.size == 0
554 || objfile->static_psymbols.size == 0)
555 init_psymbol_list (objfile, DBX_SYMCOUNT (objfile));
556
557 symbol_size = DBX_SYMBOL_SIZE (objfile);
558 symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
559
560 free_pending_blocks ();
561 back_to = make_cleanup (really_free_pendings, 0);
562
563 init_minimal_symbol_collection ();
564 make_cleanup (discard_minimal_symbols, 0);
565
566 /* Now that the symbol table data of the executable file are all in core,
567 process them and define symbols accordingly. */
568
569 read_dbx_symtab (section_offsets, objfile,
570 DBX_TEXT_ADDR (objfile),
571 DBX_TEXT_SIZE (objfile));
572
573 /* Add the dynamic symbols. */
574
575 read_dbx_dynamic_symtab (section_offsets, objfile);
576
577 /* Install any minimal symbols that have been collected as the current
578 minimal symbols for this objfile. */
579
580 install_minimal_symbols (objfile);
581
582 do_cleanups (back_to);
583 }
584
585 /* Initialize anything that needs initializing when a completely new
586 symbol file is specified (not just adding some symbols from another
587 file, e.g. a shared library). */
588
589 static void
590 dbx_new_init (ignore)
591 struct objfile *ignore;
592 {
593 stabsread_new_init ();
594 buildsym_new_init ();
595 init_header_files ();
596 }
597
598
599 /* dbx_symfile_init ()
600 is the dbx-specific initialization routine for reading symbols.
601 It is passed a struct objfile which contains, among other things,
602 the BFD for the file whose symbols are being read, and a slot for a pointer
603 to "private data" which we fill with goodies.
604
605 We read the string table into malloc'd space and stash a pointer to it.
606
607 Since BFD doesn't know how to read debug symbols in a format-independent
608 way (and may never do so...), we have to do it ourselves. We will never
609 be called unless this is an a.out (or very similar) file.
610 FIXME, there should be a cleaner peephole into the BFD environment here. */
611
612 #define DBX_STRINGTAB_SIZE_SIZE sizeof(long) /* FIXME */
613
614 static void
615 dbx_symfile_init (objfile)
616 struct objfile *objfile;
617 {
618 int val;
619 bfd *sym_bfd = objfile->obfd;
620 char *name = bfd_get_filename (sym_bfd);
621 asection *text_sect;
622 unsigned char size_temp[DBX_STRINGTAB_SIZE_SIZE];
623
624 /* Allocate struct to keep track of the symfile */
625 objfile->sym_stab_info = (PTR)
626 xmmalloc (objfile -> md, sizeof (struct dbx_symfile_info));
627 memset ((PTR) objfile->sym_stab_info, 0, sizeof (struct dbx_symfile_info));
628
629 DBX_TEXT_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
630 DBX_DATA_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".data");
631 DBX_BSS_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".bss");
632
633 /* FIXME POKING INSIDE BFD DATA STRUCTURES */
634 #define STRING_TABLE_OFFSET (sym_bfd->origin + obj_str_filepos (sym_bfd))
635 #define SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_sym_filepos (sym_bfd))
636
637 /* FIXME POKING INSIDE BFD DATA STRUCTURES */
638
639 DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL;
640
641 text_sect = bfd_get_section_by_name (sym_bfd, ".text");
642 if (!text_sect)
643 error ("Can't find .text section in symbol file");
644 DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
645 DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
646
647 DBX_SYMBOL_SIZE (objfile) = obj_symbol_entry_size (sym_bfd);
648 DBX_SYMCOUNT (objfile) = bfd_get_symcount (sym_bfd);
649 DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
650
651 /* Read the string table and stash it away in the psymbol_obstack. It is
652 only needed as long as we need to expand psymbols into full symbols,
653 so when we blow away the psymbol the string table goes away as well.
654 Note that gdb used to use the results of attempting to malloc the
655 string table, based on the size it read, as a form of sanity check
656 for botched byte swapping, on the theory that a byte swapped string
657 table size would be so totally bogus that the malloc would fail. Now
658 that we put in on the psymbol_obstack, we can't do this since gdb gets
659 a fatal error (out of virtual memory) if the size is bogus. We can
660 however at least check to see if the size is less than the size of
661 the size field itself, or larger than the size of the entire file.
662 Note that all valid string tables have a size greater than zero, since
663 the bytes used to hold the size are included in the count. */
664
665 if (STRING_TABLE_OFFSET == 0)
666 {
667 /* It appears that with the existing bfd code, STRING_TABLE_OFFSET
668 will never be zero, even when there is no string table. This
669 would appear to be a bug in bfd. */
670 DBX_STRINGTAB_SIZE (objfile) = 0;
671 DBX_STRINGTAB (objfile) = NULL;
672 }
673 else
674 {
675 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
676 if (val < 0)
677 perror_with_name (name);
678
679 memset ((PTR) size_temp, 0, sizeof (size_temp));
680 val = bfd_read ((PTR) size_temp, sizeof (size_temp), 1, sym_bfd);
681 if (val < 0)
682 {
683 perror_with_name (name);
684 }
685 else if (val == 0)
686 {
687 /* With the existing bfd code, STRING_TABLE_OFFSET will be set to
688 EOF if there is no string table, and attempting to read the size
689 from EOF will read zero bytes. */
690 DBX_STRINGTAB_SIZE (objfile) = 0;
691 DBX_STRINGTAB (objfile) = NULL;
692 }
693 else
694 {
695 /* Read some data that would appear to be the string table size.
696 If there really is a string table, then it is probably the right
697 size. Byteswap if necessary and validate the size. Note that
698 the minimum is DBX_STRINGTAB_SIZE_SIZE. If we just read some
699 random data that happened to be at STRING_TABLE_OFFSET, because
700 bfd can't tell us there is no string table, the sanity checks may
701 or may not catch this. */
702 DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
703
704 if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp)
705 || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
706 error ("ridiculous string table size (%d bytes).",
707 DBX_STRINGTAB_SIZE (objfile));
708
709 DBX_STRINGTAB (objfile) =
710 (char *) obstack_alloc (&objfile -> psymbol_obstack,
711 DBX_STRINGTAB_SIZE (objfile));
712 OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile));
713
714 /* Now read in the string table in one big gulp. */
715
716 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, SEEK_SET);
717 if (val < 0)
718 perror_with_name (name);
719 val = bfd_read (DBX_STRINGTAB (objfile), DBX_STRINGTAB_SIZE (objfile), 1,
720 sym_bfd);
721 if (val != DBX_STRINGTAB_SIZE (objfile))
722 perror_with_name (name);
723 }
724 }
725 }
726
727 /* Perform any local cleanups required when we are done with a particular
728 objfile. I.E, we are in the process of discarding all symbol information
729 for an objfile, freeing up all memory held for it, and unlinking the
730 objfile struct from the global list of known objfiles. */
731
732 static void
733 dbx_symfile_finish (objfile)
734 struct objfile *objfile;
735 {
736 if (objfile->sym_stab_info != NULL)
737 {
738 if (HEADER_FILES (objfile) != NULL)
739 {
740 register int i = N_HEADER_FILES (objfile);
741 register struct header_file *hfiles = HEADER_FILES (objfile);
742
743 while (--i >= 0)
744 {
745 free (hfiles [i].name);
746 free (hfiles [i].vector);
747 }
748 free ((PTR) hfiles);
749 }
750 mfree (objfile -> md, objfile->sym_stab_info);
751 }
752 free_header_files ();
753 }
754
755 \f
756 /* Buffer for reading the symbol table entries. */
757 static struct external_nlist symbuf[4096];
758 static int symbuf_idx;
759 static int symbuf_end;
760
761 /* cont_elem is used for continuing information in cfront.
762 It saves information about which types need to be fixed up and
763 completed after all the stabs are read. */
764 struct cont_elem
765 {
766 /* sym and stabsstring for continuing information in cfront */
767 struct symbol * sym;
768 char * stabs;
769 /* state dependancies (statics that must be preserved) */
770 int sym_idx;
771 int sym_end;
772 int symnum;
773 /* other state dependancies include:
774 (assumption is that these will not change since process_now FIXME!!)
775 stringtab_global
776 n_stabs
777 objfile
778 symfile_bfd */
779 };
780 static struct cont_elem cont_list[100];
781 static int cont_count = 0;
782
783 void
784 process_later(sym,p)
785 struct symbol * sym;
786 char * p;
787 {
788 /* save state so we can process these stabs later */
789 cont_list[cont_count].sym_idx = symbuf_idx;
790 cont_list[cont_count].sym_end = symbuf_end;
791 cont_list[cont_count].symnum = symnum;
792 cont_list[cont_count].sym = sym;
793 cont_list[cont_count].stabs = p;
794 cont_count++;
795 }
796
797 static void
798 process_now(objfile)
799 struct objfile * objfile;
800 {
801 int i;
802 /* save original state */
803 int save_symbuf_idx = symbuf_idx;
804 int save_symbuf_end = symbuf_end;
805 int save_symnum = symnum;
806 for (i=0; i<cont_count; i++)
807 {
808 /* set state as if we were parsing stabs strings
809 for this symbol */
810 symbuf_idx = cont_list[i].sym_idx; /* statics used by gdb */
811 symbuf_end = cont_list[i].sym_end;
812 symnum = cont_list[i].symnum;
813 resolve_cfront_continuation(objfile,cont_list[i].sym,cont_list[i].stabs);
814 }
815 /* restore original state */
816 symbuf_idx = save_symbuf_idx;
817 symbuf_end = save_symbuf_end;
818 symnum = save_symnum;
819 cont_count=0; /* reset for next run */
820 }
821
822
823 /* Name of last function encountered. Used in Solaris to approximate
824 object file boundaries. */
825 static char *last_function_name;
826
827 /* The address in memory of the string table of the object file we are
828 reading (which might not be the "main" object file, but might be a
829 shared library or some other dynamically loaded thing). This is
830 set by read_dbx_symtab when building psymtabs, and by
831 read_ofile_symtab when building symtabs, and is used only by
832 next_symbol_text. FIXME: If that is true, we don't need it when
833 building psymtabs, right? */
834 static char *stringtab_global;
835
836 /* These variables are used to control fill_symbuf when the stabs
837 symbols are not contiguous (as may be the case when a COFF file is
838 linked using --split-by-reloc). */
839 static struct stab_section_list *symbuf_sections;
840 static unsigned int symbuf_left;
841 static unsigned int symbuf_read;
842
843 /* Refill the symbol table input buffer
844 and set the variables that control fetching entries from it.
845 Reports an error if no data available.
846 This function can read past the end of the symbol table
847 (into the string table) but this does no harm. */
848
849 static void
850 fill_symbuf (sym_bfd)
851 bfd *sym_bfd;
852 {
853 unsigned int count;
854 int nbytes;
855
856 if (symbuf_sections == NULL)
857 count = sizeof (symbuf);
858 else
859 {
860 if (symbuf_left <= 0)
861 {
862 file_ptr filepos = symbuf_sections->section->filepos;
863 if (bfd_seek (sym_bfd, filepos, SEEK_SET) != 0)
864 perror_with_name (bfd_get_filename (sym_bfd));
865 symbuf_left = bfd_section_size (sym_bfd, symbuf_sections->section);
866 symbol_table_offset = filepos - symbuf_read;
867 symbuf_sections = symbuf_sections->next;
868 }
869
870 count = symbuf_left;
871 if (count > sizeof (symbuf))
872 count = sizeof (symbuf);
873 }
874
875 nbytes = bfd_read ((PTR)symbuf, count, 1, sym_bfd);
876 if (nbytes < 0)
877 perror_with_name (bfd_get_filename (sym_bfd));
878 else if (nbytes == 0)
879 error ("Premature end of file reading symbol table");
880 symbuf_end = nbytes / symbol_size;
881 symbuf_idx = 0;
882 symbuf_left -= nbytes;
883 symbuf_read += nbytes;
884 }
885
886 #define SWAP_SYMBOL(symp, abfd) \
887 { \
888 (symp)->n_strx = bfd_h_get_32(abfd, \
889 (unsigned char *)&(symp)->n_strx); \
890 (symp)->n_desc = bfd_h_get_16 (abfd, \
891 (unsigned char *)&(symp)->n_desc); \
892 (symp)->n_value = bfd_h_get_32 (abfd, \
893 (unsigned char *)&(symp)->n_value); \
894 }
895
896 #define INTERNALIZE_SYMBOL(intern, extern, abfd) \
897 { \
898 (intern).n_type = bfd_h_get_8 (abfd, (extern)->e_type); \
899 (intern).n_strx = bfd_h_get_32 (abfd, (extern)->e_strx); \
900 (intern).n_desc = bfd_h_get_16 (abfd, (extern)->e_desc); \
901 (intern).n_value = bfd_h_get_32 (abfd, (extern)->e_value); \
902 }
903
904 /* Invariant: The symbol pointed to by symbuf_idx is the first one
905 that hasn't been swapped. Swap the symbol at the same time
906 that symbuf_idx is incremented. */
907
908 /* dbx allows the text of a symbol name to be continued into the
909 next symbol name! When such a continuation is encountered
910 (a \ at the end of the text of a name)
911 call this function to get the continuation. */
912
913 static char *
914 dbx_next_symbol_text (objfile)
915 struct objfile *objfile;
916 {
917 struct internal_nlist nlist;
918
919 if (symbuf_idx == symbuf_end)
920 fill_symbuf (symfile_bfd);
921
922 symnum++;
923 INTERNALIZE_SYMBOL(nlist, &symbuf[symbuf_idx], symfile_bfd);
924 OBJSTAT (objfile, n_stabs++);
925
926 symbuf_idx++;
927
928 return nlist.n_strx + stringtab_global + file_string_table_offset;
929 }
930 \f
931 /* Initialize the list of bincls to contain none and have some
932 allocated. */
933
934 static void
935 init_bincl_list (number, objfile)
936 int number;
937 struct objfile *objfile;
938 {
939 bincls_allocated = number;
940 next_bincl = bincl_list = (struct header_file_location *)
941 xmmalloc (objfile -> md, bincls_allocated * sizeof(struct header_file_location));
942 }
943
944 /* Add a bincl to the list. */
945
946 static void
947 add_bincl_to_list (pst, name, instance)
948 struct partial_symtab *pst;
949 char *name;
950 int instance;
951 {
952 if (next_bincl >= bincl_list + bincls_allocated)
953 {
954 int offset = next_bincl - bincl_list;
955 bincls_allocated *= 2;
956 bincl_list = (struct header_file_location *)
957 xmrealloc (pst->objfile->md, (char *)bincl_list,
958 bincls_allocated * sizeof (struct header_file_location));
959 if (bincl_list == NULL)
960 fatal ("virtual memory exhausted in add_bincl_to_list ();");
961 next_bincl = bincl_list + offset;
962 }
963 next_bincl->pst = pst;
964 next_bincl->instance = instance;
965 next_bincl++->name = name;
966 }
967
968 /* Given a name, value pair, find the corresponding
969 bincl in the list. Return the partial symtab associated
970 with that header_file_location. */
971
972 static struct partial_symtab *
973 find_corresponding_bincl_psymtab (name, instance)
974 char *name;
975 int instance;
976 {
977 struct header_file_location *bincl;
978
979 for (bincl = bincl_list; bincl < next_bincl; bincl++)
980 if (bincl->instance == instance
981 && STREQ (name, bincl->name))
982 return bincl->pst;
983
984 complain (&repeated_header_complaint, name, symnum);
985 return (struct partial_symtab *) 0;
986 }
987
988 /* Free the storage allocated for the bincl list. */
989
990 static void
991 free_bincl_list (objfile)
992 struct objfile *objfile;
993 {
994 mfree (objfile -> md, (PTR)bincl_list);
995 bincls_allocated = 0;
996 }
997
998 /* Scan a SunOs dynamic symbol table for symbols of interest and
999 add them to the minimal symbol table. */
1000
1001 static void
1002 read_dbx_dynamic_symtab (section_offsets, objfile)
1003 struct section_offsets *section_offsets;
1004 struct objfile *objfile;
1005 {
1006 bfd *abfd = objfile->obfd;
1007 struct cleanup *back_to;
1008 int counter;
1009 long dynsym_size;
1010 long dynsym_count;
1011 asymbol **dynsyms;
1012 asymbol **symptr;
1013 arelent **relptr;
1014 long dynrel_size;
1015 long dynrel_count;
1016 arelent **dynrels;
1017 CORE_ADDR sym_value;
1018 char *name;
1019
1020 /* Check that the symbol file has dynamic symbols that we know about.
1021 bfd_arch_unknown can happen if we are reading a sun3 symbol file
1022 on a sun4 host (and vice versa) and bfd is not configured
1023 --with-target=all. This would trigger an assertion in bfd/sunos.c,
1024 so we ignore the dynamic symbols in this case. */
1025 if (bfd_get_flavour (abfd) != bfd_target_aout_flavour
1026 || (bfd_get_file_flags (abfd) & DYNAMIC) == 0
1027 || bfd_get_arch (abfd) == bfd_arch_unknown)
1028 return;
1029
1030 dynsym_size = bfd_get_dynamic_symtab_upper_bound (abfd);
1031 if (dynsym_size < 0)
1032 return;
1033
1034 dynsyms = (asymbol **) xmalloc (dynsym_size);
1035 back_to = make_cleanup (free, dynsyms);
1036
1037 dynsym_count = bfd_canonicalize_dynamic_symtab (abfd, dynsyms);
1038 if (dynsym_count < 0)
1039 {
1040 do_cleanups (back_to);
1041 return;
1042 }
1043
1044 /* Enter dynamic symbols into the minimal symbol table
1045 if this is a stripped executable. */
1046 if (bfd_get_symcount (abfd) <= 0)
1047 {
1048 symptr = dynsyms;
1049 for (counter = 0; counter < dynsym_count; counter++, symptr++)
1050 {
1051 asymbol *sym = *symptr;
1052 asection *sec;
1053 int type;
1054
1055 sec = bfd_get_section (sym);
1056
1057 /* BFD symbols are section relative. */
1058 sym_value = sym->value + sec->vma;
1059
1060 if (bfd_get_section_flags (abfd, sec) & SEC_CODE)
1061 {
1062 sym_value += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1063 type = N_TEXT;
1064 }
1065 else if (bfd_get_section_flags (abfd, sec) & SEC_DATA)
1066 {
1067 sym_value += ANOFFSET (section_offsets, SECT_OFF_DATA);
1068 type = N_DATA;
1069 }
1070 else if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC)
1071 {
1072 sym_value += ANOFFSET (section_offsets, SECT_OFF_BSS);
1073 type = N_BSS;
1074 }
1075 else
1076 continue;
1077
1078 if (sym->flags & BSF_GLOBAL)
1079 type |= N_EXT;
1080
1081 record_minimal_symbol ((char *) bfd_asymbol_name (sym), sym_value,
1082 type, objfile);
1083 }
1084 }
1085
1086 /* Symbols from shared libraries have a dynamic relocation entry
1087 that points to the associated slot in the procedure linkage table.
1088 We make a mininal symbol table entry with type mst_solib_trampoline
1089 at the address in the procedure linkage table. */
1090 dynrel_size = bfd_get_dynamic_reloc_upper_bound (abfd);
1091 if (dynrel_size < 0)
1092 {
1093 do_cleanups (back_to);
1094 return;
1095 }
1096
1097 dynrels = (arelent **) xmalloc (dynrel_size);
1098 make_cleanup (free, dynrels);
1099
1100 dynrel_count = bfd_canonicalize_dynamic_reloc (abfd, dynrels, dynsyms);
1101 if (dynrel_count < 0)
1102 {
1103 do_cleanups (back_to);
1104 return;
1105 }
1106
1107 for (counter = 0, relptr = dynrels;
1108 counter < dynrel_count;
1109 counter++, relptr++)
1110 {
1111 arelent *rel = *relptr;
1112 CORE_ADDR address =
1113 rel->address + ANOFFSET (section_offsets, SECT_OFF_DATA);
1114
1115 switch (bfd_get_arch (abfd))
1116 {
1117 case bfd_arch_sparc:
1118 if (rel->howto->type != RELOC_JMP_SLOT)
1119 continue;
1120 break;
1121 case bfd_arch_m68k:
1122 /* `16' is the type BFD produces for a jump table relocation. */
1123 if (rel->howto->type != 16)
1124 continue;
1125
1126 /* Adjust address in the jump table to point to
1127 the start of the bsr instruction. */
1128 address -= 2;
1129 break;
1130 default:
1131 continue;
1132 }
1133
1134 name = (char *) bfd_asymbol_name (*rel->sym_ptr_ptr);
1135 prim_record_minimal_symbol (name, address, mst_solib_trampoline,
1136 objfile);
1137 }
1138
1139 do_cleanups (back_to);
1140 }
1141
1142 /* Given pointers to an a.out symbol table in core containing dbx
1143 style data, setup partial_symtab's describing each source file for
1144 which debugging information is available.
1145 SYMFILE_NAME is the name of the file we are reading from
1146 and SECTION_OFFSETS is the set of offsets for the various sections
1147 of the file (a set of zeros if the mainline program). */
1148
1149 static void
1150 read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
1151 struct section_offsets *section_offsets;
1152 struct objfile *objfile;
1153 CORE_ADDR text_addr;
1154 int text_size;
1155 {
1156 register struct external_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch */
1157 struct internal_nlist nlist;
1158
1159 register char *namestring;
1160 int nsl;
1161 int past_first_source_file = 0;
1162 CORE_ADDR last_o_file_start = 0;
1163 CORE_ADDR last_function_start = 0;
1164 struct cleanup *back_to;
1165 bfd *abfd;
1166 int textlow_not_set;
1167
1168 /* Current partial symtab */
1169 struct partial_symtab *pst;
1170
1171 /* List of current psymtab's include files */
1172 char **psymtab_include_list;
1173 int includes_allocated;
1174 int includes_used;
1175
1176 /* Index within current psymtab dependency list */
1177 struct partial_symtab **dependency_list;
1178 int dependencies_used, dependencies_allocated;
1179
1180 /* FIXME. We probably want to change stringtab_global rather than add this
1181 while processing every symbol entry. FIXME. */
1182 file_string_table_offset = 0;
1183 next_file_string_table_offset = 0;
1184
1185 stringtab_global = DBX_STRINGTAB (objfile);
1186
1187 pst = (struct partial_symtab *) 0;
1188
1189 includes_allocated = 30;
1190 includes_used = 0;
1191 psymtab_include_list = (char **) alloca (includes_allocated *
1192 sizeof (char *));
1193
1194 dependencies_allocated = 30;
1195 dependencies_used = 0;
1196 dependency_list =
1197 (struct partial_symtab **) alloca (dependencies_allocated *
1198 sizeof (struct partial_symtab *));
1199
1200 /* Init bincl list */
1201 init_bincl_list (20, objfile);
1202 back_to = make_cleanup (free_bincl_list, objfile);
1203
1204 last_source_file = NULL;
1205
1206 lowest_text_address = (CORE_ADDR)-1;
1207
1208 symfile_bfd = objfile->obfd; /* For next_text_symbol */
1209 abfd = objfile->obfd;
1210 symbuf_end = symbuf_idx = 0;
1211 next_symbol_text_func = dbx_next_symbol_text;
1212 textlow_not_set = 1;
1213
1214 for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
1215 {
1216 /* Get the symbol for this run and pull out some info */
1217 QUIT; /* allow this to be interruptable */
1218 if (symbuf_idx == symbuf_end)
1219 fill_symbuf (abfd);
1220 bufp = &symbuf[symbuf_idx++];
1221
1222 /*
1223 * Special case to speed up readin.
1224 */
1225 if (bfd_h_get_8 (abfd, bufp->e_type) == N_SLINE)
1226 continue;
1227
1228 INTERNALIZE_SYMBOL (nlist, bufp, abfd);
1229 OBJSTAT (objfile, n_stabs++);
1230
1231 /* Ok. There is a lot of code duplicated in the rest of this
1232 switch statement (for efficiency reasons). Since I don't
1233 like duplicating code, I will do my penance here, and
1234 describe the code which is duplicated:
1235
1236 *) The assignment to namestring.
1237 *) The call to strchr.
1238 *) The addition of a partial symbol the the two partial
1239 symbol lists. This last is a large section of code, so
1240 I've imbedded it in the following macro.
1241 */
1242
1243 /* Set namestring based on nlist. If the string table index is invalid,
1244 give a fake name, and print a single error message per symbol file read,
1245 rather than abort the symbol reading or flood the user with messages. */
1246
1247 /*FIXME: Too many adds and indirections in here for the inner loop. */
1248 #define SET_NAMESTRING()\
1249 if (((unsigned)CUR_SYMBOL_STRX + file_string_table_offset) >= \
1250 DBX_STRINGTAB_SIZE (objfile)) { \
1251 complain (&string_table_offset_complaint, symnum); \
1252 namestring = "<bad string table offset>"; \
1253 } else \
1254 namestring = CUR_SYMBOL_STRX + file_string_table_offset + \
1255 DBX_STRINGTAB (objfile)
1256
1257 #define CUR_SYMBOL_TYPE nlist.n_type
1258 #define CUR_SYMBOL_VALUE nlist.n_value
1259 #define CUR_SYMBOL_STRX nlist.n_strx
1260 #define DBXREAD_ONLY
1261 #define START_PSYMTAB(ofile,secoff,fname,low,symoff,global_syms,static_syms)\
1262 start_psymtab(ofile, secoff, fname, low, symoff, global_syms, static_syms)
1263 #define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps,textlow_not_set)\
1264 end_psymtab(pst,ilist,ninc,c_off,c_text,dep_list,n_deps,textlow_not_set)
1265
1266 #include "partial-stab.h"
1267 }
1268
1269 /* If there's stuff to be cleaned up, clean it up. */
1270 if (DBX_SYMCOUNT (objfile) > 0 /* We have some syms */
1271 /*FIXME, does this have a bug at start address 0? */
1272 && last_o_file_start
1273 && objfile -> ei.entry_point < nlist.n_value
1274 && objfile -> ei.entry_point >= last_o_file_start)
1275 {
1276 objfile -> ei.entry_file_lowpc = last_o_file_start;
1277 objfile -> ei.entry_file_highpc = nlist.n_value;
1278 }
1279
1280 if (pst)
1281 {
1282 end_psymtab (pst, psymtab_include_list, includes_used,
1283 symnum * symbol_size,
1284 (lowest_text_address == (CORE_ADDR)-1
1285 ? (text_addr + section_offsets->offsets[SECT_OFF_TEXT])
1286 : lowest_text_address)
1287 + text_size,
1288 dependency_list, dependencies_used, textlow_not_set);
1289 }
1290
1291 do_cleanups (back_to);
1292 }
1293
1294 /* Allocate and partially fill a partial symtab. It will be
1295 completely filled at the end of the symbol list.
1296
1297 SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
1298 is the address relative to which its symbols are (incremental) or 0
1299 (normal). */
1300
1301
1302 struct partial_symtab *
1303 start_psymtab (objfile, section_offsets,
1304 filename, textlow, ldsymoff, global_syms, static_syms)
1305 struct objfile *objfile;
1306 struct section_offsets *section_offsets;
1307 char *filename;
1308 CORE_ADDR textlow;
1309 int ldsymoff;
1310 struct partial_symbol **global_syms;
1311 struct partial_symbol **static_syms;
1312 {
1313 struct partial_symtab *result =
1314 start_psymtab_common(objfile, section_offsets,
1315 filename, textlow, global_syms, static_syms);
1316
1317 result->read_symtab_private = (char *)
1318 obstack_alloc (&objfile -> psymbol_obstack, sizeof (struct symloc));
1319 LDSYMOFF(result) = ldsymoff;
1320 result->read_symtab = dbx_psymtab_to_symtab;
1321 SYMBOL_SIZE(result) = symbol_size;
1322 SYMBOL_OFFSET(result) = symbol_table_offset;
1323 STRING_OFFSET(result) = string_table_offset;
1324 FILE_STRING_OFFSET(result) = file_string_table_offset;
1325
1326 /* If we're handling an ELF file, drag some section-relocation info
1327 for this source file out of the ELF symbol table, to compensate for
1328 Sun brain death. This replaces the section_offsets in this psymtab,
1329 if successful. */
1330 elfstab_offset_sections (objfile, result);
1331
1332 /* Deduce the source language from the filename for this psymtab. */
1333 psymtab_language = deduce_language_from_filename (filename);
1334
1335 return result;
1336 }
1337
1338 /* Close off the current usage of PST.
1339 Returns PST or NULL if the partial symtab was empty and thrown away.
1340
1341 FIXME: List variables and peculiarities of same. */
1342
1343 struct partial_symtab *
1344 end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
1345 capping_text, dependency_list, number_dependencies, textlow_not_set)
1346 struct partial_symtab *pst;
1347 char **include_list;
1348 int num_includes;
1349 int capping_symbol_offset;
1350 CORE_ADDR capping_text;
1351 struct partial_symtab **dependency_list;
1352 int number_dependencies;
1353 int textlow_not_set;
1354 {
1355 int i;
1356 struct objfile *objfile = pst -> objfile;
1357
1358 if (capping_symbol_offset != -1)
1359 LDSYMLEN(pst) = capping_symbol_offset - LDSYMOFF(pst);
1360 pst->texthigh = capping_text;
1361
1362 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
1363 /* Under Solaris, the N_SO symbols always have a value of 0,
1364 instead of the usual address of the .o file. Therefore,
1365 we have to do some tricks to fill in texthigh and textlow.
1366 The first trick is in partial-stab.h: if we see a static
1367 or global function, and the textlow for the current pst
1368 is not set (ie: textlow_not_set), then we use that function's
1369 address for the textlow of the pst. */
1370
1371 /* Now, to fill in texthigh, we remember the last function seen
1372 in the .o file (also in partial-stab.h). Also, there's a hack in
1373 bfd/elf.c and gdb/elfread.c to pass the ELF st_size field
1374 to here via the misc_info field. Therefore, we can fill in
1375 a reliable texthigh by taking the address plus size of the
1376 last function in the file. */
1377
1378 if (pst->texthigh == 0 && last_function_name)
1379 {
1380 char *p;
1381 int n;
1382 struct minimal_symbol *minsym;
1383
1384 p = strchr (last_function_name, ':');
1385 if (p == NULL)
1386 p = last_function_name;
1387 n = p - last_function_name;
1388 p = alloca (n + 1);
1389 strncpy (p, last_function_name, n);
1390 p[n] = 0;
1391
1392 minsym = lookup_minimal_symbol (p, pst->filename, objfile);
1393
1394 if (minsym)
1395 pst->texthigh = SYMBOL_VALUE_ADDRESS (minsym)
1396 + (long) MSYMBOL_INFO (minsym);
1397
1398 last_function_name = NULL;
1399 }
1400
1401 /* this test will be true if the last .o file is only data */
1402 if (textlow_not_set)
1403 pst->textlow = pst->texthigh;
1404 else
1405 {
1406 struct partial_symtab *p1;
1407
1408 /* If we know our own starting text address, then walk through all other
1409 psymtabs for this objfile, and if any didn't know their ending text
1410 address, set it to our starting address. Take care to not set our
1411 own ending address to our starting address, nor to set addresses on
1412 `dependency' files that have both textlow and texthigh zero. */
1413
1414 ALL_OBJFILE_PSYMTABS (objfile, p1)
1415 {
1416 if (p1->texthigh == 0 && p1->textlow != 0 && p1 != pst)
1417 {
1418 p1->texthigh = pst->textlow;
1419 /* if this file has only data, then make textlow match texthigh */
1420 if (p1->textlow == 0)
1421 p1->textlow = p1->texthigh;
1422 }
1423 }
1424 }
1425
1426 /* End of kludge for patching Solaris textlow and texthigh. */
1427 #endif /* SOFUN_ADDRESS_MAYBE_MISSING. */
1428
1429 pst->n_global_syms =
1430 objfile->global_psymbols.next - (objfile->global_psymbols.list + pst->globals_offset);
1431 pst->n_static_syms =
1432 objfile->static_psymbols.next - (objfile->static_psymbols.list + pst->statics_offset);
1433
1434 pst->number_of_dependencies = number_dependencies;
1435 if (number_dependencies)
1436 {
1437 pst->dependencies = (struct partial_symtab **)
1438 obstack_alloc (&objfile->psymbol_obstack,
1439 number_dependencies * sizeof (struct partial_symtab *));
1440 memcpy (pst->dependencies, dependency_list,
1441 number_dependencies * sizeof (struct partial_symtab *));
1442 }
1443 else
1444 pst->dependencies = 0;
1445
1446 for (i = 0; i < num_includes; i++)
1447 {
1448 struct partial_symtab *subpst =
1449 allocate_psymtab (include_list[i], objfile);
1450
1451 subpst->section_offsets = pst->section_offsets;
1452 subpst->read_symtab_private =
1453 (char *) obstack_alloc (&objfile->psymbol_obstack,
1454 sizeof (struct symloc));
1455 LDSYMOFF(subpst) =
1456 LDSYMLEN(subpst) =
1457 subpst->textlow =
1458 subpst->texthigh = 0;
1459
1460 /* We could save slight bits of space by only making one of these,
1461 shared by the entire set of include files. FIXME-someday. */
1462 subpst->dependencies = (struct partial_symtab **)
1463 obstack_alloc (&objfile->psymbol_obstack,
1464 sizeof (struct partial_symtab *));
1465 subpst->dependencies[0] = pst;
1466 subpst->number_of_dependencies = 1;
1467
1468 subpst->globals_offset =
1469 subpst->n_global_syms =
1470 subpst->statics_offset =
1471 subpst->n_static_syms = 0;
1472
1473 subpst->readin = 0;
1474 subpst->symtab = 0;
1475 subpst->read_symtab = pst->read_symtab;
1476 }
1477
1478 sort_pst_symbols (pst);
1479
1480 /* If there is already a psymtab or symtab for a file of this name, remove it.
1481 (If there is a symtab, more drastic things also happen.)
1482 This happens in VxWorks. */
1483 free_named_symtabs (pst->filename);
1484
1485 if (num_includes == 0
1486 && number_dependencies == 0
1487 && pst->n_global_syms == 0
1488 && pst->n_static_syms == 0)
1489 {
1490 /* Throw away this psymtab, it's empty. We can't deallocate it, since
1491 it is on the obstack, but we can forget to chain it on the list. */
1492 /* Empty psymtabs happen as a result of header files which don't have
1493 any symbols in them. There can be a lot of them. But this check
1494 is wrong, in that a psymtab with N_SLINE entries but nothing else
1495 is not empty, but we don't realize that. Fixing that without slowing
1496 things down might be tricky. */
1497 struct partial_symtab *prev_pst;
1498
1499 /* First, snip it out of the psymtab chain */
1500
1501 if (pst->objfile->psymtabs == pst)
1502 pst->objfile->psymtabs = pst->next;
1503 else
1504 for (prev_pst = pst->objfile->psymtabs; prev_pst; prev_pst = pst->next)
1505 if (prev_pst->next == pst)
1506 prev_pst->next = pst->next;
1507
1508 /* Next, put it on a free list for recycling */
1509
1510 pst->next = pst->objfile->free_psymtabs;
1511 pst->objfile->free_psymtabs = pst;
1512
1513 /* Indicate that psymtab was thrown away. */
1514 pst = (struct partial_symtab *)NULL;
1515 }
1516 return pst;
1517 }
1518 \f
1519 static void
1520 dbx_psymtab_to_symtab_1 (pst)
1521 struct partial_symtab *pst;
1522 {
1523 struct cleanup *old_chain;
1524 int i;
1525
1526 if (!pst)
1527 return;
1528
1529 if (pst->readin)
1530 {
1531 fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
1532 pst->filename);
1533 return;
1534 }
1535
1536 /* Read in all partial symtabs on which this one is dependent */
1537 for (i = 0; i < pst->number_of_dependencies; i++)
1538 if (!pst->dependencies[i]->readin)
1539 {
1540 /* Inform about additional files that need to be read in. */
1541 if (info_verbose)
1542 {
1543 fputs_filtered (" ", gdb_stdout);
1544 wrap_here ("");
1545 fputs_filtered ("and ", gdb_stdout);
1546 wrap_here ("");
1547 printf_filtered ("%s...", pst->dependencies[i]->filename);
1548 wrap_here (""); /* Flush output */
1549 gdb_flush (gdb_stdout);
1550 }
1551 dbx_psymtab_to_symtab_1 (pst->dependencies[i]);
1552 }
1553
1554 if (LDSYMLEN(pst)) /* Otherwise it's a dummy */
1555 {
1556 /* Init stuff necessary for reading in symbols */
1557 stabsread_init ();
1558 buildsym_init ();
1559 old_chain = make_cleanup (really_free_pendings, 0);
1560 file_string_table_offset = FILE_STRING_OFFSET (pst);
1561 symbol_size = SYMBOL_SIZE (pst);
1562
1563 /* Read in this file's symbols */
1564 bfd_seek (pst->objfile->obfd, SYMBOL_OFFSET (pst), SEEK_SET);
1565 read_ofile_symtab (pst);
1566 sort_symtab_syms (pst->symtab);
1567
1568 do_cleanups (old_chain);
1569 }
1570
1571 pst->readin = 1;
1572 }
1573
1574 /* Read in all of the symbols for a given psymtab for real.
1575 Be verbose about it if the user wants that. */
1576
1577 static void
1578 dbx_psymtab_to_symtab (pst)
1579 struct partial_symtab *pst;
1580 {
1581 bfd *sym_bfd;
1582
1583 if (!pst)
1584 return;
1585
1586 if (pst->readin)
1587 {
1588 fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
1589 pst->filename);
1590 return;
1591 }
1592
1593 if (LDSYMLEN(pst) || pst->number_of_dependencies)
1594 {
1595 /* Print the message now, before reading the string table,
1596 to avoid disconcerting pauses. */
1597 if (info_verbose)
1598 {
1599 printf_filtered ("Reading in symbols for %s...", pst->filename);
1600 gdb_flush (gdb_stdout);
1601 }
1602
1603 sym_bfd = pst->objfile->obfd;
1604
1605 next_symbol_text_func = dbx_next_symbol_text;
1606
1607 dbx_psymtab_to_symtab_1 (pst);
1608
1609 /* Match with global symbols. This only needs to be done once,
1610 after all of the symtabs and dependencies have been read in. */
1611 scan_file_globals (pst->objfile);
1612
1613 /* Finish up the debug error message. */
1614 if (info_verbose)
1615 printf_filtered ("done.\n");
1616 }
1617 }
1618
1619 /* Read in a defined section of a specific object file's symbols. */
1620
1621 static void
1622 read_ofile_symtab (pst)
1623 struct partial_symtab *pst;
1624 {
1625 register char *namestring;
1626 register struct external_nlist *bufp;
1627 struct internal_nlist nlist;
1628 unsigned char type;
1629 unsigned max_symnum;
1630 register bfd *abfd;
1631 struct objfile *objfile;
1632 int sym_offset; /* Offset to start of symbols to read */
1633 int sym_size; /* Size of symbols to read */
1634 CORE_ADDR text_offset; /* Start of text segment for symbols */
1635 int text_size; /* Size of text segment for symbols */
1636 struct section_offsets *section_offsets;
1637
1638 objfile = pst->objfile;
1639 sym_offset = LDSYMOFF(pst);
1640 sym_size = LDSYMLEN(pst);
1641 text_offset = pst->textlow;
1642 text_size = pst->texthigh - pst->textlow;
1643 section_offsets = pst->section_offsets;
1644
1645 current_objfile = objfile;
1646 subfile_stack = NULL;
1647
1648 stringtab_global = DBX_STRINGTAB (objfile);
1649 last_source_file = NULL;
1650
1651 abfd = objfile->obfd;
1652 symfile_bfd = objfile->obfd; /* Implicit param to next_text_symbol */
1653 symbuf_end = symbuf_idx = 0;
1654
1655 /* It is necessary to actually read one symbol *before* the start
1656 of this symtab's symbols, because the GCC_COMPILED_FLAG_SYMBOL
1657 occurs before the N_SO symbol.
1658
1659 Detecting this in read_dbx_symtab
1660 would slow down initial readin, so we look for it here instead. */
1661 if (!processing_acc_compilation && sym_offset >= (int)symbol_size)
1662 {
1663 bfd_seek (symfile_bfd, sym_offset - symbol_size, SEEK_CUR);
1664 fill_symbuf (abfd);
1665 bufp = &symbuf[symbuf_idx++];
1666 INTERNALIZE_SYMBOL (nlist, bufp, abfd);
1667 OBJSTAT (objfile, n_stabs++);
1668
1669 SET_NAMESTRING ();
1670
1671 processing_gcc_compilation = 0;
1672 if (nlist.n_type == N_TEXT)
1673 {
1674 const char *tempstring = namestring;
1675
1676 if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1677 processing_gcc_compilation = 1;
1678 else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1679 processing_gcc_compilation = 2;
1680 if (tempstring[0] == bfd_get_symbol_leading_char (symfile_bfd))
1681 ++tempstring;
1682 if (STREQN (tempstring, "__gnu_compiled", 14))
1683 processing_gcc_compilation = 2;
1684 }
1685
1686 /* Try to select a C++ demangling based on the compilation unit
1687 producer. */
1688
1689 if (processing_gcc_compilation)
1690 {
1691 if (AUTO_DEMANGLING)
1692 {
1693 set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1694 }
1695 }
1696 }
1697 else
1698 {
1699 /* The N_SO starting this symtab is the first symbol, so we
1700 better not check the symbol before it. I'm not this can
1701 happen, but it doesn't hurt to check for it. */
1702 bfd_seek (symfile_bfd, sym_offset, SEEK_CUR);
1703 processing_gcc_compilation = 0;
1704 }
1705
1706 if (symbuf_idx == symbuf_end)
1707 fill_symbuf (abfd);
1708 bufp = &symbuf[symbuf_idx];
1709 if (bfd_h_get_8 (abfd, bufp->e_type) != N_SO)
1710 error("First symbol in segment of executable not a source symbol");
1711
1712 max_symnum = sym_size / symbol_size;
1713
1714 for (symnum = 0;
1715 symnum < max_symnum;
1716 symnum++)
1717 {
1718 QUIT; /* Allow this to be interruptable */
1719 if (symbuf_idx == symbuf_end)
1720 fill_symbuf(abfd);
1721 bufp = &symbuf[symbuf_idx++];
1722 INTERNALIZE_SYMBOL (nlist, bufp, abfd);
1723 OBJSTAT (objfile, n_stabs++);
1724
1725 type = bfd_h_get_8 (abfd, bufp->e_type);
1726
1727 SET_NAMESTRING ();
1728
1729 if (type & N_STAB) {
1730 process_one_symbol (type, nlist.n_desc, nlist.n_value,
1731 namestring, section_offsets, objfile);
1732 }
1733 /* We skip checking for a new .o or -l file; that should never
1734 happen in this routine. */
1735 else if (type == N_TEXT)
1736 {
1737 /* I don't think this code will ever be executed, because
1738 the GCC_COMPILED_FLAG_SYMBOL usually is right before
1739 the N_SO symbol which starts this source file.
1740 However, there is no reason not to accept
1741 the GCC_COMPILED_FLAG_SYMBOL anywhere. */
1742
1743 if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1744 processing_gcc_compilation = 1;
1745 else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1746 processing_gcc_compilation = 2;
1747
1748 if (AUTO_DEMANGLING)
1749 {
1750 set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1751 }
1752 }
1753 else if (type & N_EXT || type == (unsigned char)N_TEXT
1754 || type == (unsigned char)N_NBTEXT
1755 ) {
1756 /* Global symbol: see if we came across a dbx defintion for
1757 a corresponding symbol. If so, store the value. Remove
1758 syms from the chain when their values are stored, but
1759 search the whole chain, as there may be several syms from
1760 different files with the same name. */
1761 /* This is probably not true. Since the files will be read
1762 in one at a time, each reference to a global symbol will
1763 be satisfied in each file as it appears. So we skip this
1764 section. */
1765 ;
1766 }
1767 }
1768
1769 current_objfile = NULL;
1770
1771 /* In a Solaris elf file, this variable, which comes from the
1772 value of the N_SO symbol, will still be 0. Luckily, text_offset,
1773 which comes from pst->textlow is correct. */
1774 if (last_source_start_addr == 0)
1775 last_source_start_addr = text_offset;
1776
1777 /* In reordered executables last_source_start_addr may not be the
1778 lower bound for this symtab, instead use text_offset which comes
1779 from pst->textlow which is correct. */
1780 if (last_source_start_addr > text_offset)
1781 last_source_start_addr = text_offset;
1782
1783 pst->symtab = end_symtab (text_offset + text_size, objfile, SECT_OFF_TEXT);
1784
1785 if (ARM_DEMANGLING) /* process incomplete C++ types now */
1786 process_now(objfile);
1787
1788 end_stabs ();
1789 }
1790
1791 \f
1792 /* This handles a single symbol from the symbol-file, building symbols
1793 into a GDB symtab. It takes these arguments and an implicit argument.
1794
1795 TYPE is the type field of the ".stab" symbol entry.
1796 DESC is the desc field of the ".stab" entry.
1797 VALU is the value field of the ".stab" entry.
1798 NAME is the symbol name, in our address space.
1799 SECTION_OFFSETS is a set of amounts by which the sections of this object
1800 file were relocated when it was loaded into memory.
1801 All symbols that refer
1802 to memory locations need to be offset by these amounts.
1803 OBJFILE is the object file from which we are reading symbols.
1804 It is used in end_symtab. */
1805
1806 void
1807 process_one_symbol (type, desc, valu, name, section_offsets, objfile)
1808 int type, desc;
1809 CORE_ADDR valu;
1810 char *name;
1811 struct section_offsets *section_offsets;
1812 struct objfile *objfile;
1813 {
1814 #ifdef SUN_FIXED_LBRAC_BUG
1815 /* If SUN_FIXED_LBRAC_BUG is defined, then it tells us whether we need
1816 to correct the address of N_LBRAC's. If it is not defined, then
1817 we never need to correct the addresses. */
1818
1819 /* This records the last pc address we've seen. We depend on there being
1820 an SLINE or FUN or SO before the first LBRAC, since the variable does
1821 not get reset in between reads of different symbol files. */
1822 static CORE_ADDR last_pc_address;
1823 #endif
1824
1825 register struct context_stack *new;
1826 /* This remembers the address of the start of a function. It is used
1827 because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries are
1828 relative to the current function's start address. On systems
1829 other than Solaris 2, this just holds the SECT_OFF_TEXT value, and is
1830 used to relocate these symbol types rather than SECTION_OFFSETS. */
1831 static CORE_ADDR function_start_offset;
1832
1833 /* If this is nonzero, we've seen a non-gcc N_OPT symbol for this source
1834 file. Used to detect the SunPRO solaris compiler. */
1835 static int n_opt_found;
1836
1837 /* The stab type used for the definition of the last function.
1838 N_STSYM or N_GSYM for SunOS4 acc; N_FUN for other compilers. */
1839 static int function_stab_type = 0;
1840
1841 if (!block_address_function_relative)
1842 /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
1843 function start address, so just use the text offset. */
1844 function_start_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT);
1845
1846 /* Something is wrong if we see real data before
1847 seeing a source file name. */
1848
1849 if (last_source_file == NULL && type != (unsigned char)N_SO)
1850 {
1851 /* Ignore any symbols which appear before an N_SO symbol. Currently
1852 no one puts symbols there, but we should deal gracefully with the
1853 case. A complain()t might be in order (if !IGNORE_SYMBOL (type)),
1854 but this should not be an error (). */
1855 return;
1856 }
1857
1858 switch (type)
1859 {
1860 case N_FUN:
1861 case N_FNAME:
1862
1863 if (*name == '\000')
1864 {
1865 /* This N_FUN marks the end of a function. This closes off the
1866 current block. */
1867 within_function = 0;
1868 new = pop_context ();
1869
1870 /* Make a block for the local symbols within. */
1871 finish_block (new->name, &local_symbols, new->old_blocks,
1872 new->start_addr, new->start_addr + valu,
1873 objfile);
1874 break;
1875 }
1876
1877 /* Relocate for dynamic loading */
1878 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1879 goto define_a_symbol;
1880
1881 case N_LBRAC:
1882 /* This "symbol" just indicates the start of an inner lexical
1883 context within a function. */
1884
1885 /* Ignore extra outermost context from SunPRO cc and acc. */
1886 if (n_opt_found && desc == 1)
1887 break;
1888
1889 #if defined(BLOCK_ADDRESS_ABSOLUTE)
1890 /* Relocate for dynamic loading (?). */
1891 valu += function_start_offset;
1892 #else
1893 if (block_address_function_relative)
1894 /* Relocate for Sun ELF acc fn-relative syms. */
1895 valu += function_start_offset;
1896 else
1897 /* On most machines, the block addresses are relative to the
1898 N_SO, the linker did not relocate them (sigh). */
1899 valu += last_source_start_addr;
1900 #endif
1901
1902 #ifdef SUN_FIXED_LBRAC_BUG
1903 if (!SUN_FIXED_LBRAC_BUG && valu < last_pc_address) {
1904 /* Patch current LBRAC pc value to match last handy pc value */
1905 complain (&lbrac_complaint);
1906 valu = last_pc_address;
1907 }
1908 #endif
1909 new = push_context (desc, valu);
1910 break;
1911
1912 case N_RBRAC:
1913 /* This "symbol" just indicates the end of an inner lexical
1914 context that was started with N_LBRAC. */
1915
1916 /* Ignore extra outermost context from SunPRO cc and acc. */
1917 if (n_opt_found && desc == 1)
1918 break;
1919
1920 #if defined(BLOCK_ADDRESS_ABSOLUTE)
1921 /* Relocate for dynamic loading (?). */
1922 valu += function_start_offset;
1923 #else
1924 if (block_address_function_relative)
1925 /* Relocate for Sun ELF acc fn-relative syms. */
1926 valu += function_start_offset;
1927 else
1928 /* On most machines, the block addresses are relative to the
1929 N_SO, the linker did not relocate them (sigh). */
1930 valu += last_source_start_addr;
1931 #endif
1932
1933 new = pop_context();
1934 if (desc != new->depth)
1935 complain (&lbrac_mismatch_complaint, symnum);
1936
1937 /* Some compilers put the variable decls inside of an
1938 LBRAC/RBRAC block. This macro should be nonzero if this
1939 is true. DESC is N_DESC from the N_RBRAC symbol.
1940 GCC_P is true if we've detected the GCC_COMPILED_SYMBOL
1941 or the GCC2_COMPILED_SYMBOL. */
1942 #if !defined (VARIABLES_INSIDE_BLOCK)
1943 #define VARIABLES_INSIDE_BLOCK(desc, gcc_p) 0
1944 #endif
1945
1946 /* Can only use new->locals as local symbols here if we're in
1947 gcc or on a machine that puts them before the lbrack. */
1948 if (!VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1949 local_symbols = new->locals;
1950
1951 if (context_stack_depth
1952 > !VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1953 {
1954 /* This is not the outermost LBRAC...RBRAC pair in the function,
1955 its local symbols preceded it, and are the ones just recovered
1956 from the context stack. Define the block for them (but don't
1957 bother if the block contains no symbols. Should we complain
1958 on blocks without symbols? I can't think of any useful purpose
1959 for them). */
1960 if (local_symbols != NULL)
1961 {
1962 /* Muzzle a compiler bug that makes end < start. (which
1963 compilers? Is this ever harmful?). */
1964 if (new->start_addr > valu)
1965 {
1966 complain (&lbrac_rbrac_complaint);
1967 new->start_addr = valu;
1968 }
1969 /* Make a block for the local symbols within. */
1970 finish_block (0, &local_symbols, new->old_blocks,
1971 new->start_addr, valu, objfile);
1972 }
1973 }
1974 else
1975 {
1976 /* This is the outermost LBRAC...RBRAC pair. There is no
1977 need to do anything; leave the symbols that preceded it
1978 to be attached to the function's own block. We need to
1979 indicate that we just moved outside of the function. */
1980 within_function = 0;
1981 }
1982
1983 if (VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1984 /* Now pop locals of block just finished. */
1985 local_symbols = new->locals;
1986 break;
1987
1988 case N_FN:
1989 case N_FN_SEQ:
1990 /* This kind of symbol indicates the start of an object file. */
1991 /* Relocate for dynamic loading */
1992 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1993 break;
1994
1995 case N_SO:
1996 /* This type of symbol indicates the start of data
1997 for one source file.
1998 Finish the symbol table of the previous source file
1999 (if any) and start accumulating a new symbol table. */
2000 /* Relocate for dynamic loading */
2001 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2002
2003 n_opt_found = 0;
2004
2005 #ifdef SUN_FIXED_LBRAC_BUG
2006 last_pc_address = valu; /* Save for SunOS bug circumcision */
2007 #endif
2008
2009 #ifdef PCC_SOL_BROKEN
2010 /* pcc bug, occasionally puts out SO for SOL. */
2011 if (context_stack_depth > 0)
2012 {
2013 start_subfile (name, NULL);
2014 break;
2015 }
2016 #endif
2017 if (last_source_file)
2018 {
2019 /* Check if previous symbol was also an N_SO (with some
2020 sanity checks). If so, that one was actually the directory
2021 name, and the current one is the real file name.
2022 Patch things up. */
2023 if (previous_stab_code == (unsigned char) N_SO)
2024 {
2025 patch_subfile_names (current_subfile, name);
2026 break; /* Ignore repeated SOs */
2027 }
2028 end_symtab (valu, objfile, SECT_OFF_TEXT);
2029 end_stabs ();
2030 }
2031
2032 /* Null name means this just marks the end of text for this .o file.
2033 Don't start a new symtab in this case. */
2034 if (*name == '\000')
2035 break;
2036
2037 start_stabs ();
2038 start_symtab (name, NULL, valu);
2039 record_debugformat ("stabs");
2040 break;
2041
2042 case N_SOL:
2043 /* This type of symbol indicates the start of data for
2044 a sub-source-file, one whose contents were copied or
2045 included in the compilation of the main source file
2046 (whose name was given in the N_SO symbol.) */
2047 /* Relocate for dynamic loading */
2048 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2049 start_subfile (name, current_subfile->dirname);
2050 break;
2051
2052 case N_BINCL:
2053 push_subfile ();
2054 add_new_header_file (name, valu);
2055 start_subfile (name, current_subfile->dirname);
2056 break;
2057
2058 case N_EINCL:
2059 start_subfile (pop_subfile (), current_subfile->dirname);
2060 break;
2061
2062 case N_EXCL:
2063 add_old_header_file (name, valu);
2064 break;
2065
2066 case N_SLINE:
2067 /* This type of "symbol" really just records
2068 one line-number -- core-address correspondence.
2069 Enter it in the line list for this symbol table. */
2070 /* Relocate for dynamic loading and for ELF acc fn-relative syms. */
2071 valu += function_start_offset;
2072 #ifdef SUN_FIXED_LBRAC_BUG
2073 last_pc_address = valu; /* Save for SunOS bug circumcision */
2074 #endif
2075 record_line (current_subfile, desc, valu);
2076 break;
2077
2078 case N_BCOMM:
2079 common_block_start (name, objfile);
2080 break;
2081
2082 case N_ECOMM:
2083 common_block_end (objfile);
2084 break;
2085
2086 /* The following symbol types need to have the appropriate offset added
2087 to their value; then we process symbol definitions in the name. */
2088
2089 case N_STSYM: /* Static symbol in data seg */
2090 case N_LCSYM: /* Static symbol in BSS seg */
2091 case N_ROSYM: /* Static symbol in Read-only data seg */
2092 /* HORRID HACK DEPT. However, it's Sun's furgin' fault.
2093 Solaris2's stabs-in-elf makes *most* symbols relative
2094 but leaves a few absolute (at least for Solaris 2.1 and version
2095 2.0.1 of the SunPRO compiler). N_STSYM and friends sit on the fence.
2096 .stab "foo:S...",N_STSYM is absolute (ld relocates it)
2097 .stab "foo:V...",N_STSYM is relative (section base subtracted).
2098 This leaves us no choice but to search for the 'S' or 'V'...
2099 (or pass the whole section_offsets stuff down ONE MORE function
2100 call level, which we really don't want to do). */
2101 {
2102 char *p;
2103
2104 /* .o files and NLMs have non-zero text seg offsets, but don't need
2105 their static syms offset in this fashion. XXX - This is really a
2106 crock that should be fixed in the solib handling code so that I
2107 don't have to work around it here. */
2108
2109 if (!symfile_relocatable)
2110 {
2111 p = strchr (name, ':');
2112 if (p != 0 && p[1] == 'S')
2113 {
2114 /* The linker relocated it. We don't want to add an
2115 elfstab_offset_sections-type offset, but we *do* want
2116 to add whatever solib.c passed to symbol_file_add as
2117 addr (this is known to affect SunOS4, and I suspect ELF
2118 too). Since elfstab_offset_sections currently does not
2119 muck with the text offset (there is no Ttext.text
2120 symbol), we can get addr from the text offset. If
2121 elfstab_offset_sections ever starts dealing with the
2122 text offset, and we still need to do this, we need to
2123 invent a SECT_OFF_ADDR_KLUDGE or something. */
2124 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2125 goto define_a_symbol;
2126 }
2127 }
2128 /* Since it's not the kludge case, re-dispatch to the right handler. */
2129 switch (type) {
2130 case N_STSYM: goto case_N_STSYM;
2131 case N_LCSYM: goto case_N_LCSYM;
2132 case N_ROSYM: goto case_N_ROSYM;
2133 default: abort();
2134 }
2135 }
2136
2137 case_N_STSYM: /* Static symbol in data seg */
2138 case N_DSLINE: /* Source line number, data seg */
2139 valu += ANOFFSET (section_offsets, SECT_OFF_DATA);
2140 goto define_a_symbol;
2141
2142 case_N_LCSYM: /* Static symbol in BSS seg */
2143 case N_BSLINE: /* Source line number, bss seg */
2144 /* N_BROWS: overlaps with N_BSLINE */
2145 valu += ANOFFSET (section_offsets, SECT_OFF_BSS);
2146 goto define_a_symbol;
2147
2148 case_N_ROSYM: /* Static symbol in Read-only data seg */
2149 valu += ANOFFSET (section_offsets, SECT_OFF_RODATA);
2150 goto define_a_symbol;
2151
2152 case N_ENTRY: /* Alternate entry point */
2153 /* Relocate for dynamic loading */
2154 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
2155 goto define_a_symbol;
2156
2157 /* The following symbol types we don't know how to process. Handle
2158 them in a "default" way, but complain to people who care. */
2159 default:
2160 case N_CATCH: /* Exception handler catcher */
2161 case N_EHDECL: /* Exception handler name */
2162 case N_PC: /* Global symbol in Pascal */
2163 case N_M2C: /* Modula-2 compilation unit */
2164 /* N_MOD2: overlaps with N_EHDECL */
2165 case N_SCOPE: /* Modula-2 scope information */
2166 case N_ECOML: /* End common (local name) */
2167 case N_NBTEXT: /* Gould Non-Base-Register symbols??? */
2168 case N_NBDATA:
2169 case N_NBBSS:
2170 case N_NBSTS:
2171 case N_NBLCS:
2172 complain (&unknown_symtype_complaint, local_hex_string (type));
2173 /* FALLTHROUGH */
2174
2175 /* The following symbol types don't need the address field relocated,
2176 since it is either unused, or is absolute. */
2177 define_a_symbol:
2178 case N_GSYM: /* Global variable */
2179 case N_NSYMS: /* Number of symbols (ultrix) */
2180 case N_NOMAP: /* No map? (ultrix) */
2181 case N_RSYM: /* Register variable */
2182 case N_DEFD: /* Modula-2 GNU module dependency */
2183 case N_SSYM: /* Struct or union element */
2184 case N_LSYM: /* Local symbol in stack */
2185 case N_PSYM: /* Parameter variable */
2186 case N_LENG: /* Length of preceding symbol type */
2187 if (name)
2188 {
2189 int deftype;
2190 char *colon_pos = strchr (name, ':');
2191 if (colon_pos == NULL)
2192 deftype = '\0';
2193 else
2194 deftype = colon_pos[1];
2195
2196 switch (deftype)
2197 {
2198 case 'f':
2199 case 'F':
2200 function_stab_type = type;
2201
2202 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
2203 /* Deal with the SunPRO 3.0 compiler which omits the address
2204 from N_FUN symbols. */
2205 if (type == N_FUN
2206 && valu == ANOFFSET (section_offsets, SECT_OFF_TEXT))
2207 {
2208 struct minimal_symbol *msym;
2209 char *p;
2210 int n;
2211
2212 p = strchr (name, ':');
2213 if (p == NULL)
2214 p = name;
2215 n = p - name;
2216 p = alloca (n + 1);
2217 strncpy (p, name, n);
2218 p[n] = 0;
2219
2220 msym = lookup_minimal_symbol (p, last_source_file,
2221 objfile);
2222 if (msym)
2223 valu = SYMBOL_VALUE_ADDRESS (msym);
2224 }
2225 #endif
2226
2227 #ifdef SUN_FIXED_LBRAC_BUG
2228 /* The Sun acc compiler, under SunOS4, puts out
2229 functions with N_GSYM or N_STSYM. The problem is
2230 that the address of the symbol is no good (for N_GSYM
2231 it doesn't even attept an address; for N_STSYM it
2232 puts out an address but then it gets relocated
2233 relative to the data segment, not the text segment).
2234 Currently we can't fix this up later as we do for
2235 some types of symbol in scan_file_globals.
2236 Fortunately we do have a way of finding the address -
2237 we know that the value in last_pc_address is either
2238 the one we want (if we're dealing with the first
2239 function in an object file), or somewhere in the
2240 previous function. This means that we can use the
2241 minimal symbol table to get the address. */
2242
2243 /* Starting with release 3.0, the Sun acc compiler,
2244 under SunOS4, puts out functions with N_FUN and a value
2245 of zero. This gets relocated to the start of the text
2246 segment of the module, which is no good either.
2247 Under SunOS4 we can deal with this as N_SLINE and N_SO
2248 entries contain valid absolute addresses.
2249 Release 3.0 acc also puts out N_OPT entries, which makes
2250 it possible to discern acc from cc or gcc. */
2251
2252 if (type == N_GSYM || type == N_STSYM
2253 || (type == N_FUN
2254 && n_opt_found && !block_address_function_relative))
2255 {
2256 struct minimal_symbol *m;
2257 int l = colon_pos - name;
2258
2259 m = lookup_minimal_symbol_by_pc (last_pc_address);
2260 if (m && STREQN (SYMBOL_NAME (m), name, l)
2261 && SYMBOL_NAME (m) [l] == '\0')
2262 /* last_pc_address was in this function */
2263 valu = SYMBOL_VALUE (m);
2264 else if (m && SYMBOL_NAME (m+1)
2265 && STREQN (SYMBOL_NAME (m+1), name, l)
2266 && SYMBOL_NAME (m+1) [l] == '\0')
2267 /* last_pc_address was in last function */
2268 valu = SYMBOL_VALUE (m+1);
2269 else
2270 /* Not found - use last_pc_address (for finish_block) */
2271 valu = last_pc_address;
2272 }
2273
2274 last_pc_address = valu; /* Save for SunOS bug circumcision */
2275 #endif
2276
2277 if (block_address_function_relative)
2278 /* For Solaris 2.0 compilers, the block addresses and
2279 N_SLINE's are relative to the start of the
2280 function. On normal systems, and when using gcc on
2281 Solaris 2.0, these addresses are just absolute, or
2282 relative to the N_SO, depending on
2283 BLOCK_ADDRESS_ABSOLUTE. */
2284 function_start_offset = valu;
2285
2286 within_function = 1;
2287 if (context_stack_depth > 0)
2288 {
2289 new = pop_context ();
2290 /* Make a block for the local symbols within. */
2291 finish_block (new->name, &local_symbols, new->old_blocks,
2292 new->start_addr, valu, objfile);
2293 }
2294 /* Stack must be empty now. */
2295 if (context_stack_depth != 0)
2296 complain (&lbrac_unmatched_complaint, symnum);
2297
2298 new = push_context (0, valu);
2299 new->name = define_symbol (valu, name, desc, type, objfile);
2300 break;
2301
2302 default:
2303 define_symbol (valu, name, desc, type, objfile);
2304 break;
2305 }
2306 }
2307 break;
2308
2309 /* We use N_OPT to carry the gcc2_compiled flag. Sun uses it
2310 for a bunch of other flags, too. Someday we may parse their
2311 flags; for now we ignore theirs and hope they'll ignore ours. */
2312 case N_OPT: /* Solaris 2: Compiler options */
2313 if (name)
2314 {
2315 if (STREQ (name, GCC2_COMPILED_FLAG_SYMBOL))
2316 {
2317 processing_gcc_compilation = 2;
2318 #if 1 /* Works, but is experimental. -fnf */
2319 if (AUTO_DEMANGLING)
2320 {
2321 set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
2322 }
2323 #endif
2324 }
2325 else
2326 n_opt_found = 1;
2327 }
2328 break;
2329
2330 /* The following symbol types can be ignored. */
2331 case N_OBJ: /* Solaris 2: Object file dir and name */
2332 /* N_UNDF: Solaris 2: file separator mark */
2333 /* N_UNDF: -- we will never encounter it, since we only process one
2334 file's symbols at once. */
2335 case N_ENDM: /* Solaris 2: End of module */
2336 case N_MAIN: /* Name of main routine. */
2337 break;
2338 }
2339
2340 previous_stab_code = type;
2341 }
2342 \f
2343 /* FIXME: The only difference between this and elfstab_build_psymtabs
2344 is the call to install_minimal_symbols for elf, and the support for
2345 split sections. If the differences are really that small, the code
2346 should be shared. */
2347
2348 /* Scan and build partial symbols for an coff symbol file.
2349 The coff file has already been processed to get its minimal symbols.
2350
2351 This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2352 rolled into one.
2353
2354 OBJFILE is the object file we are reading symbols from.
2355 ADDR is the address relative to which the symbols are (e.g.
2356 the base address of the text segment).
2357 MAINLINE is true if we are reading the main symbol
2358 table (as opposed to a shared lib or dynamically loaded file).
2359 TEXTADDR is the address of the text section.
2360 TEXTSIZE is the size of the text section.
2361 STABSECTS is the list of .stab sections in OBJFILE.
2362 STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
2363 .stabstr section exists.
2364
2365 This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
2366 adjusted for coff details. */
2367
2368 void
2369 coffstab_build_psymtabs (objfile, section_offsets, mainline,
2370 textaddr, textsize, stabsects,
2371 stabstroffset, stabstrsize)
2372 struct objfile *objfile;
2373 struct section_offsets *section_offsets;
2374 int mainline;
2375 CORE_ADDR textaddr;
2376 unsigned int textsize;
2377 struct stab_section_list *stabsects;
2378 file_ptr stabstroffset;
2379 unsigned int stabstrsize;
2380 {
2381 int val;
2382 bfd *sym_bfd = objfile->obfd;
2383 char *name = bfd_get_filename (sym_bfd);
2384 struct dbx_symfile_info *info;
2385 unsigned int stabsize;
2386
2387 /* There is already a dbx_symfile_info allocated by our caller.
2388 It might even contain some info from the coff symtab to help us. */
2389 info = objfile->sym_stab_info;
2390
2391 DBX_TEXT_ADDR (objfile) = textaddr;
2392 DBX_TEXT_SIZE (objfile) = textsize;
2393
2394 #define COFF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */
2395 DBX_SYMBOL_SIZE (objfile) = COFF_STABS_SYMBOL_SIZE;
2396 DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
2397
2398 if (stabstrsize > bfd_get_size (sym_bfd))
2399 error ("ridiculous string table size: %d bytes", stabstrsize);
2400 DBX_STRINGTAB (objfile) = (char *)
2401 obstack_alloc (&objfile->psymbol_obstack, stabstrsize+1);
2402 OBJSTAT (objfile, sz_strtab += stabstrsize+1);
2403
2404 /* Now read in the string table in one big gulp. */
2405
2406 val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
2407 if (val < 0)
2408 perror_with_name (name);
2409 val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, 1, sym_bfd);
2410 if (val != stabstrsize)
2411 perror_with_name (name);
2412
2413 stabsread_new_init ();
2414 buildsym_new_init ();
2415 free_header_files ();
2416 init_header_files ();
2417
2418 processing_acc_compilation = 1;
2419
2420 /* In a coff file, we've already installed the minimal symbols that came
2421 from the coff (non-stab) symbol table, so always act like an
2422 incremental load here. */
2423 if (stabsects->next == NULL)
2424 {
2425 stabsize = bfd_section_size (sym_bfd, stabsects->section);
2426 DBX_SYMCOUNT (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
2427 DBX_SYMTAB_OFFSET (objfile) = stabsects->section->filepos;
2428 }
2429 else
2430 {
2431 struct stab_section_list *stabsect;
2432
2433 DBX_SYMCOUNT (objfile) = 0;
2434 for (stabsect = stabsects; stabsect != NULL; stabsect = stabsect->next)
2435 {
2436 stabsize = bfd_section_size (sym_bfd, stabsect->section);
2437 DBX_SYMCOUNT (objfile) += stabsize / DBX_SYMBOL_SIZE (objfile);
2438 }
2439
2440 DBX_SYMTAB_OFFSET (objfile) = stabsects->section->filepos;
2441
2442 symbuf_sections = stabsects->next;
2443 symbuf_left = bfd_section_size (sym_bfd, stabsects->section);
2444 symbuf_read = 0;
2445 }
2446
2447 dbx_symfile_read (objfile, section_offsets, 0);
2448 }
2449 \f
2450 /* Scan and build partial symbols for an ELF symbol file.
2451 This ELF file has already been processed to get its minimal symbols,
2452 and any DWARF symbols that were in it.
2453
2454 This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2455 rolled into one.
2456
2457 OBJFILE is the object file we are reading symbols from.
2458 ADDR is the address relative to which the symbols are (e.g.
2459 the base address of the text segment).
2460 MAINLINE is true if we are reading the main symbol
2461 table (as opposed to a shared lib or dynamically loaded file).
2462 STABOFFSET and STABSIZE define the location in OBJFILE where the .stab
2463 section exists.
2464 STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
2465 .stabstr section exists.
2466
2467 This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
2468 adjusted for elf details. */
2469
2470 void
2471 elfstab_build_psymtabs (objfile, section_offsets, mainline,
2472 staboffset, stabsize,
2473 stabstroffset, stabstrsize)
2474 struct objfile *objfile;
2475 struct section_offsets *section_offsets;
2476 int mainline;
2477 file_ptr staboffset;
2478 unsigned int stabsize;
2479 file_ptr stabstroffset;
2480 unsigned int stabstrsize;
2481 {
2482 int val;
2483 bfd *sym_bfd = objfile->obfd;
2484 char *name = bfd_get_filename (sym_bfd);
2485 struct dbx_symfile_info *info;
2486 asection *text_sect;
2487
2488 /* There is already a dbx_symfile_info allocated by our caller.
2489 It might even contain some info from the ELF symtab to help us. */
2490 info = objfile->sym_stab_info;
2491
2492 text_sect = bfd_get_section_by_name (sym_bfd, ".text");
2493 if (!text_sect)
2494 error ("Can't find .text section in symbol file");
2495 DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
2496 DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
2497
2498 #define ELF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */
2499 DBX_SYMBOL_SIZE (objfile) = ELF_STABS_SYMBOL_SIZE;
2500 DBX_SYMCOUNT (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
2501 DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
2502 DBX_SYMTAB_OFFSET (objfile) = staboffset;
2503
2504 if (stabstrsize > bfd_get_size (sym_bfd))
2505 error ("ridiculous string table size: %d bytes", stabstrsize);
2506 DBX_STRINGTAB (objfile) = (char *)
2507 obstack_alloc (&objfile->psymbol_obstack, stabstrsize+1);
2508 OBJSTAT (objfile, sz_strtab += stabstrsize+1);
2509
2510 /* Now read in the string table in one big gulp. */
2511
2512 val = bfd_seek (sym_bfd, stabstroffset, SEEK_SET);
2513 if (val < 0)
2514 perror_with_name (name);
2515 val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, 1, sym_bfd);
2516 if (val != stabstrsize)
2517 perror_with_name (name);
2518
2519 stabsread_new_init ();
2520 buildsym_new_init ();
2521 free_header_files ();
2522 init_header_files ();
2523 install_minimal_symbols (objfile);
2524
2525 processing_acc_compilation = 1;
2526
2527 /* In an elf file, we've already installed the minimal symbols that came
2528 from the elf (non-stab) symbol table, so always act like an
2529 incremental load here. */
2530 dbx_symfile_read (objfile, section_offsets, 0);
2531 }
2532 \f
2533 /* Scan and build partial symbols for a file with special sections for stabs
2534 and stabstrings. The file has already been processed to get its minimal
2535 symbols, and any other symbols that might be necessary to resolve GSYMs.
2536
2537 This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2538 rolled into one.
2539
2540 OBJFILE is the object file we are reading symbols from.
2541 ADDR is the address relative to which the symbols are (e.g. the base address
2542 of the text segment).
2543 MAINLINE is true if we are reading the main symbol table (as opposed to a
2544 shared lib or dynamically loaded file).
2545 STAB_NAME is the name of the section that contains the stabs.
2546 STABSTR_NAME is the name of the section that contains the stab strings.
2547
2548 This routine is mostly copied from dbx_symfile_init and dbx_symfile_read. */
2549
2550 void
2551 stabsect_build_psymtabs (objfile, section_offsets, mainline, stab_name,
2552 stabstr_name, text_name)
2553 struct objfile *objfile;
2554 struct section_offsets *section_offsets;
2555 int mainline;
2556 char *stab_name;
2557 char *stabstr_name;
2558 char *text_name;
2559 {
2560 int val;
2561 bfd *sym_bfd = objfile->obfd;
2562 char *name = bfd_get_filename (sym_bfd);
2563 asection *stabsect;
2564 asection *stabstrsect;
2565 asection *text_sect;
2566
2567 stabsect = bfd_get_section_by_name (sym_bfd, stab_name);
2568 stabstrsect = bfd_get_section_by_name (sym_bfd, stabstr_name);
2569
2570 if (!stabsect)
2571 return;
2572
2573 if (!stabstrsect)
2574 error ("stabsect_build_psymtabs: Found stabs (%s), but not string section (%s)",
2575 stab_name, stabstr_name);
2576
2577 objfile->sym_stab_info = (PTR) xmalloc (sizeof (struct dbx_symfile_info));
2578 memset (objfile->sym_stab_info, 0, sizeof (struct dbx_symfile_info));
2579
2580 text_sect = bfd_get_section_by_name (sym_bfd, text_name);
2581 if (!text_sect)
2582 error ("Can't find %s section in symbol file", text_name);
2583 DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
2584 DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
2585
2586 DBX_SYMBOL_SIZE (objfile) = sizeof (struct external_nlist);
2587 DBX_SYMCOUNT (objfile) = bfd_section_size (sym_bfd, stabsect)
2588 / DBX_SYMBOL_SIZE (objfile);
2589 DBX_STRINGTAB_SIZE (objfile) = bfd_section_size (sym_bfd, stabstrsect);
2590 DBX_SYMTAB_OFFSET (objfile) = stabsect->filepos; /* XXX - FIXME: POKING INSIDE BFD DATA STRUCTURES */
2591
2592 if (DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
2593 error ("ridiculous string table size: %d bytes", DBX_STRINGTAB_SIZE (objfile));
2594 DBX_STRINGTAB (objfile) = (char *)
2595 obstack_alloc (&objfile->psymbol_obstack, DBX_STRINGTAB_SIZE (objfile) + 1);
2596 OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile) + 1);
2597
2598 /* Now read in the string table in one big gulp. */
2599
2600 val = bfd_get_section_contents (sym_bfd, /* bfd */
2601 stabstrsect, /* bfd section */
2602 DBX_STRINGTAB (objfile), /* input buffer */
2603 0, /* offset into section */
2604 DBX_STRINGTAB_SIZE (objfile)); /* amount to read */
2605
2606 if (!val)
2607 perror_with_name (name);
2608
2609 stabsread_new_init ();
2610 buildsym_new_init ();
2611 free_header_files ();
2612 init_header_files ();
2613 install_minimal_symbols (objfile);
2614
2615 /* Now, do an incremental load */
2616
2617 processing_acc_compilation = 1;
2618 dbx_symfile_read (objfile, section_offsets, 0);
2619 }
2620 \f
2621 static struct sym_fns aout_sym_fns =
2622 {
2623 bfd_target_aout_flavour,
2624 dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */
2625 dbx_symfile_init, /* sym_init: read initial info, setup for sym_read() */
2626 dbx_symfile_read, /* sym_read: read a symbol file into symtab */
2627 dbx_symfile_finish, /* sym_finish: finished with file, cleanup */
2628 default_symfile_offsets,
2629 /* sym_offsets: parse user's offsets to internal form */
2630 NULL /* next: pointer to next struct sym_fns */
2631 };
2632
2633 void
2634 _initialize_dbxread ()
2635 {
2636 add_symtab_fns(&aout_sym_fns);
2637 }
This page took 0.083954 seconds and 4 git commands to generate.