1 /* Read dbx symbol tables and convert to internal format, for GDB.
2 Copyright 1986, 1987, 1988, 1989, 1990, 1991 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20 /* This module provides three functions: dbx_symfile_init,
21 which initializes to read a symbol file; dbx_new_init, which
22 discards existing cached information when all symbols are being
23 discarded; and dbx_symfile_read, which reads a symbol table
26 dbx_symfile_read only does the minimum work necessary for letting the
27 user "name" things symbolically; it does not read the entire symtab.
28 Instead, it reads the external and static symbols and puts them in partial
29 symbol tables. When more extensive information is requested of a
30 file, the corresponding partial symbol table is mutated into a full
31 fledged symbol table by going back and reading the symbols
32 for real. dbx_psymtab_to_symtab() is the function that does this */
37 #if defined(USG) || defined(__CYGNUSCLIB__)
38 #include <sys/types.h>
45 /* We don't want to use HP-UX's nlists. */
46 #define _NLIST_INCLUDED
50 #include <sys/param.h>
57 #include "breakpoint.h"
60 #include "gdbcore.h" /* for bfd stuff */
61 #include "libbfd.h" /* FIXME Secret internal BFD stuff (bfd_read) */
66 #include "libaout.h" /* FIXME Secret internal BFD stuff for a.out */
71 #include "gdb-stabs.h"
73 #include "aout/aout64.h"
74 #include "aout/stab_gnu.h" /* We always use GNU stabs, not native, now */
76 /* Each partial symbol table entry contains a pointer to private data for the
77 read_symtab() function to use when expanding a partial symbol table entry
78 to a full symbol table entry.
80 For dbxread this structure contains the offset within the file symbol table
81 of first local symbol for this file, and length (in bytes) of the section
82 of the symbol table devoted to this file's symbols (actually, the section
83 bracketed may contain more than just this file's symbols). It also contains
84 further information needed to locate the symbols if they are in an ELF file.
86 If ldsymlen is 0, the only reason for this thing's existence is the
87 dependency list. Nothing else will happen when it is read in. */
89 #define LDSYMOFF(p) (((struct symloc *)((p)->read_symtab_private))->ldsymoff)
90 #define LDSYMLEN(p) (((struct symloc *)((p)->read_symtab_private))->ldsymlen)
91 #define SYMLOC(p) ((struct symloc *)((p)->read_symtab_private))
92 #define SYMBOL_SIZE(p) (SYMLOC(p)->symbol_size)
93 #define SYMBOL_OFFSET(p) (SYMLOC(p)->symbol_offset)
94 #define STRING_OFFSET(p) (SYMLOC(p)->string_offset)
95 #define FILE_STRING_OFFSET(p) (SYMLOC(p)->file_string_offset)
103 int file_string_offset;
106 /* Macro to determine which symbols to ignore when reading the first symbol
107 of a file. Some machines override this definition. */
108 #ifndef IGNORE_SYMBOL
109 /* This code is used on Ultrix systems. Ignore it */
110 #define IGNORE_SYMBOL(type) (type == (int)N_NSYMS)
113 /* Macro for name of symbol to indicate a file compiled with gcc. */
114 #ifndef GCC_COMPILED_FLAG_SYMBOL
115 #define GCC_COMPILED_FLAG_SYMBOL "gcc_compiled."
118 /* Macro for name of symbol to indicate a file compiled with gcc2. */
119 #ifndef GCC2_COMPILED_FLAG_SYMBOL
120 #define GCC2_COMPILED_FLAG_SYMBOL "gcc2_compiled."
123 /* Define this as 1 if a pcc declaration of a char or short argument
124 gives the correct address. Otherwise assume pcc gives the
125 address of the corresponding int, which is not the same on a
126 big-endian machine. */
128 #ifndef BELIEVE_PCC_PROMOTION
129 #define BELIEVE_PCC_PROMOTION 0
132 /* Nonzero means give verbose info on gdb action. From main.c. */
133 extern int info_verbose;
135 /* The BFD for this file -- implicit parameter to next_symbol_text. */
137 static bfd *symfile_bfd;
139 /* The size of each symbol in the symbol file (in external form).
140 This is set by dbx_symfile_read when building psymtabs, and by
141 dbx_psymtab_to_symtab when building symtabs. */
143 static unsigned symbol_size;
145 /* This is the offset of the symbol table in the executable file */
146 static unsigned symbol_table_offset;
148 /* This is the offset of the string table in the executable file */
149 static unsigned string_table_offset;
151 /* For elf+stab executables, the n_strx field is not a simple index
152 into the string table. Instead, each .o file has a base offset
153 in the string table, and the associated symbols contain offsets
154 from this base. The following two variables contain the base
155 offset for the current and next .o files. */
156 static unsigned int file_string_table_offset;
157 static unsigned int next_file_string_table_offset;
159 /* Complaints about the symbols we have encountered. */
161 struct complaint lbrac_complaint =
162 {"bad block start address patched", 0, 0};
164 struct complaint string_table_offset_complaint =
165 {"bad string table offset in symbol %d", 0, 0};
167 struct complaint unknown_symtype_complaint =
168 {"unknown symbol type %s", 0, 0};
170 struct complaint lbrac_rbrac_complaint =
171 {"block start larger than block end", 0, 0};
173 struct complaint lbrac_unmatched_complaint =
174 {"unmatched N_LBRAC before symtab pos %d", 0, 0};
176 struct complaint lbrac_mismatch_complaint =
177 {"N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d", 0, 0};
179 struct complaint repeated_header_complaint =
180 {"\"repeated\" header file not previously seen, at symtab pos %d", 0, 0};
182 struct complaint repeated_header_name_complaint =
183 {"\"repeated\" header file not previously seen, named %s", 0, 0};
185 /* During initial symbol readin, we need to have a structure to keep
186 track of which psymtabs have which bincls in them. This structure
187 is used during readin to setup the list of dependencies within each
188 partial symbol table. */
190 struct header_file_location
192 char *name; /* Name of header file */
193 int instance; /* See above */
194 struct partial_symtab *pst; /* Partial symtab that has the
195 BINCL/EINCL defs for this file */
198 /* The actual list and controling variables */
199 static struct header_file_location *bincl_list, *next_bincl;
200 static int bincls_allocated;
202 /* Local function prototypes */
205 free_header_files PARAMS ((void));
208 init_header_files PARAMS ((void));
210 static struct pending *
211 copy_pending PARAMS ((struct pending *, int, struct pending *));
213 static struct symtab *
214 read_ofile_symtab PARAMS ((struct objfile *, int, int, CORE_ADDR, int,
215 struct section_offsets *));
218 dbx_psymtab_to_symtab PARAMS ((struct partial_symtab *));
221 dbx_psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
224 read_dbx_symtab PARAMS ((struct section_offsets *, struct objfile *,
228 free_bincl_list PARAMS ((struct objfile *));
230 static struct partial_symtab *
231 find_corresponding_bincl_psymtab PARAMS ((char *, int));
234 add_bincl_to_list PARAMS ((struct partial_symtab *, char *, int));
237 init_bincl_list PARAMS ((int, struct objfile *));
240 init_psymbol_list PARAMS ((struct objfile *));
243 dbx_next_symbol_text PARAMS ((void));
246 fill_symbuf PARAMS ((bfd *));
249 dbx_symfile_init PARAMS ((struct objfile *));
252 dbx_new_init PARAMS ((struct objfile *));
255 dbx_symfile_read PARAMS ((struct objfile *, struct section_offsets *, int));
258 dbx_symfile_finish PARAMS ((struct objfile *));
261 record_minimal_symbol PARAMS ((char *, CORE_ADDR, int, struct objfile *));
264 add_new_header_file PARAMS ((char *, int));
267 add_old_header_file PARAMS ((char *, int));
270 add_this_object_header_file PARAMS ((int));
272 /* Free up old header file tables */
279 if (header_files != NULL)
281 for (i = 0; i < n_header_files; i++)
283 free (header_files[i].name);
285 free ((PTR)header_files);
289 if (this_object_header_files)
291 free ((PTR)this_object_header_files);
292 this_object_header_files = NULL;
294 n_allocated_header_files = 0;
295 n_allocated_this_object_header_files = 0;
298 /* Allocate new header file tables */
304 n_allocated_header_files = 10;
305 header_files = (struct header_file *)
306 xmalloc (10 * sizeof (struct header_file));
308 n_allocated_this_object_header_files = 10;
309 this_object_header_files = (int *) xmalloc (10 * sizeof (int));
312 /* Add header file number I for this object file
313 at the next successive FILENUM. */
316 add_this_object_header_file (i)
319 if (n_this_object_header_files == n_allocated_this_object_header_files)
321 n_allocated_this_object_header_files *= 2;
322 this_object_header_files
323 = (int *) xrealloc ((char *) this_object_header_files,
324 n_allocated_this_object_header_files * sizeof (int));
327 this_object_header_files[n_this_object_header_files++] = i;
330 /* Add to this file an "old" header file, one already seen in
331 a previous object file. NAME is the header file's name.
332 INSTANCE is its instance code, to select among multiple
333 symbol tables for the same header file. */
336 add_old_header_file (name, instance)
340 register struct header_file *p = header_files;
343 for (i = 0; i < n_header_files; i++)
344 if (!strcmp (p[i].name, name) && instance == p[i].instance)
346 add_this_object_header_file (i);
349 complain (&repeated_header_complaint, (char *)symnum);
350 complain (&repeated_header_name_complaint, name);
353 /* Add to this file a "new" header file: definitions for its types follow.
354 NAME is the header file's name.
355 Most often this happens only once for each distinct header file,
356 but not necessarily. If it happens more than once, INSTANCE has
357 a different value each time, and references to the header file
358 use INSTANCE values to select among them.
360 dbx output contains "begin" and "end" markers for each new header file,
361 but at this level we just need to know which files there have been;
362 so we record the file when its "begin" is seen and ignore the "end". */
365 add_new_header_file (name, instance)
371 /* Make sure there is room for one more header file. */
373 if (n_header_files == n_allocated_header_files)
375 n_allocated_header_files *= 2;
376 header_files = (struct header_file *)
377 xrealloc ((char *) header_files,
378 (n_allocated_header_files * sizeof (struct header_file)));
381 /* Create an entry for this header file. */
383 i = n_header_files++;
384 header_files[i].name = savestring (name, strlen(name));
385 header_files[i].instance = instance;
386 header_files[i].length = 10;
387 header_files[i].vector
388 = (struct type **) xmalloc (10 * sizeof (struct type *));
389 memset (header_files[i].vector, 0, 10 * sizeof (struct type *));
391 add_this_object_header_file (i);
395 static struct type **
396 explicit_lookup_type (real_filenum, index)
397 int real_filenum, index;
399 register struct header_file *f = &header_files[real_filenum];
401 if (index >= f->length)
404 f->vector = (struct type **)
405 xrealloc (f->vector, f->length * sizeof (struct type *));
406 bzero (&f->vector[f->length / 2],
407 f->length * sizeof (struct type *) / 2);
409 return &f->vector[index];
414 record_minimal_symbol (name, address, type, objfile)
418 struct objfile *objfile;
420 enum minimal_symbol_type ms_type;
422 switch (type &~ N_EXT) {
423 case N_TEXT: ms_type = mst_text; break;
424 case N_DATA: ms_type = mst_data; break;
425 case N_BSS: ms_type = mst_bss; break;
426 case N_ABS: ms_type = mst_abs; break;
428 case N_SETV: ms_type = mst_data; break;
430 default: ms_type = mst_unknown; break;
433 prim_record_minimal_symbol (obsavestring (name, strlen (name), &objfile -> symbol_obstack),
437 /* Scan and build partial symbols for a symbol file.
438 We have been initialized by a call to dbx_symfile_init, which
439 put all the relevant info into a "struct dbx_symfile_info",
440 hung off the objfile structure.
442 SECTION_OFFSETS contains offsets relative to which the symbols in the
443 various sections are (depending where the sections were actually loaded).
444 MAINLINE is true if we are reading the main symbol
445 table (as opposed to a shared lib or dynamically loaded file). */
448 dbx_symfile_read (objfile, section_offsets, mainline)
449 struct objfile *objfile;
450 struct section_offsets *section_offsets;
451 int mainline; /* FIXME comments above */
456 sym_bfd = objfile->obfd;
457 val = bfd_seek (objfile->obfd, DBX_SYMTAB_OFFSET (objfile), L_SET);
459 perror_with_name (objfile->name);
461 /* If we are reinitializing, or if we have never loaded syms yet, init */
462 if (mainline || objfile->global_psymbols.size == 0 || objfile->static_psymbols.size == 0)
463 init_psymbol_list (objfile);
466 symbol_size = obj_dbx_symbol_entry_size (sym_bfd);
468 symbol_size = DBX_SYMBOL_SIZE (objfile);
470 symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
473 make_cleanup (really_free_pendings, 0);
475 init_minimal_symbol_collection ();
476 make_cleanup (discard_minimal_symbols, 0);
478 /* Now that the symbol table data of the executable file are all in core,
479 process them and define symbols accordingly. */
481 read_dbx_symtab (section_offsets, objfile,
482 bfd_section_vma (sym_bfd, DBX_TEXT_SECT (objfile)),
483 bfd_section_size (sym_bfd, DBX_TEXT_SECT (objfile)));
485 /* Install any minimal symbols that have been collected as the current
486 minimal symbols for this objfile. */
488 install_minimal_symbols (objfile);
490 if (!have_partial_symbols ()) {
492 printf_filtered ("(no debugging symbols found)...");
497 /* Initialize anything that needs initializing when a completely new
498 symbol file is specified (not just adding some symbols from another
499 file, e.g. a shared library). */
502 dbx_new_init (ignore)
503 struct objfile *ignore;
505 buildsym_new_init ();
506 init_header_files ();
510 /* dbx_symfile_init ()
511 is the dbx-specific initialization routine for reading symbols.
512 It is passed a struct objfile which contains, among other things,
513 the BFD for the file whose symbols are being read, and a slot for a pointer
514 to "private data" which we fill with goodies.
516 We read the string table into malloc'd space and stash a pointer to it.
518 Since BFD doesn't know how to read debug symbols in a format-independent
519 way (and may never do so...), we have to do it ourselves. We will never
520 be called unless this is an a.out (or very similar) file.
521 FIXME, there should be a cleaner peephole into the BFD environment here. */
524 dbx_symfile_init (objfile)
525 struct objfile *objfile;
528 bfd *sym_bfd = objfile->obfd;
529 char *name = bfd_get_filename (sym_bfd);
530 unsigned char size_temp[4];
532 /* Allocate struct to keep track of the symfile */
533 objfile->sym_private = (PTR)
534 xmmalloc (objfile -> md, sizeof (struct dbx_symfile_info));
536 /* FIXME POKING INSIDE BFD DATA STRUCTURES */
538 #define STRING_TABLE_OFFSET (sym_bfd->origin + obj_dbx_str_filepos (sym_bfd))
539 #define SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_dbx_sym_filepos (sym_bfd))
540 #define HP_STRING_TABLE_OFFSET (sym_bfd->origin + obj_hp_str_filepos (sym_bfd))
541 #define HP_SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_hp_sym_filepos (sym_bfd))
543 #define STRING_TABLE_OFFSET (sym_bfd->origin + obj_str_filepos (sym_bfd))
544 #define SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_sym_filepos (sym_bfd))
546 /* FIXME POKING INSIDE BFD DATA STRUCTURES */
548 DBX_TEXT_SECT (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
549 if (!DBX_TEXT_SECT (objfile))
550 error ("Can't find .text section in symbol file");
553 HP_SYMCOUNT (objfile) = obj_hp_sym_count (sym_bfd);
554 DBX_SYMCOUNT (objfile) = obj_dbx_sym_count (sym_bfd);
556 DBX_SYMBOL_SIZE (objfile) = obj_symbol_entry_size (sym_bfd);
557 DBX_SYMCOUNT (objfile) = bfd_get_symcount (sym_bfd);
559 DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
561 /* Read the string table and stash it away in the psymbol_obstack. It is
562 only needed as long as we need to expand psymbols into full symbols,
563 so when we blow away the psymbol the string table goes away as well.
564 Note that gdb used to use the results of attempting to malloc the
565 string table, based on the size it read, as a form of sanity check
566 for botched byte swapping, on the theory that a byte swapped string
567 table size would be so totally bogus that the malloc would fail. Now
568 that we put in on the psymbol_obstack, we can't do this since gdb gets
569 a fatal error (out of virtual memory) if the size is bogus. We can
570 however at least check to see if the size is zero or some negative
574 DBX_STRINGTAB_SIZE (objfile) = obj_dbx_stringtab_size (sym_bfd);
575 HP_STRINGTAB_SIZE (objfile) = obj_hp_stringtab_size (sym_bfd);
577 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, L_SET);
579 perror_with_name (name);
581 val = bfd_read ((PTR)size_temp, sizeof (long), 1, sym_bfd);
583 perror_with_name (name);
585 DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
588 if (DBX_STRINGTAB_SIZE (objfile) <= 0)
589 error ("ridiculous string table size (%d bytes).",
590 DBX_STRINGTAB_SIZE (objfile));
592 DBX_STRINGTAB (objfile) =
593 (char *) obstack_alloc (&objfile -> psymbol_obstack,
594 DBX_STRINGTAB_SIZE (objfile));
596 if (HP_STRINGTAB_SIZE (objfile) <= 0)
597 error ("ridiculous string table size (%d bytes).",
598 HP_STRINGTAB_SIZE (objfile));
600 HP_STRINGTAB (objfile) =
601 (char *) obstack_alloc (&objfile -> psymbol_obstack,
602 HP_STRINGTAB_SIZE (objfile));
605 /* Now read in the string table in one big gulp. */
607 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, L_SET);
609 perror_with_name (name);
610 val = bfd_read (DBX_STRINGTAB (objfile), DBX_STRINGTAB_SIZE (objfile), 1,
612 if (val != DBX_STRINGTAB_SIZE (objfile))
613 perror_with_name (name);
615 val = bfd_seek (sym_bfd, HP_STRING_TABLE_OFFSET, L_SET);
617 perror_with_name (name);
618 val = bfd_read (HP_STRINGTAB (objfile), HP_STRINGTAB_SIZE (objfile), 1,
620 if (val != HP_STRINGTAB_SIZE (objfile))
621 perror_with_name (name);
624 HP_SYMTAB_OFFSET (objfile) = HP_SYMBOL_TABLE_OFFSET;
628 /* Perform any local cleanups required when we are done with a particular
629 objfile. I.E, we are in the process of discarding all symbol information
630 for an objfile, freeing up all memory held for it, and unlinking the
631 objfile struct from the global list of known objfiles. */
634 dbx_symfile_finish (objfile)
635 struct objfile *objfile;
637 if (objfile->sym_private != NULL)
639 mfree (objfile -> md, objfile->sym_private);
641 free_header_files ();
645 /* Buffer for reading the symbol table entries. */
646 static struct internal_nlist symbuf[4096];
647 static int symbuf_idx;
648 static int symbuf_end;
650 /* Name of last function encountered. Used in Solaris to approximate
651 object file boundaries. */
652 static char *last_function_name;
654 /* The address in memory of the string table of the object file we are
655 reading (which might not be the "main" object file, but might be a
656 shared library or some other dynamically loaded thing). This is set
657 by read_dbx_symtab when building psymtabs, and by read_ofile_symtab
658 when building symtabs, and is used only by next_symbol_text. */
659 static char *stringtab_global;
661 /* Refill the symbol table input buffer
662 and set the variables that control fetching entries from it.
663 Reports an error if no data available.
664 This function can read past the end of the symbol table
665 (into the string table) but this does no harm. */
668 fill_symbuf (sym_bfd)
671 int nbytes = bfd_read ((PTR)symbuf, sizeof (symbuf), 1, sym_bfd);
673 perror_with_name (bfd_get_filename (sym_bfd));
674 else if (nbytes == 0)
675 error ("Premature end of file reading symbol table");
676 symbuf_end = nbytes / symbol_size;
680 /* same as above for the HP symbol table */
682 static struct symbol_dictionary_record hp_symbuf[4096];
683 static int hp_symbuf_idx;
684 static int hp_symbuf_end;
687 fill_hp_symbuf (sym_bfd)
690 int nbytes = bfd_read ((PTR)hp_symbuf, sizeof (hp_symbuf), 1, sym_bfd);
692 error ("error or end of file reading symbol table");
693 hp_symbuf_end = nbytes / sizeof (struct symbol_dictionary_record);
699 #define SWAP_SYMBOL(symp, abfd) \
701 (symp)->n_strx = bfd_h_get_32(abfd, \
702 (unsigned char *)&(symp)->n_strx); \
703 (symp)->n_desc = bfd_h_get_16 (abfd, \
704 (unsigned char *)&(symp)->n_desc); \
705 (symp)->n_value = bfd_h_get_32 (abfd, \
706 (unsigned char *)&(symp)->n_value); \
709 /* Invariant: The symbol pointed to by symbuf_idx is the first one
710 that hasn't been swapped. Swap the symbol at the same time
711 that symbuf_idx is incremented. */
713 /* dbx allows the text of a symbol name to be continued into the
714 next symbol name! When such a continuation is encountered
715 (a \ at the end of the text of a name)
716 call this function to get the continuation. */
719 dbx_next_symbol_text ()
721 if (symbuf_idx == symbuf_end)
722 fill_symbuf (symfile_bfd);
724 SWAP_SYMBOL(&symbuf[symbuf_idx], symfile_bfd);
725 return symbuf[symbuf_idx++].n_strx + stringtab_global
726 + file_string_table_offset;
729 /* Initializes storage for all of the partial symbols that will be
730 created by read_dbx_symtab and subsidiaries. */
733 init_psymbol_list (objfile)
734 struct objfile *objfile;
736 /* Free any previously allocated psymbol lists. */
737 if (objfile -> global_psymbols.list)
738 mfree (objfile -> md, (PTR)objfile -> global_psymbols.list);
739 if (objfile -> static_psymbols.list)
740 mfree (objfile -> md, (PTR)objfile -> static_psymbols.list);
742 /* Current best guess is that there are approximately a twentieth
743 of the total symbols (in a debugging file) are global or static
746 objfile -> global_psymbols.size = (DBX_SYMCOUNT (objfile) +
747 HP_SYMCOUNT (objfile)) / 10;
748 objfile -> static_psymbols.size = (DBX_SYMCOUNT (objfile) +
749 HP_SYMCOUNT (objfile)) / 10;
751 objfile -> global_psymbols.size = DBX_SYMCOUNT (objfile) / 10;
752 objfile -> static_psymbols.size = DBX_SYMCOUNT (objfile) / 10;
754 objfile -> global_psymbols.next = objfile -> global_psymbols.list = (struct partial_symbol *)
755 xmmalloc (objfile -> md, objfile -> global_psymbols.size * sizeof (struct partial_symbol));
756 objfile -> static_psymbols.next = objfile -> static_psymbols.list = (struct partial_symbol *)
757 xmmalloc (objfile -> md, objfile -> static_psymbols.size * sizeof (struct partial_symbol));
760 /* Initialize the list of bincls to contain none and have some
764 init_bincl_list (number, objfile)
766 struct objfile *objfile;
768 bincls_allocated = number;
769 next_bincl = bincl_list = (struct header_file_location *)
770 xmmalloc (objfile -> md, bincls_allocated * sizeof(struct header_file_location));
773 /* Add a bincl to the list. */
776 add_bincl_to_list (pst, name, instance)
777 struct partial_symtab *pst;
781 if (next_bincl >= bincl_list + bincls_allocated)
783 int offset = next_bincl - bincl_list;
784 bincls_allocated *= 2;
785 bincl_list = (struct header_file_location *)
786 xmrealloc (pst->objfile->md, (char *)bincl_list,
787 bincls_allocated * sizeof (struct header_file_location));
788 next_bincl = bincl_list + offset;
790 next_bincl->pst = pst;
791 next_bincl->instance = instance;
792 next_bincl++->name = name;
795 /* Given a name, value pair, find the corresponding
796 bincl in the list. Return the partial symtab associated
797 with that header_file_location. */
799 static struct partial_symtab *
800 find_corresponding_bincl_psymtab (name, instance)
804 struct header_file_location *bincl;
806 for (bincl = bincl_list; bincl < next_bincl; bincl++)
807 if (bincl->instance == instance
808 && !strcmp (name, bincl->name))
811 return (struct partial_symtab *) 0;
814 /* Free the storage allocated for the bincl list. */
817 free_bincl_list (objfile)
818 struct objfile *objfile;
820 mfree (objfile -> md, (PTR)bincl_list);
821 bincls_allocated = 0;
824 /* Given pointers to an a.out symbol table in core containing dbx
825 style data, setup partial_symtab's describing each source file for
826 which debugging information is available.
827 SYMFILE_NAME is the name of the file we are reading from
828 and SECTION_OFFSETS is the set of offsets for the various sections
829 of the file (a set of zeros if the mainline program). */
832 read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
833 struct section_offsets *section_offsets;
834 struct objfile *objfile;
838 register struct internal_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch */
839 register char *namestring;
841 int past_first_source_file = 0;
842 CORE_ADDR last_o_file_start = 0;
843 struct cleanup *old_chain;
847 struct symbol_dictionary_record *hp_bufp;
849 /* A hack: the first text symbol in the debugging library */
854 /* End of the text segment of the executable file. */
855 CORE_ADDR end_of_text_addr;
857 /* Current partial symtab */
858 struct partial_symtab *pst;
860 /* List of current psymtab's include files */
861 char **psymtab_include_list;
862 int includes_allocated;
865 /* Index within current psymtab dependency list */
866 struct partial_symtab **dependency_list;
867 int dependencies_used, dependencies_allocated;
869 /* FIXME. We probably want to change stringtab_global rather than add this
870 while processing every symbol entry. FIXME. */
871 file_string_table_offset = 0;
872 next_file_string_table_offset = 0;
875 stringtab_global = HP_STRINGTAB (objfile);
877 stringtab_global = DBX_STRINGTAB (objfile);
880 pst = (struct partial_symtab *) 0;
882 includes_allocated = 30;
884 psymtab_include_list = (char **) alloca (includes_allocated *
887 dependencies_allocated = 30;
888 dependencies_used = 0;
890 (struct partial_symtab **) alloca (dependencies_allocated *
891 sizeof (struct partial_symtab *));
893 old_chain = make_cleanup (free_objfile, objfile);
895 /* Init bincl list */
896 init_bincl_list (20, objfile);
897 make_cleanup (free_bincl_list, objfile);
899 last_source_file = 0;
901 #ifdef END_OF_TEXT_DEFAULT
902 end_of_text_addr = END_OF_TEXT_DEFAULT;
904 end_of_text_addr = text_addr + section_offsets->offsets[SECT_OFF_TEXT]
905 + text_size; /* Relocate */
908 symfile_bfd = objfile->obfd; /* For next_text_symbol */
909 abfd = objfile->obfd;
910 symbuf_end = symbuf_idx = 0;
911 next_symbol_text_func = dbx_next_symbol_text;
914 /* On pa machines, the global symbols are all in the regular HP-UX
915 symbol table. Read them in first. */
917 hp_symbuf_end = hp_symbuf_idx = 0;
918 bfd_seek (abfd, HP_SYMTAB_OFFSET (objfile), 0);
920 for (hp_symnum = 0; hp_symnum < HP_SYMCOUNT (objfile); hp_symnum++)
925 if (hp_symbuf_idx == hp_symbuf_end)
926 fill_hp_symbuf (abfd);
927 hp_bufp = &hp_symbuf[hp_symbuf_idx++];
928 switch (hp_bufp->symbol_type)
939 hp_bufp->symbol_value &= ~3; /* clear out permission bits */
947 extern int kernel_debugging;
948 if (!kernel_debugging)
957 /* Use the address of dbsubc to finish the last psymtab. */
958 if (hp_bufp->symbol_type == ST_CODE &&
959 HP_STRINGTAB (objfile)[hp_bufp->name.n_strx] == '_' &&
960 !strcmp (HP_STRINGTAB (objfile) + hp_bufp->name.n_strx, "_dbsubc"))
961 dbsubc_addr = hp_bufp->symbol_value;
962 if (hp_bufp->symbol_scope == SS_UNIVERSAL)
964 if (hp_bufp->name.n_strx > HP_STRINGTAB_SIZE (objfile))
965 error ("Invalid symbol data; bad HP string table offset: %d",
966 hp_bufp->name.n_strx);
967 /* A hack, but gets the job done. */
968 if (!strcmp (hp_bufp->name.n_strx + HP_STRINGTAB (objfile),
970 objfile -> ei.entry_file_lowpc = hp_bufp->symbol_value;
971 if (!strcmp (hp_bufp->name.n_strx + HP_STRINGTAB (objfile),
973 objfile -> ei.entry_file_highpc = hp_bufp->symbol_value;
974 record_minimal_symbol (hp_bufp->name.n_strx + HP_STRINGTAB (objfile),
975 hp_bufp->symbol_value, dbx_type | N_EXT,
979 bfd_seek (abfd, DBX_SYMTAB_OFFSET (objfile), 0);
982 for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
984 /* Get the symbol for this run and pull out some info */
985 QUIT; /* allow this to be interruptable */
986 if (symbuf_idx == symbuf_end)
988 bufp = &symbuf[symbuf_idx++];
991 * Special case to speed up readin.
993 if (bufp->n_type == (unsigned char)N_SLINE) continue;
995 SWAP_SYMBOL (bufp, abfd);
997 /* Ok. There is a lot of code duplicated in the rest of this
998 switch statement (for efficiency reasons). Since I don't
999 like duplicating code, I will do my penance here, and
1000 describe the code which is duplicated:
1002 *) The assignment to namestring.
1003 *) The call to strchr.
1004 *) The addition of a partial symbol the the two partial
1005 symbol lists. This last is a large section of code, so
1006 I've imbedded it in the following macro.
1009 /* Set namestring based on bufp. If the string table index is invalid,
1010 give a fake name, and print a single error message per symbol file read,
1011 rather than abort the symbol reading or flood the user with messages. */
1013 /*FIXME: Too many adds and indirections in here for the inner loop. */
1014 #define SET_NAMESTRING()\
1015 if (((unsigned)bufp->n_strx + file_string_table_offset) >= \
1016 DBX_STRINGTAB_SIZE (objfile)) { \
1017 complain (&string_table_offset_complaint, (char *) symnum); \
1018 namestring = "foo"; \
1020 namestring = bufp->n_strx + file_string_table_offset + \
1021 DBX_STRINGTAB (objfile)
1023 #define CUR_SYMBOL_TYPE bufp->n_type
1024 #define CUR_SYMBOL_VALUE bufp->n_value
1025 #define DBXREAD_ONLY
1026 #define START_PSYMTAB(ofile,secoff,fname,low,symoff,global_syms,static_syms)\
1027 start_psymtab(ofile, secoff, fname, low, symoff, global_syms, static_syms)
1028 #define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps)\
1029 end_psymtab(pst,ilist,ninc,c_off,c_text,dep_list,n_deps)
1031 #include "partial-stab.h"
1034 /* If there's stuff to be cleaned up, clean it up. */
1036 if (DBX_SYMCOUNT (objfile) > 0 /* We have some syms */
1037 /*FIXME, does this have a bug at start address 0? */
1038 && last_o_file_start
1039 && objfile -> ei.entry_point < bufp->n_value
1040 && objfile -> ei.entry_point >= last_o_file_start)
1042 objfile -> ei.entry_file_lowpc = last_o_file_start;
1043 objfile -> ei.entry_file_highpc = bufp->n_value;
1050 end_psymtab (pst, psymtab_include_list, includes_used,
1051 symnum * symbol_size, dbsubc_addr,
1052 dependency_list, dependencies_used);
1054 end_psymtab (pst, psymtab_include_list, includes_used,
1055 symnum * symbol_size, end_of_text_addr,
1056 dependency_list, dependencies_used);
1060 free_bincl_list (objfile);
1061 discard_cleanups (old_chain);
1064 /* Allocate and partially fill a partial symtab. It will be
1065 completely filled at the end of the symbol list.
1067 SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
1068 is the address relative to which its symbols are (incremental) or 0
1072 struct partial_symtab *
1073 start_psymtab (objfile, section_offsets,
1074 filename, textlow, ldsymoff, global_syms, static_syms)
1075 struct objfile *objfile;
1076 struct section_offsets *section_offsets;
1080 struct partial_symbol *global_syms;
1081 struct partial_symbol *static_syms;
1083 struct partial_symtab *result =
1084 start_psymtab_common(objfile, section_offsets,
1085 filename, textlow, global_syms, static_syms);
1087 result->read_symtab_private = (char *)
1088 obstack_alloc (&objfile -> psymbol_obstack, sizeof (struct symloc));
1089 LDSYMOFF(result) = ldsymoff;
1090 result->read_symtab = dbx_psymtab_to_symtab;
1091 SYMBOL_SIZE(result) = symbol_size;
1092 SYMBOL_OFFSET(result) = symbol_table_offset;
1093 STRING_OFFSET(result) = string_table_offset;
1094 FILE_STRING_OFFSET(result) = file_string_table_offset;
1096 /* If we're handling an ELF file, drag some section-relocation info
1097 for this source file out of the ELF symbol table, to compensate for
1098 Sun brain death. This replaces the section_offsets in this psymtab,
1100 elfstab_offset_sections (objfile, result);
1105 /* Close off the current usage of a partial_symbol table entry. This
1106 involves setting the correct number of includes (with a realloc),
1107 setting the high text mark, setting the symbol length in the
1108 executable, and setting the length of the global and static lists
1111 The global symbols and static symbols are then seperately sorted.
1113 Then the partial symtab is put on the global list.
1114 *** List variables and peculiarities of same. ***
1118 end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
1119 capping_text, dependency_list, number_dependencies)
1120 struct partial_symtab *pst;
1121 char **include_list;
1123 int capping_symbol_offset;
1124 CORE_ADDR capping_text;
1125 struct partial_symtab **dependency_list;
1126 int number_dependencies;
1127 /* struct partial_symbol *capping_global, *capping_static;*/
1130 struct partial_symtab *p1;
1131 struct objfile *objfile = pst -> objfile;
1133 if (capping_symbol_offset != -1)
1134 LDSYMLEN(pst) = capping_symbol_offset - LDSYMOFF(pst);
1135 pst->texthigh = capping_text;
1137 /* Under Solaris, the N_SO symbols always have a value of 0,
1138 instead of the usual address of the .o file. Therefore,
1139 we have to do some tricks to fill in texthigh and textlow.
1140 The first trick is in partial-stab.h: if we see a static
1141 or global function, and the textlow for the current pst
1142 is still 0, then we use that function's address for
1143 the textlow of the pst.
1145 Now, to fill in texthigh, we remember the last function seen
1146 in the .o file (also in partial-stab.h). Also, there's a hack in
1147 bfd/elf.c and gdb/elfread.c to pass the ELF st_size field
1148 to here via the misc_info field. Therefore, we can fill in
1149 a reliable texthigh by taking the address plus size of the
1150 last function in the file.
1152 Unfortunately, that does not cover the case where the last function
1153 in the file is static. See the paragraph below for more comments
1156 Finally, if we have a valid textlow for the current file, we run
1157 down the partial_symtab_list filling in previous texthighs that
1158 are still unknown. */
1160 if (pst->texthigh == 0 && last_function_name) {
1163 struct minimal_symbol *minsym;
1165 p = strchr (last_function_name, ':');
1167 p = last_function_name;
1168 n = p - last_function_name;
1170 strncpy (p, last_function_name, n);
1173 minsym = lookup_minimal_symbol (p, objfile);
1176 pst->texthigh = minsym->address + (int)minsym->info;
1178 /* This file ends with a static function, and it's
1179 difficult to imagine how hard it would be to track down
1180 the elf symbol. Luckily, most of the time no one will notice,
1181 since the next file will likely be compiled with -g, so
1182 the code below will copy the first fuction's start address
1183 back to our texthigh variable. (Also, if this file is the
1184 last one in a dynamically linked program, texthigh already
1185 has the right value.) If the next file isn't compiled
1186 with -g, then the last function in this file winds up owning
1187 all of the text space up to the next -g file, or the end (minus
1188 shared libraries). This only matters for single stepping,
1189 and even then it will still work, except that it will single
1190 step through all of the covered functions, instead of setting
1191 breakpoints around them as it usualy does. This makes it
1192 pretty slow, but at least it doesn't fail.
1194 We can fix this with a fairly big change to bfd, but we need
1195 to coordinate better with Cygnus if we want to do that. FIXME. */
1197 last_function_name = NULL;
1200 /* this test will be true if the last .o file is only data */
1201 if (pst->textlow == 0)
1202 pst->textlow = pst->texthigh;
1204 /* If we know our own starting text address, then walk through all other
1205 psymtabs for this objfile, and if any didn't know their ending text
1206 address, set it to our starting address. Take care to not set our
1207 own ending address to our starting address, nor to set addresses on
1208 `dependency' files that have both textlow and texthigh zero. */
1210 ALL_OBJFILE_PSYMTABS (objfile, p1) {
1211 if (p1->texthigh == 0 && p1->textlow != 0 && p1 != pst) {
1212 p1->texthigh = pst->textlow;
1213 /* if this file has only data, then make textlow match texthigh */
1214 if (p1->textlow == 0)
1215 p1->textlow = p1->texthigh;
1220 /* End of kludge for patching Solaris textlow and texthigh. */
1223 pst->n_global_syms =
1224 objfile->global_psymbols.next - (objfile->global_psymbols.list + pst->globals_offset);
1225 pst->n_static_syms =
1226 objfile->static_psymbols.next - (objfile->static_psymbols.list + pst->statics_offset);
1228 pst->number_of_dependencies = number_dependencies;
1229 if (number_dependencies)
1231 pst->dependencies = (struct partial_symtab **)
1232 obstack_alloc (&objfile->psymbol_obstack,
1233 number_dependencies * sizeof (struct partial_symtab *));
1234 memcpy (pst->dependencies, dependency_list,
1235 number_dependencies * sizeof (struct partial_symtab *));
1238 pst->dependencies = 0;
1240 for (i = 0; i < num_includes; i++)
1242 struct partial_symtab *subpst =
1243 allocate_psymtab (include_list[i], objfile);
1245 subpst->section_offsets = pst->section_offsets;
1246 subpst->read_symtab_private =
1247 (char *) obstack_alloc (&objfile->psymbol_obstack,
1248 sizeof (struct symloc));
1252 subpst->texthigh = 0;
1254 /* We could save slight bits of space by only making one of these,
1255 shared by the entire set of include files. FIXME-someday. */
1256 subpst->dependencies = (struct partial_symtab **)
1257 obstack_alloc (&objfile->psymbol_obstack,
1258 sizeof (struct partial_symtab *));
1259 subpst->dependencies[0] = pst;
1260 subpst->number_of_dependencies = 1;
1262 subpst->globals_offset =
1263 subpst->n_global_syms =
1264 subpst->statics_offset =
1265 subpst->n_static_syms = 0;
1269 subpst->read_symtab = dbx_psymtab_to_symtab;
1272 sort_pst_symbols (pst);
1274 /* If there is already a psymtab or symtab for a file of this name, remove it.
1275 (If there is a symtab, more drastic things also happen.)
1276 This happens in VxWorks. */
1277 free_named_symtabs (pst->filename);
1279 if (num_includes == 0
1280 && number_dependencies == 0
1281 && pst->n_global_syms == 0
1282 && pst->n_static_syms == 0) {
1283 /* Throw away this psymtab, it's empty. We can't deallocate it, since
1284 it is on the obstack, but we can forget to chain it on the list. */
1285 struct partial_symtab *prev_pst;
1287 /* First, snip it out of the psymtab chain */
1289 if (pst->objfile->psymtabs == pst)
1290 pst->objfile->psymtabs = pst->next;
1292 for (prev_pst = pst->objfile->psymtabs; prev_pst; prev_pst = pst->next)
1293 if (prev_pst->next == pst)
1294 prev_pst->next = pst->next;
1296 /* Next, put it on a free list for recycling */
1298 pst->next = pst->objfile->free_psymtabs;
1299 pst->objfile->free_psymtabs = pst;
1304 dbx_psymtab_to_symtab_1 (pst)
1305 struct partial_symtab *pst;
1307 struct cleanup *old_chain;
1315 fprintf (stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
1320 /* Read in all partial symtabs on which this one is dependent */
1321 for (i = 0; i < pst->number_of_dependencies; i++)
1322 if (!pst->dependencies[i]->readin)
1324 /* Inform about additional files that need to be read in. */
1327 fputs_filtered (" ", stdout);
1329 fputs_filtered ("and ", stdout);
1331 printf_filtered ("%s...", pst->dependencies[i]->filename);
1332 wrap_here (""); /* Flush output */
1335 dbx_psymtab_to_symtab_1 (pst->dependencies[i]);
1338 if (LDSYMLEN(pst)) /* Otherwise it's a dummy */
1340 /* Init stuff necessary for reading in symbols */
1342 old_chain = make_cleanup (really_free_pendings, 0);
1343 file_string_table_offset = FILE_STRING_OFFSET (pst);
1345 symbol_size = obj_dbx_symbol_entry_size (sym_bfd);
1347 symbol_size = SYMBOL_SIZE (pst);
1350 /* Read in this file's symbols */
1351 bfd_seek (pst->objfile->obfd, SYMBOL_OFFSET (pst), L_SET);
1353 read_ofile_symtab (pst->objfile, LDSYMOFF(pst), LDSYMLEN(pst),
1354 pst->textlow, pst->texthigh - pst->textlow,
1355 pst->section_offsets);
1356 sort_symtab_syms (pst->symtab);
1358 do_cleanups (old_chain);
1364 /* Read in all of the symbols for a given psymtab for real.
1365 Be verbose about it if the user wants that. */
1368 dbx_psymtab_to_symtab (pst)
1369 struct partial_symtab *pst;
1378 fprintf (stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
1383 if (LDSYMLEN(pst) || pst->number_of_dependencies)
1385 /* Print the message now, before reading the string table,
1386 to avoid disconcerting pauses. */
1389 printf_filtered ("Reading in symbols for %s...", pst->filename);
1393 sym_bfd = pst->objfile->obfd;
1395 next_symbol_text_func = dbx_next_symbol_text;
1397 dbx_psymtab_to_symtab_1 (pst);
1399 /* Match with global symbols. This only needs to be done once,
1400 after all of the symtabs and dependencies have been read in. */
1401 scan_file_globals (pst->objfile);
1403 /* Finish up the debug error message. */
1405 printf_filtered ("done.\n");
1409 /* Read in a defined section of a specific object file's symbols.
1411 DESC is the file descriptor for the file, positioned at the
1412 beginning of the symtab
1413 SYM_OFFSET is the offset within the file of
1414 the beginning of the symbols we want to read
1415 SYM_SIZE is the size of the symbol info to read in.
1416 TEXT_OFFSET is the beginning of the text segment we are reading symbols for
1417 TEXT_SIZE is the size of the text segment read in.
1418 SECTION_OFFSETS are the relocation offsets which get added to each symbol. */
1420 static struct symtab *
1421 read_ofile_symtab (objfile, sym_offset, sym_size, text_offset, text_size,
1423 struct objfile *objfile;
1426 CORE_ADDR text_offset;
1428 struct section_offsets *section_offsets;
1430 register char *namestring;
1431 register struct internal_nlist *bufp;
1433 unsigned max_symnum;
1436 current_objfile = objfile;
1440 stringtab_global = HP_STRINGTAB (objfile);
1442 stringtab_global = DBX_STRINGTAB (objfile);
1444 last_source_file = 0;
1446 abfd = objfile->obfd;
1447 symfile_bfd = objfile->obfd; /* Implicit param to next_text_symbol */
1448 symbuf_end = symbuf_idx = 0;
1450 /* It is necessary to actually read one symbol *before* the start
1451 of this symtab's symbols, because the GCC_COMPILED_FLAG_SYMBOL
1452 occurs before the N_SO symbol.
1454 Detecting this in read_dbx_symtab
1455 would slow down initial readin, so we look for it here instead. */
1456 if (!processing_acc_compilation && sym_offset >= (int)symbol_size)
1458 bfd_seek (symfile_bfd, sym_offset - symbol_size, L_INCR);
1460 bufp = &symbuf[symbuf_idx++];
1461 SWAP_SYMBOL (bufp, abfd);
1465 processing_gcc_compilation =
1466 (bufp->n_type == N_TEXT
1467 && (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0
1468 || strcmp(namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0));
1472 /* The N_SO starting this symtab is the first symbol, so we
1473 better not check the symbol before it. I'm not this can
1474 happen, but it doesn't hurt to check for it. */
1475 bfd_seek (symfile_bfd, sym_offset, L_INCR);
1476 processing_gcc_compilation = 0;
1479 if (symbuf_idx == symbuf_end)
1481 bufp = &symbuf[symbuf_idx];
1482 if (bufp->n_type != (unsigned char)N_SO)
1483 error("First symbol in segment of executable not a source symbol");
1485 max_symnum = sym_size / symbol_size;
1488 symnum < max_symnum;
1491 QUIT; /* Allow this to be interruptable */
1492 if (symbuf_idx == symbuf_end)
1494 bufp = &symbuf[symbuf_idx++];
1495 SWAP_SYMBOL (bufp, abfd);
1497 type = bufp->n_type;
1501 if (type & N_STAB) {
1502 process_one_symbol (type, bufp->n_desc, bufp->n_value,
1503 namestring, section_offsets, objfile);
1505 /* We skip checking for a new .o or -l file; that should never
1506 happen in this routine. */
1507 else if (type == N_TEXT
1508 && (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0
1509 || strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0))
1510 /* I don't think this code will ever be executed, because
1511 the GCC_COMPILED_FLAG_SYMBOL usually is right before
1512 the N_SO symbol which starts this source file.
1513 However, there is no reason not to accept
1514 the GCC_COMPILED_FLAG_SYMBOL anywhere. */
1515 processing_gcc_compilation = 1;
1516 else if (type & N_EXT || type == (unsigned char)N_TEXT
1517 || type == (unsigned char)N_NBTEXT
1519 /* Global symbol: see if we came across a dbx defintion for
1520 a corresponding symbol. If so, store the value. Remove
1521 syms from the chain when their values are stored, but
1522 search the whole chain, as there may be several syms from
1523 different files with the same name. */
1524 /* This is probably not true. Since the files will be read
1525 in one at a time, each reference to a global symbol will
1526 be satisfied in each file as it appears. So we skip this
1532 current_objfile = NULL;
1534 /* In a Solaris elf file, this variable, which comes from the
1535 value of the N_SO symbol, will still be 0. Luckily, text_offset,
1536 which comes from pst->textlow is correct. */
1537 if (last_source_start_addr == 0)
1538 last_source_start_addr = text_offset;
1540 return end_symtab (text_offset + text_size, 0, 0, objfile);
1543 /* This handles a single symbol from the symbol-file, building symbols
1544 into a GDB symtab. It takes these arguments and an implicit argument.
1546 TYPE is the type field of the ".stab" symbol entry.
1547 DESC is the desc field of the ".stab" entry.
1548 VALU is the value field of the ".stab" entry.
1549 NAME is the symbol name, in our address space.
1550 SECTION_OFFSETS is a set of amounts by which the sections of this object
1551 file were relocated when it was loaded into memory.
1552 All symbols that refer
1553 to memory locations need to be offset by these amounts.
1554 OBJFILE is the object file from which we are reading symbols.
1555 It is used in end_symtab. */
1558 process_one_symbol (type, desc, valu, name, section_offsets, objfile)
1562 struct section_offsets *section_offsets;
1563 struct objfile *objfile;
1565 #ifndef SUN_FIXED_LBRAC_BUG
1566 /* This records the last pc address we've seen. We depend on there being
1567 an SLINE or FUN or SO before the first LBRAC, since the variable does
1568 not get reset in between reads of different symbol files. */
1569 static CORE_ADDR last_pc_address;
1571 register struct context_stack *new;
1572 /* This remembers the address of the start of a function. It is used
1573 because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries are
1574 relative to the current function's start address. On systems
1575 other than Solaris 2, this just holds the SECT_OFF_TEXT value, and is
1576 used to relocate these symbol types rather than SECTION_OFFSETS. */
1577 static CORE_ADDR function_start_offset;
1580 /* Something is wrong if we see real data before
1581 seeing a source file name. */
1583 if (last_source_file == 0 && type != (unsigned char)N_SO)
1585 /* Currently this ignores N_ENTRY on Gould machines, N_NSYM on machines
1586 where that code is defined. */
1587 if (IGNORE_SYMBOL (type))
1590 /* FIXME, this should not be an error, since it precludes extending
1591 the symbol table information in this way... */
1592 error ("Invalid symbol data: does not start by identifying a source file.");
1600 /* It seems that the Sun ANSI C compiler (acc) replaces N_FUN with N_GSYM and
1601 N_STSYM with a type code of f or F. Can't enable this until we get some
1602 stuff straightened out with psymtabs. FIXME. */
1608 /* Relocate for dynamic loading */
1609 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1611 /* Either of these types of symbols indicates the start of
1612 a new function. We must process its "name" normally for dbx,
1613 but also record the start of a new lexical context, and possibly
1614 also the end of the lexical context for the previous function. */
1615 /* This is not always true. This type of symbol may indicate a
1616 text segment variable. */
1618 colon_pos = strchr (name, ':');
1620 || (*colon_pos != 'f' && *colon_pos != 'F'))
1622 define_symbol (valu, name, desc, type, objfile);
1626 #ifndef SUN_FIXED_LBRAC_BUG
1627 last_pc_address = valu; /* Save for SunOS bug circumcision */
1630 #ifdef BLOCK_ADDRESS_FUNCTION_RELATIVE
1631 /* On Solaris 2.0 compilers, the block addresses and N_SLINE's
1632 are relative to the start of the function. On normal systems,
1633 and when using gcc on Solaris 2.0, these addresses are just
1634 absolute, or relative to the N_SO, depending on
1635 BLOCK_ADDRESS_ABSOLUTE. */
1636 function_start_offset = valu;
1638 /* Default on ordinary systems */
1639 function_start_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT);
1642 within_function = 1;
1643 if (context_stack_depth > 0)
1645 new = pop_context ();
1646 /* Make a block for the local symbols within. */
1647 finish_block (new->name, &local_symbols, new->old_blocks,
1648 new->start_addr, valu, objfile);
1650 /* Stack must be empty now. */
1651 if (context_stack_depth != 0)
1652 complain (&lbrac_unmatched_complaint, (char *) symnum);
1654 new = push_context (0, valu);
1655 new->name = define_symbol (valu, name, desc, type, objfile);
1659 /* This "symbol" just indicates the start of an inner lexical
1660 context within a function. */
1662 #if defined(BLOCK_ADDRESS_ABSOLUTE) || defined(BLOCK_ADDRESS_FUNCTION_RELATIVE)
1663 /* Relocate for dynamic loading and Sun ELF acc fn-relative syms. */
1664 valu += function_start_offset;
1666 /* On most machines, the block addresses are relative to the
1667 N_SO, the linker did not relocate them (sigh). */
1668 valu += last_source_start_addr;
1671 #ifndef SUN_FIXED_LBRAC_BUG
1672 if (valu < last_pc_address) {
1673 /* Patch current LBRAC pc value to match last handy pc value */
1674 complain (&lbrac_complaint, 0);
1675 valu = last_pc_address;
1678 new = push_context (desc, valu);
1682 /* This "symbol" just indicates the end of an inner lexical
1683 context that was started with N_LBRAC. */
1685 #if defined(BLOCK_ADDRESS_ABSOLUTE) || defined(BLOCK_ADDRESS_FUNCTION_RELATIVE)
1686 /* Relocate for dynamic loading and Sun ELF acc fn-relative syms. */
1687 valu += function_start_offset;
1689 /* On most machines, the block addresses are relative to the
1690 N_SO, the linker did not relocate them (sigh). */
1691 valu += last_source_start_addr;
1694 new = pop_context();
1695 if (desc != new->depth)
1696 complain (&lbrac_mismatch_complaint, (char *) symnum);
1698 /* Some compilers put the variable decls inside of an
1699 LBRAC/RBRAC block. This macro should be nonzero if this
1700 is true. DESC is N_DESC from the N_RBRAC symbol.
1701 GCC_P is true if we've detected the GCC_COMPILED_SYMBOL
1702 or the GCC2_COMPILED_SYMBOL. */
1703 #if !defined (VARIABLES_INSIDE_BLOCK)
1704 #define VARIABLES_INSIDE_BLOCK(desc, gcc_p) 0
1707 /* Can only use new->locals as local symbols here if we're in
1708 gcc or on a machine that puts them before the lbrack. */
1709 if (!VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1710 local_symbols = new->locals;
1712 /* If this is not the outermost LBRAC...RBRAC pair in the
1713 function, its local symbols preceded it, and are the ones
1714 just recovered from the context stack. Defined the block for them.
1716 If this is the outermost LBRAC...RBRAC pair, there is no
1717 need to do anything; leave the symbols that preceded it
1718 to be attached to the function's own block. However, if
1719 it is so, we need to indicate that we just moved outside
1722 && (context_stack_depth
1723 > !VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation)))
1725 /* FIXME Muzzle a compiler bug that makes end < start. */
1726 if (new->start_addr > valu)
1728 complain(&lbrac_rbrac_complaint, 0);
1729 new->start_addr = valu;
1731 /* Make a block for the local symbols within. */
1732 finish_block (0, &local_symbols, new->old_blocks,
1733 new->start_addr, valu, objfile);
1737 within_function = 0;
1739 if (VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1740 /* Now pop locals of block just finished. */
1741 local_symbols = new->locals;
1746 /* This kind of symbol indicates the start of an object file. */
1747 /* Relocate for dynamic loading */
1748 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1752 /* This type of symbol indicates the start of data
1753 for one source file.
1754 Finish the symbol table of the previous source file
1755 (if any) and start accumulating a new symbol table. */
1756 /* Relocate for dynamic loading */
1757 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1759 #ifndef SUN_FIXED_LBRAC_BUG
1760 last_pc_address = valu; /* Save for SunOS bug circumcision */
1763 #ifdef PCC_SOL_BROKEN
1764 /* pcc bug, occasionally puts out SO for SOL. */
1765 if (context_stack_depth > 0)
1767 start_subfile (name, NULL);
1771 if (last_source_file)
1773 /* Check if previous symbol was also an N_SO (with some
1774 sanity checks). If so, that one was actually the directory
1775 name, and the current one is the real file name.
1777 if (previous_stab_code == N_SO)
1779 if (current_subfile && current_subfile->dirname == NULL
1780 && current_subfile->name != NULL
1781 && current_subfile->name[strlen(current_subfile->name)-1] == '/')
1783 current_subfile->dirname = current_subfile->name;
1784 current_subfile->name =
1785 obsavestring (name, strlen (name),
1786 &objfile -> symbol_obstack);
1788 break; /* Ignore repeated SOs */
1790 end_symtab (valu, 0, 0, objfile);
1792 start_symtab (name, NULL, valu);
1797 /* This type of symbol indicates the start of data for
1798 a sub-source-file, one whose contents were copied or
1799 included in the compilation of the main source file
1800 (whose name was given in the N_SO symbol.) */
1801 /* Relocate for dynamic loading */
1802 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1803 start_subfile (name, NULL);
1808 add_new_header_file (name, valu);
1809 start_subfile (name, NULL);
1813 start_subfile (pop_subfile (), NULL);
1817 add_old_header_file (name, valu);
1821 /* This type of "symbol" really just records
1822 one line-number -- core-address correspondence.
1823 Enter it in the line list for this symbol table. */
1824 /* Relocate for dynamic loading and for ELF acc fn-relative syms. */
1825 valu += function_start_offset;
1826 #ifndef SUN_FIXED_LBRAC_BUG
1827 last_pc_address = valu; /* Save for SunOS bug circumcision */
1829 record_line (current_subfile, desc, valu);
1834 error ("Invalid symbol data: common within common at symtab pos %d",
1836 common_block = local_symbols;
1837 common_block_i = local_symbols ? local_symbols->nsyms : 0;
1841 /* Symbols declared since the BCOMM are to have the common block
1842 start address added in when we know it. common_block points to
1843 the first symbol after the BCOMM in the local_symbols list;
1844 copy the list and hang it off the symbol for the common block name
1848 struct symbol *sym =
1849 (struct symbol *) xmmalloc (objfile -> md, sizeof (struct symbol));
1850 memset (sym, 0, sizeof *sym);
1851 SYMBOL_NAME (sym) = savestring (name, strlen (name));
1852 SYMBOL_CLASS (sym) = LOC_BLOCK;
1853 SYMBOL_NAMESPACE (sym) = (enum namespace)((long)
1854 copy_pending (local_symbols, common_block_i, common_block));
1855 i = hashname (SYMBOL_NAME (sym));
1856 SYMBOL_VALUE_CHAIN (sym) = global_sym_chain[i];
1857 global_sym_chain[i] = sym;
1862 /* The following symbol types need to have the appropriate offset added
1863 to their value; then we process symbol definitions in the name. */
1865 case N_STSYM: /* Static symbol in data seg */
1866 case N_LCSYM: /* Static symbol in BSS seg */
1867 case N_ROSYM: /* Static symbol in Read-only data seg */
1868 /* HORRID HACK DEPT. However, it's Sun's furgin' fault. FIXME.
1869 Solaris2's stabs-in-coff makes *most* symbols relative
1870 but leaves a few absolute. N_STSYM and friends sit on the fence.
1871 .stab "foo:S...",N_STSYM is absolute (ld relocates it)
1872 .stab "foo:V...",N_STSYM is relative (section base subtracted).
1873 This leaves us no choice but to search for the 'S' or 'V'...
1874 (or pass the whole section_offsets stuff down ONE MORE function
1875 call level, which we really don't want to do). */
1878 p = strchr (name, ':');
1879 if (p != 0 && p[1] == 'S')
1881 /* FIXME! We relocate it by the TEXT offset, in case the
1882 whole module moved in memory. But this is wrong, since
1883 the sections can side around independently. */
1884 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1885 goto define_a_symbol;
1887 /* Since it's not the kludge case, re-dispatch to the right handler. */
1889 case N_STSYM: goto case_N_STSYM;
1890 case N_LCSYM: goto case_N_LCSYM;
1891 case N_ROSYM: goto case_N_ROSYM;
1896 case_N_STSYM: /* Static symbol in data seg */
1897 case N_DSLINE: /* Source line number, data seg */
1898 valu += ANOFFSET (section_offsets, SECT_OFF_DATA);
1899 goto define_a_symbol;
1901 case_N_LCSYM: /* Static symbol in BSS seg */
1902 case N_BSLINE: /* Source line number, bss seg */
1903 /* N_BROWS: overlaps with N_BSLINE */
1904 valu += ANOFFSET (section_offsets, SECT_OFF_BSS);
1905 goto define_a_symbol;
1907 case_N_ROSYM: /* Static symbol in Read-only data seg */
1908 valu += ANOFFSET (section_offsets, SECT_OFF_RODATA);
1909 goto define_a_symbol;
1911 case N_ENTRY: /* Alternate entry point */
1912 /* Relocate for dynamic loading */
1913 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1914 goto define_a_symbol;
1916 /* The following symbol types don't need the address field relocated,
1917 since it is either unused, or is absolute. */
1919 case N_GSYM: /* Global variable */
1920 case N_NSYMS: /* Number of symbols (ultrix) */
1921 case N_NOMAP: /* No map? (ultrix) */
1922 case N_RSYM: /* Register variable */
1923 case N_DEFD: /* Modula-2 GNU module dependency */
1924 case N_SSYM: /* Struct or union element */
1925 case N_LSYM: /* Local symbol in stack */
1926 case N_PSYM: /* Parameter variable */
1927 case N_LENG: /* Length of preceding symbol type */
1929 define_symbol (valu, name, desc, type, objfile);
1932 /* We use N_OPT to carry the gcc2_compiled flag. Sun uses it
1933 for a bunch of other flags, too. Someday we may parse their
1934 flags; for now we ignore theirs and hope they'll ignore ours. */
1935 case N_OPT: /* Solaris 2: Compiler options */
1938 if (!strcmp (name, GCC2_COMPILED_FLAG_SYMBOL))
1939 processing_gcc_compilation = 1;
1943 /* The following symbol types can be ignored. */
1944 case N_OBJ: /* Solaris 2: Object file dir and name */
1945 /* N_UNDF: Solaris 2: file separator mark */
1946 /* N_UNDF: -- we will never encounter it, since we only process one
1947 file's symbols at once. */
1948 case N_ENDM: /* Solaris 2: End of module */
1949 case N_MAIN: /* Name of main routine. */
1952 /* The following symbol types we don't know how to process. Handle
1953 them in a "default" way, but complain to people who care. */
1955 case N_CATCH: /* Exception handler catcher */
1956 case N_EHDECL: /* Exception handler name */
1957 case N_PC: /* Global symbol in Pascal */
1958 case N_M2C: /* Modula-2 compilation unit */
1959 /* N_MOD2: overlaps with N_EHDECL */
1960 case N_SCOPE: /* Modula-2 scope information */
1961 case N_ECOML: /* End common (local name) */
1962 case N_NBTEXT: /* Gould Non-Base-Register symbols??? */
1967 complain (&unknown_symtype_complaint, local_hex_string(type));
1969 define_symbol (valu, name, desc, type, objfile);
1972 previous_stab_code = type;
1975 /* Copy a pending list, used to record the contents of a common
1976 block for later fixup. */
1977 static struct pending *
1978 copy_pending (beg, begi, end)
1979 struct pending *beg;
1981 struct pending *end;
1983 struct pending *new = 0;
1984 struct pending *next;
1986 for (next = beg; next != 0 && (next != end || begi < end->nsyms);
1987 next = next->next, begi = 0)
1990 for (j = begi; j < next->nsyms; j++)
1991 add_symbol_to_list (next->symbol[j], &new);
1996 /* Scan and build partial symbols for an ELF symbol file.
1997 This ELF file has already been processed to get its minimal symbols,
1998 and any DWARF symbols that were in it.
2000 This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
2003 OBJFILE is the object file we are reading symbols from.
2004 ADDR is the address relative to which the symbols are (e.g.
2005 the base address of the text segment).
2006 MAINLINE is true if we are reading the main symbol
2007 table (as opposed to a shared lib or dynamically loaded file).
2008 STABOFFSET and STABSIZE define the location in OBJFILE where the .stab
2010 STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
2011 .stabstr section exists.
2013 This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
2014 adjusted for elf details. */
2017 DEFUN(elfstab_build_psymtabs, (objfile, section_offsets, mainline,
2018 staboffset, stabsize,
2019 stabstroffset, stabstrsize),
2020 struct objfile *objfile AND
2021 struct section_offsets *section_offsets AND
2023 unsigned int staboffset AND
2024 unsigned int stabsize AND
2025 unsigned int stabstroffset AND
2026 unsigned int stabstrsize)
2029 bfd *sym_bfd = objfile->obfd;
2030 char *name = bfd_get_filename (sym_bfd);
2031 struct dbx_symfile_info *info;
2033 /* There is already a dbx_symfile_info allocated by our caller.
2034 It might even contain some info from the ELF symtab to help us. */
2035 info = (struct dbx_symfile_info *) objfile->sym_private;
2037 DBX_TEXT_SECT (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
2038 if (!DBX_TEXT_SECT (objfile))
2039 error ("Can't find .text section in symbol file");
2041 #define ELF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */
2042 DBX_SYMBOL_SIZE (objfile) = ELF_STABS_SYMBOL_SIZE;
2043 DBX_SYMCOUNT (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
2044 DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
2045 DBX_SYMTAB_OFFSET (objfile) = staboffset;
2047 if (stabstrsize < 0) /* FIXME: stabstrsize is unsigned; never true! */
2048 error ("ridiculous string table size: %d bytes", stabstrsize);
2049 DBX_STRINGTAB (objfile) = (char *)
2050 obstack_alloc (&objfile->psymbol_obstack, stabstrsize+1);
2052 /* Now read in the string table in one big gulp. */
2054 val = bfd_seek (sym_bfd, stabstroffset, L_SET);
2056 perror_with_name (name);
2057 val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, 1, sym_bfd);
2058 if (val != stabstrsize)
2059 perror_with_name (name);
2061 buildsym_new_init ();
2062 free_header_files ();
2063 init_header_files ();
2064 install_minimal_symbols (objfile);
2066 processing_acc_compilation = 1;
2068 /* In an elf file, we've already installed the minimal symbols that came
2069 from the elf (non-stab) symbol table, so always act like an
2070 incremental load here. */
2071 dbx_symfile_read (objfile, section_offsets, 0);
2074 /* Parse the user's idea of an offset for dynamic linking, into our idea
2075 of how to represent it for fast symbol reading. */
2077 struct section_offsets *
2078 dbx_symfile_offsets (objfile, addr)
2079 struct objfile *objfile;
2082 struct section_offsets *section_offsets;
2085 section_offsets = (struct section_offsets *)
2086 obstack_alloc (&objfile -> psymbol_obstack,
2087 sizeof (struct section_offsets) +
2088 sizeof (section_offsets->offsets) * (SECT_OFF_MAX-1));
2090 for (i = 0; i < SECT_OFF_MAX; i++)
2091 ANOFFSET (section_offsets, i) = addr;
2093 return section_offsets;
2096 /* Register our willingness to decode symbols for SunOS and a.out and
2097 b.out files handled by BFD... */
2098 static struct sym_fns sunos_sym_fns =
2100 "sunOs", /* sym_name: name or name prefix of BFD target type */
2101 6, /* sym_namelen: number of significant sym_name chars */
2102 dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */
2103 dbx_symfile_init, /* sym_init: read initial info, setup for sym_read() */
2104 dbx_symfile_read, /* sym_read: read a symbol file into symtab */
2105 dbx_symfile_finish, /* sym_finish: finished with file, cleanup */
2106 dbx_symfile_offsets, /* sym_offsets: parse user's offsets to internal form */
2107 NULL /* next: pointer to next struct sym_fns */
2110 static struct sym_fns aout_sym_fns =
2112 "a.out", /* sym_name: name or name prefix of BFD target type */
2113 5, /* sym_namelen: number of significant sym_name chars */
2114 dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */
2115 dbx_symfile_init, /* sym_init: read initial info, setup for sym_read() */
2116 dbx_symfile_read, /* sym_read: read a symbol file into symtab */
2117 dbx_symfile_finish, /* sym_finish: finished with file, cleanup */
2118 dbx_symfile_offsets, /* sym_offsets: parse user's offsets to internal form */
2119 NULL /* next: pointer to next struct sym_fns */
2122 static struct sym_fns bout_sym_fns =
2124 "b.out", /* sym_name: name or name prefix of BFD target type */
2125 5, /* sym_namelen: number of significant sym_name chars */
2126 dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */
2127 dbx_symfile_init, /* sym_init: read initial info, setup for sym_read() */
2128 dbx_symfile_read, /* sym_read: read a symbol file into symtab */
2129 dbx_symfile_finish, /* sym_finish: finished with file, cleanup */
2130 dbx_symfile_offsets, /* sym_offsets: parse user's offsets to internal form */
2131 NULL /* next: pointer to next struct sym_fns */
2134 /* This is probably a mistake. FIXME. Why can't the HP's use an ordinary
2135 file format name with an -hppa suffix? */
2136 static struct sym_fns hppa_sym_fns =
2138 "hppa", /* sym_name: name or name prefix of BFD target type */
2139 4, /* sym_namelen: number of significant sym_name chars */
2140 dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */
2141 dbx_symfile_init, /* sym_init: read initial info, setup for sym_read() */
2142 dbx_symfile_read, /* sym_read: read a symbol file into symtab */
2143 dbx_symfile_finish, /* sym_finish: finished with file, cleanup */
2144 dbx_symfile_offsets, /* sym_offsets: parse user's offsets to internal form */
2145 NULL /* next: pointer to next struct sym_fns */
2149 _initialize_dbxread ()
2151 add_symtab_fns(&sunos_sym_fns);
2152 add_symtab_fns(&aout_sym_fns);
2153 add_symtab_fns(&bout_sym_fns);
2154 add_symtab_fns(&hppa_sym_fns);