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 #include <sys/param.h>
52 #include "breakpoint.h"
55 #include "gdbcore.h" /* for bfd stuff */
56 #include "libbfd.h" /* FIXME Secret internal BFD stuff (bfd_read) */
57 #include "libaout.h" /* FIXME Secret internal BFD stuff for a.out */
61 #include "stabsread.h"
62 #include "gdb-stabs.h"
64 #include "language.h" /* Needed inside partial-stab.h */
65 #include "complaints.h"
67 #include "aout/aout64.h"
68 #include "aout/stab_gnu.h" /* We always use GNU stabs, not native, now */
70 /* Each partial symbol table entry contains a pointer to private data for the
71 read_symtab() function to use when expanding a partial symbol table entry
72 to a full symbol table entry.
74 For dbxread this structure contains the offset within the file symbol table
75 of first local symbol for this file, and length (in bytes) of the section
76 of the symbol table devoted to this file's symbols (actually, the section
77 bracketed may contain more than just this file's symbols). It also contains
78 further information needed to locate the symbols if they are in an ELF file.
80 If ldsymlen is 0, the only reason for this thing's existence is the
81 dependency list. Nothing else will happen when it is read in. */
83 #define LDSYMOFF(p) (((struct symloc *)((p)->read_symtab_private))->ldsymoff)
84 #define LDSYMLEN(p) (((struct symloc *)((p)->read_symtab_private))->ldsymlen)
85 #define SYMLOC(p) ((struct symloc *)((p)->read_symtab_private))
86 #define SYMBOL_SIZE(p) (SYMLOC(p)->symbol_size)
87 #define SYMBOL_OFFSET(p) (SYMLOC(p)->symbol_offset)
88 #define STRING_OFFSET(p) (SYMLOC(p)->string_offset)
89 #define FILE_STRING_OFFSET(p) (SYMLOC(p)->file_string_offset)
97 int file_string_offset;
100 /* Macro to determine which symbols to ignore when reading the first symbol
101 of a file. Some machines override this definition. */
102 #ifndef IGNORE_SYMBOL
103 /* This code is used on Ultrix systems. Ignore it */
104 #define IGNORE_SYMBOL(type) (type == (int)N_NSYMS)
107 /* Macro for name of symbol to indicate a file compiled with gcc. */
108 #ifndef GCC_COMPILED_FLAG_SYMBOL
109 #define GCC_COMPILED_FLAG_SYMBOL "gcc_compiled."
112 /* Macro for name of symbol to indicate a file compiled with gcc2. */
113 #ifndef GCC2_COMPILED_FLAG_SYMBOL
114 #define GCC2_COMPILED_FLAG_SYMBOL "gcc2_compiled."
117 /* Define this as 1 if a pcc declaration of a char or short argument
118 gives the correct address. Otherwise assume pcc gives the
119 address of the corresponding int, which is not the same on a
120 big-endian machine. */
122 #ifndef BELIEVE_PCC_PROMOTION
123 #define BELIEVE_PCC_PROMOTION 0
126 /* Remember what we deduced to be the source language of this psymtab. */
128 static enum language psymtab_language = language_unknown;
130 /* Nonzero means give verbose info on gdb action. From main.c. */
131 extern int info_verbose;
133 /* The BFD for this file -- implicit parameter to next_symbol_text. */
135 static bfd *symfile_bfd;
137 /* The size of each symbol in the symbol file (in external form).
138 This is set by dbx_symfile_read when building psymtabs, and by
139 dbx_psymtab_to_symtab when building symtabs. */
141 static unsigned symbol_size;
143 /* This is the offset of the symbol table in the executable file */
144 static unsigned symbol_table_offset;
146 /* This is the offset of the string table in the executable file */
147 static unsigned string_table_offset;
149 /* For elf+stab executables, the n_strx field is not a simple index
150 into the string table. Instead, each .o file has a base offset
151 in the string table, and the associated symbols contain offsets
152 from this base. The following two variables contain the base
153 offset for the current and next .o files. */
154 static unsigned int file_string_table_offset;
155 static unsigned int next_file_string_table_offset;
157 /* Complaints about the symbols we have encountered. */
159 struct complaint lbrac_complaint =
160 {"bad block start address patched", 0, 0};
162 struct complaint string_table_offset_complaint =
163 {"bad string table offset in symbol %d", 0, 0};
165 struct complaint unknown_symtype_complaint =
166 {"unknown symbol type %s", 0, 0};
168 struct complaint lbrac_rbrac_complaint =
169 {"block start larger than block end", 0, 0};
171 struct complaint lbrac_unmatched_complaint =
172 {"unmatched N_LBRAC before symtab pos %d", 0, 0};
174 struct complaint lbrac_mismatch_complaint =
175 {"N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d", 0, 0};
177 struct complaint repeated_header_complaint =
178 {"\"repeated\" header file not previously seen, at symtab pos %d", 0, 0};
180 struct complaint repeated_header_name_complaint =
181 {"\"repeated\" header file not previously seen, named %s", 0, 0};
183 /* During initial symbol readin, we need to have a structure to keep
184 track of which psymtabs have which bincls in them. This structure
185 is used during readin to setup the list of dependencies within each
186 partial symbol table. */
188 struct header_file_location
190 char *name; /* Name of header file */
191 int instance; /* See above */
192 struct partial_symtab *pst; /* Partial symtab that has the
193 BINCL/EINCL defs for this file */
196 /* The actual list and controling variables */
197 static struct header_file_location *bincl_list, *next_bincl;
198 static int bincls_allocated;
200 /* Local function prototypes */
203 free_header_files PARAMS ((void));
206 init_header_files PARAMS ((void));
208 static struct pending *
209 copy_pending PARAMS ((struct pending *, int, struct pending *));
211 static struct symtab *
212 read_ofile_symtab PARAMS ((struct objfile *, int, int, CORE_ADDR, int,
213 struct section_offsets *));
216 dbx_psymtab_to_symtab PARAMS ((struct partial_symtab *));
219 dbx_psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
222 read_dbx_symtab PARAMS ((struct section_offsets *, struct objfile *,
226 free_bincl_list PARAMS ((struct objfile *));
228 static struct partial_symtab *
229 find_corresponding_bincl_psymtab PARAMS ((char *, int));
232 add_bincl_to_list PARAMS ((struct partial_symtab *, char *, int));
235 init_bincl_list PARAMS ((int, struct objfile *));
238 init_psymbol_list PARAMS ((struct objfile *));
241 dbx_next_symbol_text PARAMS ((void));
244 fill_symbuf PARAMS ((bfd *));
247 dbx_symfile_init PARAMS ((struct objfile *));
250 dbx_new_init PARAMS ((struct objfile *));
253 dbx_symfile_read PARAMS ((struct objfile *, struct section_offsets *, int));
256 dbx_symfile_finish PARAMS ((struct objfile *));
259 record_minimal_symbol PARAMS ((char *, CORE_ADDR, int, struct objfile *));
262 add_new_header_file PARAMS ((char *, int));
265 add_old_header_file PARAMS ((char *, int));
268 add_this_object_header_file PARAMS ((int));
270 /* Free up old header file tables */
277 if (header_files != NULL)
279 for (i = 0; i < n_header_files; i++)
281 free (header_files[i].name);
283 free ((PTR)header_files);
287 if (this_object_header_files)
289 free ((PTR)this_object_header_files);
290 this_object_header_files = NULL;
292 n_allocated_header_files = 0;
293 n_allocated_this_object_header_files = 0;
296 /* Allocate new header file tables */
302 n_allocated_header_files = 10;
303 header_files = (struct header_file *)
304 xmalloc (10 * sizeof (struct header_file));
306 n_allocated_this_object_header_files = 10;
307 this_object_header_files = (int *) xmalloc (10 * sizeof (int));
310 /* Add header file number I for this object file
311 at the next successive FILENUM. */
314 add_this_object_header_file (i)
317 if (n_this_object_header_files == n_allocated_this_object_header_files)
319 n_allocated_this_object_header_files *= 2;
320 this_object_header_files
321 = (int *) xrealloc ((char *) this_object_header_files,
322 n_allocated_this_object_header_files * sizeof (int));
325 this_object_header_files[n_this_object_header_files++] = i;
328 /* Add to this file an "old" header file, one already seen in
329 a previous object file. NAME is the header file's name.
330 INSTANCE is its instance code, to select among multiple
331 symbol tables for the same header file. */
334 add_old_header_file (name, instance)
338 register struct header_file *p = header_files;
341 for (i = 0; i < n_header_files; i++)
342 if (STREQ (p[i].name, name) && instance == p[i].instance)
344 add_this_object_header_file (i);
347 complain (&repeated_header_complaint, symnum);
348 complain (&repeated_header_name_complaint, name);
351 /* Add to this file a "new" header file: definitions for its types follow.
352 NAME is the header file's name.
353 Most often this happens only once for each distinct header file,
354 but not necessarily. If it happens more than once, INSTANCE has
355 a different value each time, and references to the header file
356 use INSTANCE values to select among them.
358 dbx output contains "begin" and "end" markers for each new header file,
359 but at this level we just need to know which files there have been;
360 so we record the file when its "begin" is seen and ignore the "end". */
363 add_new_header_file (name, instance)
369 /* Make sure there is room for one more header file. */
371 if (n_header_files == n_allocated_header_files)
373 n_allocated_header_files *= 2;
374 header_files = (struct header_file *)
375 xrealloc ((char *) header_files,
376 (n_allocated_header_files * sizeof (struct header_file)));
379 /* Create an entry for this header file. */
381 i = n_header_files++;
382 header_files[i].name = savestring (name, strlen(name));
383 header_files[i].instance = instance;
384 header_files[i].length = 10;
385 header_files[i].vector
386 = (struct type **) xmalloc (10 * sizeof (struct type *));
387 memset (header_files[i].vector, 0, 10 * sizeof (struct type *));
389 add_this_object_header_file (i);
393 static struct type **
394 explicit_lookup_type (real_filenum, index)
395 int real_filenum, index;
397 register struct header_file *f = &header_files[real_filenum];
399 if (index >= f->length)
402 f->vector = (struct type **)
403 xrealloc (f->vector, f->length * sizeof (struct type *));
404 bzero (&f->vector[f->length / 2],
405 f->length * sizeof (struct type *) / 2);
407 return &f->vector[index];
412 record_minimal_symbol (name, address, type, objfile)
416 struct objfile *objfile;
418 enum minimal_symbol_type ms_type;
420 switch (type &~ N_EXT) {
421 case N_TEXT: ms_type = mst_text; break;
422 case N_DATA: ms_type = mst_data; break;
423 case N_BSS: ms_type = mst_bss; break;
424 case N_ABS: ms_type = mst_abs; break;
426 case N_SETV: ms_type = mst_data; break;
428 default: ms_type = mst_unknown; break;
431 prim_record_minimal_symbol (obsavestring (name, strlen (name), &objfile -> symbol_obstack),
435 /* Scan and build partial symbols for a symbol file.
436 We have been initialized by a call to dbx_symfile_init, which
437 put all the relevant info into a "struct dbx_symfile_info",
438 hung off the objfile structure.
440 SECTION_OFFSETS contains offsets relative to which the symbols in the
441 various sections are (depending where the sections were actually loaded).
442 MAINLINE is true if we are reading the main symbol
443 table (as opposed to a shared lib or dynamically loaded file). */
446 dbx_symfile_read (objfile, section_offsets, mainline)
447 struct objfile *objfile;
448 struct section_offsets *section_offsets;
449 int mainline; /* FIXME comments above */
454 sym_bfd = objfile->obfd;
455 val = bfd_seek (objfile->obfd, DBX_SYMTAB_OFFSET (objfile), L_SET);
457 perror_with_name (objfile->name);
459 /* If we are reinitializing, or if we have never loaded syms yet, init */
460 if (mainline || objfile->global_psymbols.size == 0 || objfile->static_psymbols.size == 0)
461 init_psymbol_list (objfile);
463 symbol_size = DBX_SYMBOL_SIZE (objfile);
464 symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
467 make_cleanup (really_free_pendings, 0);
469 init_minimal_symbol_collection ();
470 make_cleanup (discard_minimal_symbols, 0);
472 /* Now that the symbol table data of the executable file are all in core,
473 process them and define symbols accordingly. */
475 read_dbx_symtab (section_offsets, objfile,
476 bfd_section_vma (sym_bfd, DBX_TEXT_SECT (objfile)),
477 bfd_section_size (sym_bfd, DBX_TEXT_SECT (objfile)));
479 /* Install any minimal symbols that have been collected as the current
480 minimal symbols for this objfile. */
482 install_minimal_symbols (objfile);
484 if (!have_partial_symbols ()) {
486 printf_filtered ("(no debugging symbols found)...");
491 /* Initialize anything that needs initializing when a completely new
492 symbol file is specified (not just adding some symbols from another
493 file, e.g. a shared library). */
496 dbx_new_init (ignore)
497 struct objfile *ignore;
499 stabsread_new_init ();
500 buildsym_new_init ();
501 init_header_files ();
505 /* dbx_symfile_init ()
506 is the dbx-specific initialization routine for reading symbols.
507 It is passed a struct objfile which contains, among other things,
508 the BFD for the file whose symbols are being read, and a slot for a pointer
509 to "private data" which we fill with goodies.
511 We read the string table into malloc'd space and stash a pointer to it.
513 Since BFD doesn't know how to read debug symbols in a format-independent
514 way (and may never do so...), we have to do it ourselves. We will never
515 be called unless this is an a.out (or very similar) file.
516 FIXME, there should be a cleaner peephole into the BFD environment here. */
519 dbx_symfile_init (objfile)
520 struct objfile *objfile;
523 bfd *sym_bfd = objfile->obfd;
524 char *name = bfd_get_filename (sym_bfd);
525 unsigned char size_temp[sizeof(long)];
527 /* Allocate struct to keep track of the symfile */
528 objfile->sym_private = (PTR)
529 xmmalloc (objfile -> md, sizeof (struct dbx_symfile_info));
531 /* FIXME POKING INSIDE BFD DATA STRUCTURES */
532 #define STRING_TABLE_OFFSET (sym_bfd->origin + obj_str_filepos (sym_bfd))
533 #define SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_sym_filepos (sym_bfd))
535 /* FIXME POKING INSIDE BFD DATA STRUCTURES */
537 DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL;
538 DBX_TEXT_SECT (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
539 if (!DBX_TEXT_SECT (objfile))
540 error ("Can't find .text section in symbol file");
542 DBX_SYMBOL_SIZE (objfile) = obj_symbol_entry_size (sym_bfd);
543 DBX_SYMCOUNT (objfile) = bfd_get_symcount (sym_bfd);
544 DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
546 /* Read the string table and stash it away in the psymbol_obstack. It is
547 only needed as long as we need to expand psymbols into full symbols,
548 so when we blow away the psymbol the string table goes away as well.
549 Note that gdb used to use the results of attempting to malloc the
550 string table, based on the size it read, as a form of sanity check
551 for botched byte swapping, on the theory that a byte swapped string
552 table size would be so totally bogus that the malloc would fail. Now
553 that we put in on the psymbol_obstack, we can't do this since gdb gets
554 a fatal error (out of virtual memory) if the size is bogus. We can
555 however at least check to see if the size is zero or some negative
558 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, L_SET);
560 perror_with_name (name);
562 memset (size_temp, 0, sizeof (size_temp));
563 val = bfd_read ((PTR)size_temp, sizeof (long), 1, sym_bfd);
565 perror_with_name (name);
567 DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
569 if (DBX_STRINGTAB_SIZE (objfile) == 0)
570 error ("%s has no string table.", name);
572 if (DBX_STRINGTAB_SIZE (objfile) < 0
573 || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
574 error ("ridiculous string table size (%d bytes).",
575 DBX_STRINGTAB_SIZE (objfile));
577 DBX_STRINGTAB (objfile) =
578 (char *) obstack_alloc (&objfile -> psymbol_obstack,
579 DBX_STRINGTAB_SIZE (objfile));
581 /* Now read in the string table in one big gulp. */
583 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, L_SET);
585 perror_with_name (name);
586 val = bfd_read (DBX_STRINGTAB (objfile), DBX_STRINGTAB_SIZE (objfile), 1,
588 if (val != DBX_STRINGTAB_SIZE (objfile))
589 perror_with_name (name);
592 /* Perform any local cleanups required when we are done with a particular
593 objfile. I.E, we are in the process of discarding all symbol information
594 for an objfile, freeing up all memory held for it, and unlinking the
595 objfile struct from the global list of known objfiles. */
598 dbx_symfile_finish (objfile)
599 struct objfile *objfile;
601 if (objfile->sym_private != NULL)
603 mfree (objfile -> md, objfile->sym_private);
605 free_header_files ();
609 /* Buffer for reading the symbol table entries. */
610 static struct internal_nlist symbuf[4096];
611 static int symbuf_idx;
612 static int symbuf_end;
614 /* Name of last function encountered. Used in Solaris to approximate
615 object file boundaries. */
616 static char *last_function_name;
618 /* The address in memory of the string table of the object file we are
619 reading (which might not be the "main" object file, but might be a
620 shared library or some other dynamically loaded thing). This is set
621 by read_dbx_symtab when building psymtabs, and by read_ofile_symtab
622 when building symtabs, and is used only by next_symbol_text. */
623 static char *stringtab_global;
625 /* Refill the symbol table input buffer
626 and set the variables that control fetching entries from it.
627 Reports an error if no data available.
628 This function can read past the end of the symbol table
629 (into the string table) but this does no harm. */
632 fill_symbuf (sym_bfd)
635 int nbytes = bfd_read ((PTR)symbuf, sizeof (symbuf), 1, sym_bfd);
637 perror_with_name (bfd_get_filename (sym_bfd));
638 else if (nbytes == 0)
639 error ("Premature end of file reading symbol table");
640 symbuf_end = nbytes / symbol_size;
644 #define SWAP_SYMBOL(symp, abfd) \
646 (symp)->n_strx = bfd_h_get_32(abfd, \
647 (unsigned char *)&(symp)->n_strx); \
648 (symp)->n_desc = bfd_h_get_16 (abfd, \
649 (unsigned char *)&(symp)->n_desc); \
650 (symp)->n_value = bfd_h_get_32 (abfd, \
651 (unsigned char *)&(symp)->n_value); \
654 /* Invariant: The symbol pointed to by symbuf_idx is the first one
655 that hasn't been swapped. Swap the symbol at the same time
656 that symbuf_idx is incremented. */
658 /* dbx allows the text of a symbol name to be continued into the
659 next symbol name! When such a continuation is encountered
660 (a \ at the end of the text of a name)
661 call this function to get the continuation. */
664 dbx_next_symbol_text ()
666 if (symbuf_idx == symbuf_end)
667 fill_symbuf (symfile_bfd);
669 SWAP_SYMBOL(&symbuf[symbuf_idx], symfile_bfd);
670 return symbuf[symbuf_idx++].n_strx + stringtab_global
671 + file_string_table_offset;
674 /* Initializes storage for all of the partial symbols that will be
675 created by read_dbx_symtab and subsidiaries. */
678 init_psymbol_list (objfile)
679 struct objfile *objfile;
681 /* Free any previously allocated psymbol lists. */
682 if (objfile -> global_psymbols.list)
683 mfree (objfile -> md, (PTR)objfile -> global_psymbols.list);
684 if (objfile -> static_psymbols.list)
685 mfree (objfile -> md, (PTR)objfile -> static_psymbols.list);
687 /* Current best guess is that there are approximately a twentieth
688 of the total symbols (in a debugging file) are global or static
690 objfile -> global_psymbols.size = DBX_SYMCOUNT (objfile) / 10;
691 objfile -> static_psymbols.size = DBX_SYMCOUNT (objfile) / 10;
692 objfile -> global_psymbols.next = objfile -> global_psymbols.list = (struct partial_symbol *)
693 xmmalloc (objfile -> md, objfile -> global_psymbols.size * sizeof (struct partial_symbol));
694 objfile -> static_psymbols.next = objfile -> static_psymbols.list = (struct partial_symbol *)
695 xmmalloc (objfile -> md, objfile -> static_psymbols.size * sizeof (struct partial_symbol));
698 /* Initialize the list of bincls to contain none and have some
702 init_bincl_list (number, objfile)
704 struct objfile *objfile;
706 bincls_allocated = number;
707 next_bincl = bincl_list = (struct header_file_location *)
708 xmmalloc (objfile -> md, bincls_allocated * sizeof(struct header_file_location));
711 /* Add a bincl to the list. */
714 add_bincl_to_list (pst, name, instance)
715 struct partial_symtab *pst;
719 if (next_bincl >= bincl_list + bincls_allocated)
721 int offset = next_bincl - bincl_list;
722 bincls_allocated *= 2;
723 bincl_list = (struct header_file_location *)
724 xmrealloc (pst->objfile->md, (char *)bincl_list,
725 bincls_allocated * sizeof (struct header_file_location));
726 next_bincl = bincl_list + offset;
728 next_bincl->pst = pst;
729 next_bincl->instance = instance;
730 next_bincl++->name = name;
733 /* Given a name, value pair, find the corresponding
734 bincl in the list. Return the partial symtab associated
735 with that header_file_location. */
737 static struct partial_symtab *
738 find_corresponding_bincl_psymtab (name, instance)
742 struct header_file_location *bincl;
744 for (bincl = bincl_list; bincl < next_bincl; bincl++)
745 if (bincl->instance == instance
746 && STREQ (name, bincl->name))
749 return (struct partial_symtab *) 0;
752 /* Free the storage allocated for the bincl list. */
755 free_bincl_list (objfile)
756 struct objfile *objfile;
758 mfree (objfile -> md, (PTR)bincl_list);
759 bincls_allocated = 0;
762 /* Given pointers to an a.out symbol table in core containing dbx
763 style data, setup partial_symtab's describing each source file for
764 which debugging information is available.
765 SYMFILE_NAME is the name of the file we are reading from
766 and SECTION_OFFSETS is the set of offsets for the various sections
767 of the file (a set of zeros if the mainline program). */
770 read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
771 struct section_offsets *section_offsets;
772 struct objfile *objfile;
776 register struct internal_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch */
777 register char *namestring;
779 int past_first_source_file = 0;
780 CORE_ADDR last_o_file_start = 0;
781 struct cleanup *old_chain;
784 /* End of the text segment of the executable file. */
785 CORE_ADDR end_of_text_addr;
787 /* Current partial symtab */
788 struct partial_symtab *pst;
790 /* List of current psymtab's include files */
791 char **psymtab_include_list;
792 int includes_allocated;
795 /* Index within current psymtab dependency list */
796 struct partial_symtab **dependency_list;
797 int dependencies_used, dependencies_allocated;
799 /* FIXME. We probably want to change stringtab_global rather than add this
800 while processing every symbol entry. FIXME. */
801 file_string_table_offset = 0;
802 next_file_string_table_offset = 0;
804 stringtab_global = DBX_STRINGTAB (objfile);
806 pst = (struct partial_symtab *) 0;
808 includes_allocated = 30;
810 psymtab_include_list = (char **) alloca (includes_allocated *
813 dependencies_allocated = 30;
814 dependencies_used = 0;
816 (struct partial_symtab **) alloca (dependencies_allocated *
817 sizeof (struct partial_symtab *));
819 old_chain = make_cleanup (free_objfile, objfile);
821 /* Init bincl list */
822 init_bincl_list (20, objfile);
823 make_cleanup (free_bincl_list, objfile);
825 last_source_file = NULL;
827 #ifdef END_OF_TEXT_DEFAULT
828 end_of_text_addr = END_OF_TEXT_DEFAULT;
830 end_of_text_addr = text_addr + section_offsets->offsets[SECT_OFF_TEXT]
831 + text_size; /* Relocate */
834 symfile_bfd = objfile->obfd; /* For next_text_symbol */
835 abfd = objfile->obfd;
836 symbuf_end = symbuf_idx = 0;
837 next_symbol_text_func = dbx_next_symbol_text;
839 for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
841 /* Get the symbol for this run and pull out some info */
842 QUIT; /* allow this to be interruptable */
843 if (symbuf_idx == symbuf_end)
845 bufp = &symbuf[symbuf_idx++];
848 * Special case to speed up readin.
850 if (bufp->n_type == (unsigned char)N_SLINE) continue;
852 SWAP_SYMBOL (bufp, abfd);
854 /* Ok. There is a lot of code duplicated in the rest of this
855 switch statement (for efficiency reasons). Since I don't
856 like duplicating code, I will do my penance here, and
857 describe the code which is duplicated:
859 *) The assignment to namestring.
860 *) The call to strchr.
861 *) The addition of a partial symbol the the two partial
862 symbol lists. This last is a large section of code, so
863 I've imbedded it in the following macro.
866 /* Set namestring based on bufp. If the string table index is invalid,
867 give a fake name, and print a single error message per symbol file read,
868 rather than abort the symbol reading or flood the user with messages. */
870 /*FIXME: Too many adds and indirections in here for the inner loop. */
871 #define SET_NAMESTRING()\
872 if (((unsigned)bufp->n_strx + file_string_table_offset) >= \
873 DBX_STRINGTAB_SIZE (objfile)) { \
874 complain (&string_table_offset_complaint, symnum); \
875 namestring = "foo"; \
877 namestring = bufp->n_strx + file_string_table_offset + \
878 DBX_STRINGTAB (objfile)
880 #define CUR_SYMBOL_TYPE bufp->n_type
881 #define CUR_SYMBOL_VALUE bufp->n_value
883 #define START_PSYMTAB(ofile,secoff,fname,low,symoff,global_syms,static_syms)\
884 start_psymtab(ofile, secoff, fname, low, symoff, global_syms, static_syms)
885 #define END_PSYMTAB(pst,ilist,ninc,c_off,c_text,dep_list,n_deps)\
886 end_psymtab(pst,ilist,ninc,c_off,c_text,dep_list,n_deps)
888 #include "partial-stab.h"
891 /* If there's stuff to be cleaned up, clean it up. */
892 if (DBX_SYMCOUNT (objfile) > 0 /* We have some syms */
893 /*FIXME, does this have a bug at start address 0? */
895 && objfile -> ei.entry_point < bufp->n_value
896 && objfile -> ei.entry_point >= last_o_file_start)
898 objfile -> ei.entry_file_lowpc = last_o_file_start;
899 objfile -> ei.entry_file_highpc = bufp->n_value;
904 end_psymtab (pst, psymtab_include_list, includes_used,
905 symnum * symbol_size, end_of_text_addr,
906 dependency_list, dependencies_used);
909 free_bincl_list (objfile);
910 discard_cleanups (old_chain);
913 /* Allocate and partially fill a partial symtab. It will be
914 completely filled at the end of the symbol list.
916 SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
917 is the address relative to which its symbols are (incremental) or 0
921 struct partial_symtab *
922 start_psymtab (objfile, section_offsets,
923 filename, textlow, ldsymoff, global_syms, static_syms)
924 struct objfile *objfile;
925 struct section_offsets *section_offsets;
929 struct partial_symbol *global_syms;
930 struct partial_symbol *static_syms;
932 struct partial_symtab *result =
933 start_psymtab_common(objfile, section_offsets,
934 filename, textlow, global_syms, static_syms);
936 result->read_symtab_private = (char *)
937 obstack_alloc (&objfile -> psymbol_obstack, sizeof (struct symloc));
938 LDSYMOFF(result) = ldsymoff;
939 result->read_symtab = dbx_psymtab_to_symtab;
940 SYMBOL_SIZE(result) = symbol_size;
941 SYMBOL_OFFSET(result) = symbol_table_offset;
942 STRING_OFFSET(result) = string_table_offset;
943 FILE_STRING_OFFSET(result) = file_string_table_offset;
945 /* If we're handling an ELF file, drag some section-relocation info
946 for this source file out of the ELF symbol table, to compensate for
947 Sun brain death. This replaces the section_offsets in this psymtab,
949 elfstab_offset_sections (objfile, result);
951 /* Deduce the source language from the filename for this psymtab. */
952 psymtab_language = deduce_language_from_filename (filename);
957 /* Close off the current usage of a partial_symbol table entry. This
958 involves setting the correct number of includes (with a realloc),
959 setting the high text mark, setting the symbol length in the
960 executable, and setting the length of the global and static lists
963 The global symbols and static symbols are then seperately sorted.
965 Then the partial symtab is put on the global list.
966 *** List variables and peculiarities of same. ***
970 end_psymtab (pst, include_list, num_includes, capping_symbol_offset,
971 capping_text, dependency_list, number_dependencies)
972 struct partial_symtab *pst;
975 int capping_symbol_offset;
976 CORE_ADDR capping_text;
977 struct partial_symtab **dependency_list;
978 int number_dependencies;
979 /* struct partial_symbol *capping_global, *capping_static;*/
982 struct partial_symtab *p1;
983 struct objfile *objfile = pst -> objfile;
985 if (capping_symbol_offset != -1)
986 LDSYMLEN(pst) = capping_symbol_offset - LDSYMOFF(pst);
987 pst->texthigh = capping_text;
989 /* Under Solaris, the N_SO symbols always have a value of 0,
990 instead of the usual address of the .o file. Therefore,
991 we have to do some tricks to fill in texthigh and textlow.
992 The first trick is in partial-stab.h: if we see a static
993 or global function, and the textlow for the current pst
994 is still 0, then we use that function's address for
995 the textlow of the pst.
997 Now, to fill in texthigh, we remember the last function seen
998 in the .o file (also in partial-stab.h). Also, there's a hack in
999 bfd/elf.c and gdb/elfread.c to pass the ELF st_size field
1000 to here via the misc_info field. Therefore, we can fill in
1001 a reliable texthigh by taking the address plus size of the
1002 last function in the file.
1004 Unfortunately, that does not cover the case where the last function
1005 in the file is static. See the paragraph below for more comments
1008 Finally, if we have a valid textlow for the current file, we run
1009 down the partial_symtab_list filling in previous texthighs that
1010 are still unknown. */
1012 if (pst->texthigh == 0 && last_function_name) {
1015 struct minimal_symbol *minsym;
1017 p = strchr (last_function_name, ':');
1019 p = last_function_name;
1020 n = p - last_function_name;
1022 strncpy (p, last_function_name, n);
1025 minsym = lookup_minimal_symbol (p, objfile);
1028 pst->texthigh = SYMBOL_VALUE_ADDRESS (minsym) +
1029 (int) MSYMBOL_INFO (minsym);
1031 /* This file ends with a static function, and it's
1032 difficult to imagine how hard it would be to track down
1033 the elf symbol. Luckily, most of the time no one will notice,
1034 since the next file will likely be compiled with -g, so
1035 the code below will copy the first fuction's start address
1036 back to our texthigh variable. (Also, if this file is the
1037 last one in a dynamically linked program, texthigh already
1038 has the right value.) If the next file isn't compiled
1039 with -g, then the last function in this file winds up owning
1040 all of the text space up to the next -g file, or the end (minus
1041 shared libraries). This only matters for single stepping,
1042 and even then it will still work, except that it will single
1043 step through all of the covered functions, instead of setting
1044 breakpoints around them as it usualy does. This makes it
1045 pretty slow, but at least it doesn't fail.
1047 We can fix this with a fairly big change to bfd, but we need
1048 to coordinate better with Cygnus if we want to do that. FIXME. */
1050 last_function_name = NULL;
1053 /* this test will be true if the last .o file is only data */
1054 if (pst->textlow == 0)
1055 pst->textlow = pst->texthigh;
1057 /* If we know our own starting text address, then walk through all other
1058 psymtabs for this objfile, and if any didn't know their ending text
1059 address, set it to our starting address. Take care to not set our
1060 own ending address to our starting address, nor to set addresses on
1061 `dependency' files that have both textlow and texthigh zero. */
1063 ALL_OBJFILE_PSYMTABS (objfile, p1) {
1064 if (p1->texthigh == 0 && p1->textlow != 0 && p1 != pst) {
1065 p1->texthigh = pst->textlow;
1066 /* if this file has only data, then make textlow match texthigh */
1067 if (p1->textlow == 0)
1068 p1->textlow = p1->texthigh;
1073 /* End of kludge for patching Solaris textlow and texthigh. */
1076 pst->n_global_syms =
1077 objfile->global_psymbols.next - (objfile->global_psymbols.list + pst->globals_offset);
1078 pst->n_static_syms =
1079 objfile->static_psymbols.next - (objfile->static_psymbols.list + pst->statics_offset);
1081 pst->number_of_dependencies = number_dependencies;
1082 if (number_dependencies)
1084 pst->dependencies = (struct partial_symtab **)
1085 obstack_alloc (&objfile->psymbol_obstack,
1086 number_dependencies * sizeof (struct partial_symtab *));
1087 memcpy (pst->dependencies, dependency_list,
1088 number_dependencies * sizeof (struct partial_symtab *));
1091 pst->dependencies = 0;
1093 for (i = 0; i < num_includes; i++)
1095 struct partial_symtab *subpst =
1096 allocate_psymtab (include_list[i], objfile);
1098 subpst->section_offsets = pst->section_offsets;
1099 subpst->read_symtab_private =
1100 (char *) obstack_alloc (&objfile->psymbol_obstack,
1101 sizeof (struct symloc));
1105 subpst->texthigh = 0;
1107 /* We could save slight bits of space by only making one of these,
1108 shared by the entire set of include files. FIXME-someday. */
1109 subpst->dependencies = (struct partial_symtab **)
1110 obstack_alloc (&objfile->psymbol_obstack,
1111 sizeof (struct partial_symtab *));
1112 subpst->dependencies[0] = pst;
1113 subpst->number_of_dependencies = 1;
1115 subpst->globals_offset =
1116 subpst->n_global_syms =
1117 subpst->statics_offset =
1118 subpst->n_static_syms = 0;
1122 subpst->read_symtab = dbx_psymtab_to_symtab;
1125 sort_pst_symbols (pst);
1127 /* If there is already a psymtab or symtab for a file of this name, remove it.
1128 (If there is a symtab, more drastic things also happen.)
1129 This happens in VxWorks. */
1130 free_named_symtabs (pst->filename);
1132 if (num_includes == 0
1133 && number_dependencies == 0
1134 && pst->n_global_syms == 0
1135 && pst->n_static_syms == 0) {
1136 /* Throw away this psymtab, it's empty. We can't deallocate it, since
1137 it is on the obstack, but we can forget to chain it on the list. */
1138 struct partial_symtab *prev_pst;
1140 /* First, snip it out of the psymtab chain */
1142 if (pst->objfile->psymtabs == pst)
1143 pst->objfile->psymtabs = pst->next;
1145 for (prev_pst = pst->objfile->psymtabs; prev_pst; prev_pst = pst->next)
1146 if (prev_pst->next == pst)
1147 prev_pst->next = pst->next;
1149 /* Next, put it on a free list for recycling */
1151 pst->next = pst->objfile->free_psymtabs;
1152 pst->objfile->free_psymtabs = pst;
1157 dbx_psymtab_to_symtab_1 (pst)
1158 struct partial_symtab *pst;
1160 struct cleanup *old_chain;
1168 fprintf (stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
1173 /* Read in all partial symtabs on which this one is dependent */
1174 for (i = 0; i < pst->number_of_dependencies; i++)
1175 if (!pst->dependencies[i]->readin)
1177 /* Inform about additional files that need to be read in. */
1180 fputs_filtered (" ", stdout);
1182 fputs_filtered ("and ", stdout);
1184 printf_filtered ("%s...", pst->dependencies[i]->filename);
1185 wrap_here (""); /* Flush output */
1188 dbx_psymtab_to_symtab_1 (pst->dependencies[i]);
1191 if (LDSYMLEN(pst)) /* Otherwise it's a dummy */
1193 /* Init stuff necessary for reading in symbols */
1196 old_chain = make_cleanup (really_free_pendings, 0);
1197 file_string_table_offset = FILE_STRING_OFFSET (pst);
1198 symbol_size = SYMBOL_SIZE (pst);
1200 /* Read in this file's symbols */
1201 bfd_seek (pst->objfile->obfd, SYMBOL_OFFSET (pst), L_SET);
1203 read_ofile_symtab (pst->objfile, LDSYMOFF(pst), LDSYMLEN(pst),
1204 pst->textlow, pst->texthigh - pst->textlow,
1205 pst->section_offsets);
1206 sort_symtab_syms (pst->symtab);
1208 do_cleanups (old_chain);
1214 /* Read in all of the symbols for a given psymtab for real.
1215 Be verbose about it if the user wants that. */
1218 dbx_psymtab_to_symtab (pst)
1219 struct partial_symtab *pst;
1228 fprintf (stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
1233 if (LDSYMLEN(pst) || pst->number_of_dependencies)
1235 /* Print the message now, before reading the string table,
1236 to avoid disconcerting pauses. */
1239 printf_filtered ("Reading in symbols for %s...", pst->filename);
1243 sym_bfd = pst->objfile->obfd;
1245 next_symbol_text_func = dbx_next_symbol_text;
1247 dbx_psymtab_to_symtab_1 (pst);
1249 /* Match with global symbols. This only needs to be done once,
1250 after all of the symtabs and dependencies have been read in. */
1251 scan_file_globals (pst->objfile);
1253 /* Finish up the debug error message. */
1255 printf_filtered ("done.\n");
1259 /* Read in a defined section of a specific object file's symbols.
1261 DESC is the file descriptor for the file, positioned at the
1262 beginning of the symtab
1263 SYM_OFFSET is the offset within the file of
1264 the beginning of the symbols we want to read
1265 SYM_SIZE is the size of the symbol info to read in.
1266 TEXT_OFFSET is the beginning of the text segment we are reading symbols for
1267 TEXT_SIZE is the size of the text segment read in.
1268 SECTION_OFFSETS are the relocation offsets which get added to each symbol. */
1270 static struct symtab *
1271 read_ofile_symtab (objfile, sym_offset, sym_size, text_offset, text_size,
1273 struct objfile *objfile;
1276 CORE_ADDR text_offset;
1278 struct section_offsets *section_offsets;
1280 register char *namestring;
1281 register struct internal_nlist *bufp;
1283 unsigned max_symnum;
1287 current_objfile = objfile;
1288 subfile_stack = NULL;
1290 stringtab_global = DBX_STRINGTAB (objfile);
1291 last_source_file = NULL;
1293 abfd = objfile->obfd;
1294 symfile_bfd = objfile->obfd; /* Implicit param to next_text_symbol */
1295 symbuf_end = symbuf_idx = 0;
1297 /* It is necessary to actually read one symbol *before* the start
1298 of this symtab's symbols, because the GCC_COMPILED_FLAG_SYMBOL
1299 occurs before the N_SO symbol.
1301 Detecting this in read_dbx_symtab
1302 would slow down initial readin, so we look for it here instead. */
1303 if (!processing_acc_compilation && sym_offset >= (int)symbol_size)
1305 bfd_seek (symfile_bfd, sym_offset - symbol_size, L_INCR);
1307 bufp = &symbuf[symbuf_idx++];
1308 SWAP_SYMBOL (bufp, abfd);
1312 processing_gcc_compilation = 0;
1313 if (bufp->n_type == N_TEXT)
1315 if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1316 processing_gcc_compilation = 1;
1317 else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1318 processing_gcc_compilation = 2;
1321 /* Try to select a C++ demangling based on the compilation unit
1324 if (processing_gcc_compilation)
1326 #if 1 /* Works, but is experimental. -fnf */
1327 if (AUTO_DEMANGLING)
1329 set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1336 /* The N_SO starting this symtab is the first symbol, so we
1337 better not check the symbol before it. I'm not this can
1338 happen, but it doesn't hurt to check for it. */
1339 bfd_seek (symfile_bfd, sym_offset, L_INCR);
1340 processing_gcc_compilation = 0;
1343 if (symbuf_idx == symbuf_end)
1345 bufp = &symbuf[symbuf_idx];
1346 if (bufp->n_type != (unsigned char)N_SO)
1347 error("First symbol in segment of executable not a source symbol");
1349 max_symnum = sym_size / symbol_size;
1352 symnum < max_symnum;
1355 QUIT; /* Allow this to be interruptable */
1356 if (symbuf_idx == symbuf_end)
1358 bufp = &symbuf[symbuf_idx++];
1359 SWAP_SYMBOL (bufp, abfd);
1361 type = bufp->n_type;
1365 if (type & N_STAB) {
1366 process_one_symbol (type, bufp->n_desc, bufp->n_value,
1367 namestring, section_offsets, objfile);
1369 /* We skip checking for a new .o or -l file; that should never
1370 happen in this routine. */
1371 else if (type == N_TEXT)
1373 /* I don't think this code will ever be executed, because
1374 the GCC_COMPILED_FLAG_SYMBOL usually is right before
1375 the N_SO symbol which starts this source file.
1376 However, there is no reason not to accept
1377 the GCC_COMPILED_FLAG_SYMBOL anywhere. */
1379 if (STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
1380 processing_gcc_compilation = 1;
1381 else if (STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
1382 processing_gcc_compilation = 2;
1384 #if 1 /* Works, but is experimental. -fnf */
1385 if (AUTO_DEMANGLING)
1387 set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1391 else if (type & N_EXT || type == (unsigned char)N_TEXT
1392 || type == (unsigned char)N_NBTEXT
1394 /* Global symbol: see if we came across a dbx defintion for
1395 a corresponding symbol. If so, store the value. Remove
1396 syms from the chain when their values are stored, but
1397 search the whole chain, as there may be several syms from
1398 different files with the same name. */
1399 /* This is probably not true. Since the files will be read
1400 in one at a time, each reference to a global symbol will
1401 be satisfied in each file as it appears. So we skip this
1407 current_objfile = NULL;
1409 /* In a Solaris elf file, this variable, which comes from the
1410 value of the N_SO symbol, will still be 0. Luckily, text_offset,
1411 which comes from pst->textlow is correct. */
1412 if (last_source_start_addr == 0)
1413 last_source_start_addr = text_offset;
1415 rtn = end_symtab (text_offset + text_size, 0, 0, objfile);
1420 /* This handles a single symbol from the symbol-file, building symbols
1421 into a GDB symtab. It takes these arguments and an implicit argument.
1423 TYPE is the type field of the ".stab" symbol entry.
1424 DESC is the desc field of the ".stab" entry.
1425 VALU is the value field of the ".stab" entry.
1426 NAME is the symbol name, in our address space.
1427 SECTION_OFFSETS is a set of amounts by which the sections of this object
1428 file were relocated when it was loaded into memory.
1429 All symbols that refer
1430 to memory locations need to be offset by these amounts.
1431 OBJFILE is the object file from which we are reading symbols.
1432 It is used in end_symtab. */
1435 process_one_symbol (type, desc, valu, name, section_offsets, objfile)
1439 struct section_offsets *section_offsets;
1440 struct objfile *objfile;
1442 #ifndef SUN_FIXED_LBRAC_BUG
1443 /* This records the last pc address we've seen. We depend on there being
1444 an SLINE or FUN or SO before the first LBRAC, since the variable does
1445 not get reset in between reads of different symbol files. */
1446 static CORE_ADDR last_pc_address;
1448 register struct context_stack *new;
1449 /* This remembers the address of the start of a function. It is used
1450 because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries are
1451 relative to the current function's start address. On systems
1452 other than Solaris 2, this just holds the SECT_OFF_TEXT value, and is
1453 used to relocate these symbol types rather than SECTION_OFFSETS. */
1454 static CORE_ADDR function_start_offset;
1457 #ifndef BLOCK_ADDRESS_FUNCTION_RELATIVE
1458 /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
1459 function start address, so just use the text offset. */
1460 function_start_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT);
1463 /* Something is wrong if we see real data before
1464 seeing a source file name. */
1466 if (last_source_file == NULL && type != (unsigned char)N_SO)
1468 /* Currently this ignores N_ENTRY on Gould machines, N_NSYM on machines
1469 where that code is defined. */
1470 if (IGNORE_SYMBOL (type))
1473 /* FIXME, this should not be an error, since it precludes extending
1474 the symbol table information in this way... */
1475 error ("Invalid symbol data: does not start by identifying a source file.");
1483 /* It seems that the Sun ANSI C compiler (acc) replaces N_FUN with N_GSYM and
1484 N_STSYM with a type code of f or F. Can't enable this until we get some
1485 stuff straightened out with psymtabs. FIXME. */
1491 /* Relocate for dynamic loading */
1492 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1494 /* Either of these types of symbols indicates the start of
1495 a new function. We must process its "name" normally for dbx,
1496 but also record the start of a new lexical context, and possibly
1497 also the end of the lexical context for the previous function. */
1498 /* This is not always true. This type of symbol may indicate a
1499 text segment variable. */
1501 colon_pos = strchr (name, ':');
1503 || (*colon_pos != 'f' && *colon_pos != 'F'))
1505 define_symbol (valu, name, desc, type, objfile);
1509 #ifndef SUN_FIXED_LBRAC_BUG
1510 last_pc_address = valu; /* Save for SunOS bug circumcision */
1513 #ifdef BLOCK_ADDRESS_FUNCTION_RELATIVE
1514 /* On Solaris 2.0 compilers, the block addresses and N_SLINE's
1515 are relative to the start of the function. On normal systems,
1516 and when using gcc on Solaris 2.0, these addresses are just
1517 absolute, or relative to the N_SO, depending on
1518 BLOCK_ADDRESS_ABSOLUTE. */
1519 function_start_offset = valu;
1522 within_function = 1;
1523 if (context_stack_depth > 0)
1525 new = pop_context ();
1526 /* Make a block for the local symbols within. */
1527 finish_block (new->name, &local_symbols, new->old_blocks,
1528 new->start_addr, valu, objfile);
1530 /* Stack must be empty now. */
1531 if (context_stack_depth != 0)
1532 complain (&lbrac_unmatched_complaint, symnum);
1534 new = push_context (0, valu);
1535 new->name = define_symbol (valu, name, desc, type, objfile);
1539 /* This "symbol" just indicates the start of an inner lexical
1540 context within a function. */
1542 #if defined(BLOCK_ADDRESS_ABSOLUTE) || defined(BLOCK_ADDRESS_FUNCTION_RELATIVE)
1543 /* Relocate for dynamic loading and Sun ELF acc fn-relative syms. */
1544 valu += function_start_offset;
1546 /* On most machines, the block addresses are relative to the
1547 N_SO, the linker did not relocate them (sigh). */
1548 valu += last_source_start_addr;
1551 #ifndef SUN_FIXED_LBRAC_BUG
1552 if (valu < last_pc_address) {
1553 /* Patch current LBRAC pc value to match last handy pc value */
1554 complain (&lbrac_complaint);
1555 valu = last_pc_address;
1558 new = push_context (desc, valu);
1562 /* This "symbol" just indicates the end of an inner lexical
1563 context that was started with N_LBRAC. */
1565 #if defined(BLOCK_ADDRESS_ABSOLUTE) || defined(BLOCK_ADDRESS_FUNCTION_RELATIVE)
1566 /* Relocate for dynamic loading and Sun ELF acc fn-relative syms. */
1567 valu += function_start_offset;
1569 /* On most machines, the block addresses are relative to the
1570 N_SO, the linker did not relocate them (sigh). */
1571 valu += last_source_start_addr;
1574 new = pop_context();
1575 if (desc != new->depth)
1576 complain (&lbrac_mismatch_complaint, symnum);
1578 /* Some compilers put the variable decls inside of an
1579 LBRAC/RBRAC block. This macro should be nonzero if this
1580 is true. DESC is N_DESC from the N_RBRAC symbol.
1581 GCC_P is true if we've detected the GCC_COMPILED_SYMBOL
1582 or the GCC2_COMPILED_SYMBOL. */
1583 #if !defined (VARIABLES_INSIDE_BLOCK)
1584 #define VARIABLES_INSIDE_BLOCK(desc, gcc_p) 0
1587 /* Can only use new->locals as local symbols here if we're in
1588 gcc or on a machine that puts them before the lbrack. */
1589 if (!VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1590 local_symbols = new->locals;
1592 /* If this is not the outermost LBRAC...RBRAC pair in the
1593 function, its local symbols preceded it, and are the ones
1594 just recovered from the context stack. Defined the block for them.
1596 If this is the outermost LBRAC...RBRAC pair, there is no
1597 need to do anything; leave the symbols that preceded it
1598 to be attached to the function's own block. However, if
1599 it is so, we need to indicate that we just moved outside
1602 && (context_stack_depth
1603 > !VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation)))
1605 /* FIXME Muzzle a compiler bug that makes end < start. */
1606 if (new->start_addr > valu)
1608 complain (&lbrac_rbrac_complaint);
1609 new->start_addr = valu;
1611 /* Make a block for the local symbols within. */
1612 finish_block (0, &local_symbols, new->old_blocks,
1613 new->start_addr, valu, objfile);
1617 within_function = 0;
1619 if (VARIABLES_INSIDE_BLOCK(desc, processing_gcc_compilation))
1620 /* Now pop locals of block just finished. */
1621 local_symbols = new->locals;
1626 /* This kind of symbol indicates the start of an object file. */
1627 /* Relocate for dynamic loading */
1628 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1632 /* This type of symbol indicates the start of data
1633 for one source file.
1634 Finish the symbol table of the previous source file
1635 (if any) and start accumulating a new symbol table. */
1636 /* Relocate for dynamic loading */
1637 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1639 #ifndef SUN_FIXED_LBRAC_BUG
1640 last_pc_address = valu; /* Save for SunOS bug circumcision */
1643 #ifdef PCC_SOL_BROKEN
1644 /* pcc bug, occasionally puts out SO for SOL. */
1645 if (context_stack_depth > 0)
1647 start_subfile (name, NULL);
1651 if (last_source_file)
1653 /* Check if previous symbol was also an N_SO (with some
1654 sanity checks). If so, that one was actually the directory
1655 name, and the current one is the real file name.
1657 if (previous_stab_code == (unsigned char) N_SO)
1659 patch_subfile_names (current_subfile, name);
1660 break; /* Ignore repeated SOs */
1662 end_symtab (valu, 0, 0, objfile);
1666 start_symtab (name, NULL, valu);
1671 /* This type of symbol indicates the start of data for
1672 a sub-source-file, one whose contents were copied or
1673 included in the compilation of the main source file
1674 (whose name was given in the N_SO symbol.) */
1675 /* Relocate for dynamic loading */
1676 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1677 start_subfile (name, current_subfile->dirname);
1682 add_new_header_file (name, valu);
1683 start_subfile (name, current_subfile->dirname);
1687 start_subfile (pop_subfile (), current_subfile->dirname);
1691 add_old_header_file (name, valu);
1695 /* This type of "symbol" really just records
1696 one line-number -- core-address correspondence.
1697 Enter it in the line list for this symbol table. */
1698 /* Relocate for dynamic loading and for ELF acc fn-relative syms. */
1699 valu += function_start_offset;
1700 #ifndef SUN_FIXED_LBRAC_BUG
1701 last_pc_address = valu; /* Save for SunOS bug circumcision */
1703 record_line (current_subfile, desc, valu);
1708 error ("Invalid symbol data: common within common at symtab pos %d",
1710 common_block = local_symbols;
1711 common_block_i = local_symbols ? local_symbols->nsyms : 0;
1715 /* Symbols declared since the BCOMM are to have the common block
1716 start address added in when we know it. common_block points to
1717 the first symbol after the BCOMM in the local_symbols list;
1718 copy the list and hang it off the symbol for the common block name
1722 struct symbol *sym =
1723 (struct symbol *) xmmalloc (objfile -> md, sizeof (struct symbol));
1724 memset (sym, 0, sizeof *sym);
1725 SYMBOL_NAME (sym) = savestring (name, strlen (name));
1726 SYMBOL_CLASS (sym) = LOC_BLOCK;
1727 SYMBOL_NAMESPACE (sym) = (enum namespace)((long)
1728 copy_pending (local_symbols, common_block_i, common_block));
1729 i = hashname (SYMBOL_NAME (sym));
1730 SYMBOL_VALUE_CHAIN (sym) = global_sym_chain[i];
1731 global_sym_chain[i] = sym;
1736 /* The following symbol types need to have the appropriate offset added
1737 to their value; then we process symbol definitions in the name. */
1739 case N_STSYM: /* Static symbol in data seg */
1740 case N_LCSYM: /* Static symbol in BSS seg */
1741 case N_ROSYM: /* Static symbol in Read-only data seg */
1742 /* HORRID HACK DEPT. However, it's Sun's furgin' fault. FIXME.
1743 Solaris2's stabs-in-coff makes *most* symbols relative
1744 but leaves a few absolute. N_STSYM and friends sit on the fence.
1745 .stab "foo:S...",N_STSYM is absolute (ld relocates it)
1746 .stab "foo:V...",N_STSYM is relative (section base subtracted).
1747 This leaves us no choice but to search for the 'S' or 'V'...
1748 (or pass the whole section_offsets stuff down ONE MORE function
1749 call level, which we really don't want to do). */
1752 p = strchr (name, ':');
1753 if (p != 0 && p[1] == 'S')
1755 /* FIXME! We relocate it by the TEXT offset, in case the
1756 whole module moved in memory. But this is wrong, since
1757 the sections can side around independently. */
1758 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1759 goto define_a_symbol;
1761 /* Since it's not the kludge case, re-dispatch to the right handler. */
1763 case N_STSYM: goto case_N_STSYM;
1764 case N_LCSYM: goto case_N_LCSYM;
1765 case N_ROSYM: goto case_N_ROSYM;
1770 case_N_STSYM: /* Static symbol in data seg */
1771 case N_DSLINE: /* Source line number, data seg */
1772 valu += ANOFFSET (section_offsets, SECT_OFF_DATA);
1773 goto define_a_symbol;
1775 case_N_LCSYM: /* Static symbol in BSS seg */
1776 case N_BSLINE: /* Source line number, bss seg */
1777 /* N_BROWS: overlaps with N_BSLINE */
1778 valu += ANOFFSET (section_offsets, SECT_OFF_BSS);
1779 goto define_a_symbol;
1781 case_N_ROSYM: /* Static symbol in Read-only data seg */
1782 valu += ANOFFSET (section_offsets, SECT_OFF_RODATA);
1783 goto define_a_symbol;
1785 case N_ENTRY: /* Alternate entry point */
1786 /* Relocate for dynamic loading */
1787 valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
1788 goto define_a_symbol;
1790 /* The following symbol types don't need the address field relocated,
1791 since it is either unused, or is absolute. */
1793 case N_GSYM: /* Global variable */
1794 case N_NSYMS: /* Number of symbols (ultrix) */
1795 case N_NOMAP: /* No map? (ultrix) */
1796 case N_RSYM: /* Register variable */
1797 case N_DEFD: /* Modula-2 GNU module dependency */
1798 case N_SSYM: /* Struct or union element */
1799 case N_LSYM: /* Local symbol in stack */
1800 case N_PSYM: /* Parameter variable */
1801 case N_LENG: /* Length of preceding symbol type */
1803 define_symbol (valu, name, desc, type, objfile);
1806 /* We use N_OPT to carry the gcc2_compiled flag. Sun uses it
1807 for a bunch of other flags, too. Someday we may parse their
1808 flags; for now we ignore theirs and hope they'll ignore ours. */
1809 case N_OPT: /* Solaris 2: Compiler options */
1812 if (STREQ (name, GCC2_COMPILED_FLAG_SYMBOL))
1814 processing_gcc_compilation = 2;
1815 #if 1 /* Works, but is experimental. -fnf */
1816 if (AUTO_DEMANGLING)
1818 set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1825 /* The following symbol types can be ignored. */
1826 case N_OBJ: /* Solaris 2: Object file dir and name */
1827 /* N_UNDF: Solaris 2: file separator mark */
1828 /* N_UNDF: -- we will never encounter it, since we only process one
1829 file's symbols at once. */
1830 case N_ENDM: /* Solaris 2: End of module */
1831 case N_MAIN: /* Name of main routine. */
1834 /* The following symbol types we don't know how to process. Handle
1835 them in a "default" way, but complain to people who care. */
1837 case N_CATCH: /* Exception handler catcher */
1838 case N_EHDECL: /* Exception handler name */
1839 case N_PC: /* Global symbol in Pascal */
1840 case N_M2C: /* Modula-2 compilation unit */
1841 /* N_MOD2: overlaps with N_EHDECL */
1842 case N_SCOPE: /* Modula-2 scope information */
1843 case N_ECOML: /* End common (local name) */
1844 case N_NBTEXT: /* Gould Non-Base-Register symbols??? */
1849 complain (&unknown_symtype_complaint, local_hex_string(type));
1851 define_symbol (valu, name, desc, type, objfile);
1854 previous_stab_code = type;
1857 /* Copy a pending list, used to record the contents of a common
1858 block for later fixup. */
1859 static struct pending *
1860 copy_pending (beg, begi, end)
1861 struct pending *beg;
1863 struct pending *end;
1865 struct pending *new = 0;
1866 struct pending *next;
1868 for (next = beg; next != 0 && (next != end || begi < end->nsyms);
1869 next = next->next, begi = 0)
1872 for (j = begi; j < next->nsyms; j++)
1873 add_symbol_to_list (next->symbol[j], &new);
1878 /* Scan and build partial symbols for an ELF symbol file.
1879 This ELF file has already been processed to get its minimal symbols,
1880 and any DWARF symbols that were in it.
1882 This routine is the equivalent of dbx_symfile_init and dbx_symfile_read
1885 OBJFILE is the object file we are reading symbols from.
1886 ADDR is the address relative to which the symbols are (e.g.
1887 the base address of the text segment).
1888 MAINLINE is true if we are reading the main symbol
1889 table (as opposed to a shared lib or dynamically loaded file).
1890 STABOFFSET and STABSIZE define the location in OBJFILE where the .stab
1892 STABSTROFFSET and STABSTRSIZE define the location in OBJFILE where the
1893 .stabstr section exists.
1895 This routine is mostly copied from dbx_symfile_init and dbx_symfile_read,
1896 adjusted for elf details. */
1899 elfstab_build_psymtabs (objfile, section_offsets, mainline,
1900 staboffset, stabsize,
1901 stabstroffset, stabstrsize)
1902 struct objfile *objfile;
1903 struct section_offsets *section_offsets;
1905 file_ptr staboffset;
1906 unsigned int stabsize;
1907 file_ptr stabstroffset;
1908 unsigned int stabstrsize;
1911 bfd *sym_bfd = objfile->obfd;
1912 char *name = bfd_get_filename (sym_bfd);
1913 struct dbx_symfile_info *info;
1915 /* There is already a dbx_symfile_info allocated by our caller.
1916 It might even contain some info from the ELF symtab to help us. */
1917 info = (struct dbx_symfile_info *) objfile->sym_private;
1919 DBX_TEXT_SECT (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
1920 if (!DBX_TEXT_SECT (objfile))
1921 error ("Can't find .text section in symbol file");
1923 #define ELF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */
1924 DBX_SYMBOL_SIZE (objfile) = ELF_STABS_SYMBOL_SIZE;
1925 DBX_SYMCOUNT (objfile) = stabsize / DBX_SYMBOL_SIZE (objfile);
1926 DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
1927 DBX_SYMTAB_OFFSET (objfile) = staboffset;
1929 if (stabstrsize < 0 /* FIXME: stabstrsize is unsigned; never true! */
1930 || stabstrsize > bfd_get_size (sym_bfd))
1931 error ("ridiculous string table size: %d bytes", stabstrsize);
1932 DBX_STRINGTAB (objfile) = (char *)
1933 obstack_alloc (&objfile->psymbol_obstack, stabstrsize+1);
1935 /* Now read in the string table in one big gulp. */
1937 val = bfd_seek (sym_bfd, stabstroffset, L_SET);
1939 perror_with_name (name);
1940 val = bfd_read (DBX_STRINGTAB (objfile), stabstrsize, 1, sym_bfd);
1941 if (val != stabstrsize)
1942 perror_with_name (name);
1944 stabsread_new_init ();
1945 buildsym_new_init ();
1946 free_header_files ();
1947 init_header_files ();
1948 install_minimal_symbols (objfile);
1950 processing_acc_compilation = 1;
1952 /* In an elf file, we've already installed the minimal symbols that came
1953 from the elf (non-stab) symbol table, so always act like an
1954 incremental load here. */
1955 dbx_symfile_read (objfile, section_offsets, 0);
1958 /* Scan and build partial symbols for a PA symbol file.
1959 This PA file has already been processed to get its minimal symbols.
1961 OBJFILE is the object file we are reading symbols from.
1962 ADDR is the address relative to which the symbols are (e.g.
1963 the base address of the text segment).
1964 MAINLINE is true if we are reading the main symbol
1965 table (as opposed to a shared lib or dynamically loaded file).
1970 pastab_build_psymtabs (objfile, section_offsets, mainline)
1971 struct objfile *objfile;
1972 struct section_offsets *section_offsets;
1975 free_header_files ();
1976 init_header_files ();
1978 /* In a PA file, we've already installed the minimal symbols that came
1979 from the PA (non-stab) symbol table, so always act like an
1980 incremental load here. */
1982 dbx_symfile_read (objfile, section_offsets, mainline);
1985 /* Parse the user's idea of an offset for dynamic linking, into our idea
1986 of how to represent it for fast symbol reading. */
1988 static struct section_offsets *
1989 dbx_symfile_offsets (objfile, addr)
1990 struct objfile *objfile;
1993 struct section_offsets *section_offsets;
1996 section_offsets = (struct section_offsets *)
1997 obstack_alloc (&objfile -> psymbol_obstack,
1998 sizeof (struct section_offsets) +
1999 sizeof (section_offsets->offsets) * (SECT_OFF_MAX-1));
2001 for (i = 0; i < SECT_OFF_MAX; i++)
2002 ANOFFSET (section_offsets, i) = addr;
2004 return section_offsets;
2007 /* Register our willingness to decode symbols for SunOS and a.out and
2008 b.out files handled by BFD... */
2009 static struct sym_fns sunos_sym_fns =
2011 "sunOs", /* sym_name: name or name prefix of BFD target type */
2012 6, /* sym_namelen: number of significant sym_name chars */
2013 dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */
2014 dbx_symfile_init, /* sym_init: read initial info, setup for sym_read() */
2015 dbx_symfile_read, /* sym_read: read a symbol file into symtab */
2016 dbx_symfile_finish, /* sym_finish: finished with file, cleanup */
2017 dbx_symfile_offsets, /* sym_offsets: parse user's offsets to internal form */
2018 NULL /* next: pointer to next struct sym_fns */
2021 static struct sym_fns aout_sym_fns =
2023 "a.out", /* sym_name: name or name prefix of BFD target type */
2024 5, /* sym_namelen: number of significant sym_name chars */
2025 dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */
2026 dbx_symfile_init, /* sym_init: read initial info, setup for sym_read() */
2027 dbx_symfile_read, /* sym_read: read a symbol file into symtab */
2028 dbx_symfile_finish, /* sym_finish: finished with file, cleanup */
2029 dbx_symfile_offsets, /* sym_offsets: parse user's offsets to internal form */
2030 NULL /* next: pointer to next struct sym_fns */
2033 static struct sym_fns bout_sym_fns =
2035 "b.out", /* sym_name: name or name prefix of BFD target type */
2036 5, /* sym_namelen: number of significant sym_name chars */
2037 dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */
2038 dbx_symfile_init, /* sym_init: read initial info, setup for sym_read() */
2039 dbx_symfile_read, /* sym_read: read a symbol file into symtab */
2040 dbx_symfile_finish, /* sym_finish: finished with file, cleanup */
2041 dbx_symfile_offsets, /* sym_offsets: parse user's offsets to internal form */
2042 NULL /* next: pointer to next struct sym_fns */
2046 _initialize_dbxread ()
2048 add_symtab_fns(&sunos_sym_fns);
2049 add_symtab_fns(&aout_sym_fns);
2050 add_symtab_fns(&bout_sym_fns);