diff options
Diffstat (limited to 'gdb/dbxread.c')
-rw-r--r-- | gdb/dbxread.c | 1177 |
1 files changed, 572 insertions, 605 deletions
diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 36e744f..ce7c7d1 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -37,8 +37,8 @@ #include "symtab.h" #include "breakpoint.h" #include "target.h" -#include "gdbcore.h" /* for bfd stuff */ -#include "libaout.h" /* FIXME Secret internal BFD stuff for a.out */ +#include "gdbcore.h" /* for bfd stuff */ +#include "libaout.h" /* FIXME Secret internal BFD stuff for a.out */ #include "filenames.h" #include "objfiles.h" #include "buildsym-legacy.h" @@ -52,9 +52,8 @@ #include "psympriv.h" #include "block.h" #include "aout/aout64.h" -#include "aout/stab_gnu.h" /* We always use GNU stabs, not +#include "aout/stab_gnu.h" /* We always use GNU stabs, not native, now. */ - /* Key for dbx-associated data. */ @@ -64,42 +63,41 @@ const registry<objfile>::key<dbx_symfile_info> dbx_objfile_data_key; of the psymtab. */ struct symloc - { - /* Offset within the file symbol table of first local symbol for this +{ + /* Offset within the file symbol table of first local symbol for this file. */ - int ldsymoff; + int ldsymoff; - /* Length (in bytes) of the section of the symbol table devoted to + /* Length (in bytes) of the section of the symbol table devoted to this file's symbols (actually, the section bracketed may contain more than just this file's symbols). If ldsymlen is 0, the only reason for this thing's existence is the dependency list. Nothing else will happen when it is read in. */ - int ldsymlen; + int ldsymlen; - /* The size of each symbol in the symbol file (in external form). */ + /* The size of each symbol in the symbol file (in external form). */ - int symbol_size; + int symbol_size; - /* Further information needed to locate the symbols if they are in + /* Further information needed to locate the symbols if they are in an ELF file. */ - int symbol_offset; - int string_offset; - int file_string_offset; - enum language pst_language; - }; - -#define LDSYMOFF(p) (((struct symloc *)((p)->read_symtab_private))->ldsymoff) -#define LDSYMLEN(p) (((struct symloc *)((p)->read_symtab_private))->ldsymlen) -#define SYMLOC(p) ((struct symloc *)((p)->read_symtab_private)) -#define SYMBOL_SIZE(p) (SYMLOC(p)->symbol_size) -#define SYMBOL_OFFSET(p) (SYMLOC(p)->symbol_offset) -#define STRING_OFFSET(p) (SYMLOC(p)->string_offset) -#define FILE_STRING_OFFSET(p) (SYMLOC(p)->file_string_offset) -#define PST_LANGUAGE(p) (SYMLOC(p)->pst_language) - + int symbol_offset; + int string_offset; + int file_string_offset; + enum language pst_language; +}; + +#define LDSYMOFF(p) (((struct symloc *) ((p)->read_symtab_private))->ldsymoff) +#define LDSYMLEN(p) (((struct symloc *) ((p)->read_symtab_private))->ldsymlen) +#define SYMLOC(p) ((struct symloc *) ((p)->read_symtab_private)) +#define SYMBOL_SIZE(p) (SYMLOC (p)->symbol_size) +#define SYMBOL_OFFSET(p) (SYMLOC (p)->symbol_offset) +#define STRING_OFFSET(p) (SYMLOC (p)->string_offset) +#define FILE_STRING_OFFSET(p) (SYMLOC (p)->file_string_offset) +#define PST_LANGUAGE(p) (SYMLOC (p)->pst_language) /* The objfile we are currently reading. */ @@ -150,7 +148,6 @@ static int symfile_relocatable = 0; static unsigned char processing_acc_compilation; - /* The lowest text address we have yet encountered. This is needed because in an a.out file, there is no header field which tells us what address the program is actually going to be loaded at, so we @@ -169,20 +166,20 @@ static int has_line_numbers; static void unknown_symtype_complaint (const char *arg1) { - complaint (_("unknown symbol type %s"), arg1); + complaint (_ ("unknown symbol type %s"), arg1); } static void lbrac_mismatch_complaint (int arg1) { - complaint (_("N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d"), arg1); + complaint (_ ("N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d"), arg1); } static void repeated_header_complaint (const char *arg1, int arg2) { - complaint (_("\"repeated\" header file %s not " - "previously seen, at symtab pos %d"), + complaint (_ ("\"repeated\" header file %s not " + "previously seen, at symtab pos %d"), arg1, arg2); } @@ -196,7 +193,7 @@ repeated_header_complaint (const char *arg1, int arg2) table, in some cases. */ static void -find_text_range (bfd * sym_bfd, struct objfile *objfile) +find_text_range (bfd *sym_bfd, struct objfile *objfile) { asection *sec; int found_any = 0; @@ -226,13 +223,11 @@ find_text_range (bfd * sym_bfd, struct objfile *objfile) } if (!found_any) - error (_("Can't find any code sections in symbol file")); + error (_ ("Can't find any code sections in symbol file")); DBX_TEXT_ADDR (objfile) = start; DBX_TEXT_SIZE (objfile) = end - start; } - - /* During initial symbol readin, we need to have a structure to keep track of which psymtabs have which bincls in them. This structure @@ -241,17 +236,16 @@ find_text_range (bfd * sym_bfd, struct objfile *objfile) struct header_file_location { - header_file_location (const char *name_, int instance_, - legacy_psymtab *pst_) + header_file_location (const char *name_, int instance_, legacy_psymtab *pst_) : name (name_), instance (instance_), pst (pst_) { } - const char *name; /* Name of header file */ - int instance; /* See above */ - legacy_psymtab *pst; /* Partial symtab that has the + const char *name; /* Name of header file */ + int instance; /* See above */ + legacy_psymtab *pst; /* Partial symtab that has the BINCL/EINCL defs for this file. */ }; @@ -262,16 +256,14 @@ static std::vector<struct header_file_location> *bincl_list; static void read_ofile_symtab (struct objfile *, legacy_psymtab *); -static void dbx_read_symtab (legacy_psymtab *self, - struct objfile *objfile); +static void dbx_read_symtab (legacy_psymtab *self, struct objfile *objfile); static void dbx_expand_psymtab (legacy_psymtab *, struct objfile *); static void read_dbx_symtab (minimal_symbol_reader &, psymtab_storage *, struct objfile *); -static legacy_psymtab *find_corresponding_bincl_psymtab (const char *, - int); +static legacy_psymtab *find_corresponding_bincl_psymtab (const char *, int); static const char *dbx_next_symbol_text (struct objfile *); @@ -285,9 +277,8 @@ static void dbx_symfile_read (struct objfile *, symfile_add_flags); static void dbx_symfile_finish (struct objfile *); -static void record_minimal_symbol (minimal_symbol_reader &, - const char *, CORE_ADDR, int, - struct objfile *); +static void record_minimal_symbol (minimal_symbol_reader &, const char *, + CORE_ADDR, int, struct objfile *); static void add_new_header_file (const char *, int); @@ -331,7 +322,8 @@ add_this_object_header_file (int i) n_allocated_this_object_header_files *= 2; this_object_header_files = (int *) xrealloc ((char *) this_object_header_files, - n_allocated_this_object_header_files * sizeof (int)); + n_allocated_this_object_header_files + * sizeof (int)); } this_object_header_files[n_this_object_header_files++] = i; @@ -383,8 +375,9 @@ add_new_header_file (const char *name, int instance) if (i == 0) { N_ALLOCATED_HEADER_FILES (dbxread_objfile) = 10; - HEADER_FILES (dbxread_objfile) = (struct header_file *) - xmalloc (10 * sizeof (struct header_file)); + HEADER_FILES (dbxread_objfile) + = (struct header_file *) xmalloc (10 + * sizeof (struct header_file)); } else { @@ -425,11 +418,10 @@ explicit_lookup_type (int real_filenum, int index) return &f->vector[index]; } #endif - + static void -record_minimal_symbol (minimal_symbol_reader &reader, - const char *name, CORE_ADDR address, int type, - struct objfile *objfile) +record_minimal_symbol (minimal_symbol_reader &reader, const char *name, + CORE_ADDR address, int type, struct objfile *objfile) { enum minimal_symbol_type ms_type; int section; @@ -486,7 +478,8 @@ record_minimal_symbol (minimal_symbol_reader &reader, { const char *tempstring = name; - if (tempstring[0] == bfd_get_symbol_leading_char (objfile->obfd.get ())) + if (tempstring[0] + == bfd_get_symbol_leading_char (objfile->obfd.get ())) ++tempstring; if (is_vtable_name (tempstring)) ms_type = mst_data; @@ -509,7 +502,7 @@ record_minimal_symbol (minimal_symbol_reader &reader, reader.record_with_info (name, address, ms_type, section); } - + /* Scan and build partial symbols for a symbol file. We have been initialized by a call to dbx_symfile_init, which put all the relevant info into a "struct dbx_symfile_info", @@ -564,7 +557,6 @@ dbx_new_init (struct objfile *ignore) init_header_files (); } - /* dbx_symfile_init () is the dbx-specific initialization routine for reading symbols. It is passed a struct objfile which contains, among other things, @@ -578,7 +570,7 @@ dbx_new_init (struct objfile *ignore) be called unless this is an a.out (or very similar) file. FIXME, there should be a cleaner peephole into the BFD environment here. */ -#define DBX_STRINGTAB_SIZE_SIZE sizeof(long) /* FIXME */ +#define DBX_STRINGTAB_SIZE_SIZE sizeof (long) /* FIXME */ static void dbx_symfile_init (struct objfile *objfile) @@ -597,14 +589,14 @@ dbx_symfile_init (struct objfile *objfile) DBX_BSS_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".bss"); /* FIXME POKING INSIDE BFD DATA STRUCTURES. */ -#define STRING_TABLE_OFFSET (sym_bfd->origin + obj_str_filepos (sym_bfd)) -#define SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_sym_filepos (sym_bfd)) +#define STRING_TABLE_OFFSET (sym_bfd->origin + obj_str_filepos (sym_bfd)) +#define SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_sym_filepos (sym_bfd)) /* FIXME POKING INSIDE BFD DATA STRUCTURES. */ text_sect = bfd_get_section_by_name (sym_bfd, ".text"); if (!text_sect) - error (_("Can't find .text section in symbol file")); + error (_ ("Can't find .text section in symbol file")); DBX_TEXT_ADDR (objfile) = bfd_section_vma (text_sect); DBX_TEXT_SIZE (objfile) = bfd_section_size (text_sect); @@ -666,12 +658,12 @@ dbx_symfile_init (struct objfile *objfile) if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp) || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd)) - error (_("ridiculous string table size (%d bytes)."), + error (_ ("ridiculous string table size (%d bytes)."), DBX_STRINGTAB_SIZE (objfile)); - DBX_STRINGTAB (objfile) = - (char *) obstack_alloc (&objfile->objfile_obstack, - DBX_STRINGTAB_SIZE (objfile)); + DBX_STRINGTAB (objfile) + = (char *) obstack_alloc (&objfile->objfile_obstack, + DBX_STRINGTAB_SIZE (objfile)); OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile)); /* Now read in the string table in one big gulp. */ @@ -680,8 +672,7 @@ dbx_symfile_init (struct objfile *objfile) if (val < 0) perror_with_name (name); val = bfd_bread (DBX_STRINGTAB (objfile), - DBX_STRINGTAB_SIZE (objfile), - sym_bfd); + DBX_STRINGTAB_SIZE (objfile), sym_bfd); if (val != DBX_STRINGTAB_SIZE (objfile)) perror_with_name (name); } @@ -715,8 +706,6 @@ dbx_symfile_info::~dbx_symfile_info () } } - - /* Buffer for reading the symbol table entries. */ static struct external_nlist symbuf[4096]; static int symbuf_idx; @@ -793,7 +782,7 @@ fill_symbuf (bfd *sym_bfd) if (nbytes < 0) perror_with_name (bfd_get_filename (sym_bfd)); else if (nbytes == 0) - error (_("Premature end of file reading symbol table")); + error (_ ("Premature end of file reading symbol table")); symbuf_end = nbytes / symbol_size; symbuf_idx = 0; symbuf_left -= nbytes; @@ -812,16 +801,16 @@ stabs_seek (int sym_offset) bfd_seek (symfile_bfd, sym_offset, SEEK_CUR); } -#define INTERNALIZE_SYMBOL(intern, extern, abfd) \ - { \ - (intern).n_strx = bfd_h_get_32 (abfd, (extern)->e_strx); \ - (intern).n_type = bfd_h_get_8 (abfd, (extern)->e_type); \ - (intern).n_other = 0; \ - (intern).n_desc = bfd_h_get_16 (abfd, (extern)->e_desc); \ - if (bfd_get_sign_extend_vma (abfd)) \ - (intern).n_value = bfd_h_get_signed_32 (abfd, (extern)->e_value); \ - else \ - (intern).n_value = bfd_h_get_32 (abfd, (extern)->e_value); \ +#define INTERNALIZE_SYMBOL(intern, extern, abfd) \ + { \ + (intern).n_strx = bfd_h_get_32 (abfd, (extern)->e_strx); \ + (intern).n_type = bfd_h_get_8 (abfd, (extern)->e_type); \ + (intern).n_other = 0; \ + (intern).n_desc = bfd_h_get_16 (abfd, (extern)->e_desc); \ + if (bfd_get_sign_extend_vma (abfd)) \ + (intern).n_value = bfd_h_get_signed_32 (abfd, (extern)->e_value); \ + else \ + (intern).n_value = bfd_h_get_32 (abfd, (extern)->e_value); \ } /* Invariant: The symbol pointed to by symbuf_idx is the first one @@ -849,7 +838,6 @@ dbx_next_symbol_text (struct objfile *objfile) return nlist.n_strx + stringtab_global + file_string_table_offset; } - /* Given a name, value pair, find the corresponding bincl in the list. Return the partial symtab associated @@ -859,8 +847,7 @@ static legacy_psymtab * find_corresponding_bincl_psymtab (const char *name, int instance) { for (const header_file_location &bincl : *bincl_list) - if (bincl.instance == instance - && strcmp (name, bincl.name) == 0) + if (bincl.instance == instance && strcmp (name, bincl.name) == 0) return bincl.pst; repeated_header_complaint (name, symnum); @@ -876,17 +863,15 @@ set_namestring (struct objfile *objfile, const struct internal_nlist *nlist) { const char *namestring; - if (nlist->n_strx + file_string_table_offset - >= DBX_STRINGTAB_SIZE (objfile) + if (nlist->n_strx + file_string_table_offset >= DBX_STRINGTAB_SIZE (objfile) || nlist->n_strx + file_string_table_offset < nlist->n_strx) { - complaint (_("bad string table offset in symbol %d"), - symnum); + complaint (_ ("bad string table offset in symbol %d"), symnum); namestring = "<bad string table offset>"; - } + } else - namestring = (nlist->n_strx + file_string_table_offset - + DBX_STRINGTAB (objfile)); + namestring + = (nlist->n_strx + file_string_table_offset + DBX_STRINGTAB (objfile)); return namestring; } @@ -938,8 +923,8 @@ find_stab_function (const char *namestring, const char *filename, static void function_outside_compilation_unit_complaint (const char *arg1) { - complaint (_("function `%s' appears to be defined " - "outside of all compilation units"), + complaint (_ ("function `%s' appears to be defined " + "outside of all compilation units"), arg1); } @@ -948,11 +933,10 @@ function_outside_compilation_unit_complaint (const char *arg1) static void read_dbx_symtab (minimal_symbol_reader &reader, - psymtab_storage *partial_symtabs, - struct objfile *objfile) + psymtab_storage *partial_symtabs, struct objfile *objfile) { struct gdbarch *gdbarch = objfile->arch (); - struct external_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch. */ + struct external_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch. */ struct internal_nlist nlist; CORE_ADDR text_addr; int text_size; @@ -993,14 +977,13 @@ read_dbx_symtab (minimal_symbol_reader &reader, includes_allocated = 30; includes_used = 0; - psymtab_include_list = (const char **) alloca (includes_allocated * - sizeof (const char *)); + psymtab_include_list + = (const char **) alloca (includes_allocated * sizeof (const char *)); dependencies_allocated = 30; dependencies_used = 0; - dependency_list = - (legacy_psymtab **) alloca (dependencies_allocated * - sizeof (legacy_psymtab *)); + dependency_list = (legacy_psymtab **) alloca (dependencies_allocated + * sizeof (legacy_psymtab *)); /* Init bincl list */ std::vector<struct header_file_location> bincl_storage; @@ -1011,7 +994,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, lowest_text_address = (CORE_ADDR) -1; - symfile_bfd = objfile->obfd.get (); /* For next_text_symbol. */ + symfile_bfd = objfile->obfd.get (); /* For next_text_symbol. */ abfd = objfile->obfd.get (); symbuf_end = symbuf_idx = 0; next_symbol_text_func = dbx_next_symbol_text; @@ -1051,7 +1034,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++) { /* Get the symbol for this run and pull out some info. */ - QUIT; /* Allow this to be interruptable. */ + QUIT; /* Allow this to be interruptable. */ if (symbuf_idx == symbuf_end) fill_symbuf (abfd); bufp = &symbuf[symbuf_idx++]; @@ -1096,15 +1079,15 @@ read_dbx_symtab (minimal_symbol_reader &reader, case N_BSS: case N_BSS | N_EXT: case N_NBBSS | N_EXT: - case N_SETV | N_EXT: /* FIXME, is this in BSS? */ + case N_SETV | N_EXT: /* FIXME, is this in BSS? */ goto record_it; case N_ABS | N_EXT: - record_it: + record_it: namestring = set_namestring (objfile, &nlist); record_minimal_symbol (reader, namestring, nlist.n_value, - nlist.n_type, objfile); /* Always */ + nlist.n_type, objfile); /* Always */ continue; /* Standard, local, non-debugger, symbols. */ @@ -1125,16 +1108,18 @@ read_dbx_symtab (minimal_symbol_reader &reader, || (namestring[(nsl = strlen (namestring)) - 1] == 'o' && namestring[nsl - 2] == '.')) { - if (past_first_source_file && pst + if (past_first_source_file + && pst /* The gould NP1 uses low values for .o and -l symbols which are not the address. */ && nlist.n_value >= pst->raw_text_low ()) { - dbx_end_psymtab (objfile, partial_symtabs, - pst, psymtab_include_list, - includes_used, symnum * symbol_size, + dbx_end_psymtab (objfile, partial_symtabs, pst, + psymtab_include_list, includes_used, + symnum * symbol_size, nlist.n_value > pst->raw_text_high () - ? nlist.n_value : pst->raw_text_high (), + ? nlist.n_value + : pst->raw_text_high (), dependency_list, dependencies_used, textlow_not_set); pst = (legacy_psymtab *) 0; @@ -1174,10 +1159,10 @@ read_dbx_symtab (minimal_symbol_reader &reader, set_namestring(). */ past_first_source_file = 1; file_string_table_offset = next_file_string_table_offset; - next_file_string_table_offset = - file_string_table_offset + nlist.n_value; + next_file_string_table_offset + = file_string_table_offset + nlist.n_value; if (next_file_string_table_offset < file_string_table_offset) - error (_("string table offset backs up at %d"), symnum); + error (_ ("string table offset backs up at %d"), symnum); /* FIXME -- replace error() with complaint. */ continue; } @@ -1241,16 +1226,17 @@ read_dbx_symtab (minimal_symbol_reader &reader, past_first_source_file = 1; if (prev_so_symnum != symnum - 1) - { /* Here if prev stab wasn't N_SO. */ + { /* Here if prev stab wasn't N_SO. */ first_so_symnum = symnum; if (pst) { - dbx_end_psymtab (objfile, partial_symtabs, - pst, psymtab_include_list, - includes_used, symnum * symbol_size, + dbx_end_psymtab (objfile, partial_symtabs, pst, + psymtab_include_list, includes_used, + symnum * symbol_size, (valu > pst->raw_text_high () - ? valu : pst->raw_text_high ()), + ? valu + : pst->raw_text_high ()), dependency_list, dependencies_used, prev_textlow_not_set); pst = (legacy_psymtab *) 0; @@ -1281,7 +1267,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, /* Save the directory name SOs locally, then save it into the psymtab when it's created below. */ dirname_nso = namestring; - continue; + continue; } /* Some other compilers (C++ ones in particular) emit useless @@ -1290,9 +1276,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (!pst) { - pst = start_psymtab (partial_symtabs, objfile, - namestring, valu, - first_so_symnum * symbol_size); + pst = start_psymtab (partial_symtabs, objfile, namestring, + valu, first_so_symnum * symbol_size); pst->dirname = dirname_nso; dirname_nso = NULL; } @@ -1323,8 +1308,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, { /* FIXME: we should not get here without a PST to work on. Attempt to recover. */ - complaint (_("N_BINCL %s not in entries for " - "any file, at symtab pos %d"), + complaint (_ ("N_BINCL %s not in entries for " + "any file, at symtab pos %d"), namestring, symnum); continue; } @@ -1384,181 +1369,180 @@ read_dbx_symtab (minimal_symbol_reader &reader, { const char **orig = psymtab_include_list; - psymtab_include_list = (const char **) - alloca ((includes_allocated *= 2) * sizeof (const char *)); + psymtab_include_list + = (const char **) alloca ((includes_allocated *= 2) + * sizeof (const char *)); memcpy (psymtab_include_list, orig, includes_used * sizeof (const char *)); } continue; } - case N_LSYM: /* Typedef or automatic variable. */ - case N_STSYM: /* Data seg var -- static. */ - case N_LCSYM: /* BSS " */ - case N_ROSYM: /* Read-only data seg var -- static. */ - case N_NBSTS: /* Gould nobase. */ - case N_NBLCS: /* symbols. */ + case N_LSYM: /* Typedef or automatic variable. */ + case N_STSYM: /* Data seg var -- static. */ + case N_LCSYM: /* BSS " */ + case N_ROSYM: /* Read-only data seg var -- static. */ + case N_NBSTS: /* Gould nobase. */ + case N_NBLCS: /* symbols. */ case N_FUN: - case N_GSYM: /* Global (extern) variable; can be + case N_GSYM: /* Global (extern) variable; can be data or bss (sigh FIXME). */ /* Following may probably be ignored; I'll leave them here for now (until I do Pascal and Modula 2 extensions). */ - case N_PC: /* I may or may not need this; I + case N_PC: /* I may or may not need this; I suspect not. */ - case N_M2C: /* I suspect that I can ignore this here. */ - case N_SCOPE: /* Same. */ - { - const char *p; + case N_M2C: /* I suspect that I can ignore this here. */ + case N_SCOPE: /* Same. */ + { + const char *p; - namestring = set_namestring (objfile, &nlist); + namestring = set_namestring (objfile, &nlist); - /* See if this is an end of function stab. */ - if (pst && nlist.n_type == N_FUN && *namestring == '\000') - { - CORE_ADDR valu; + /* See if this is an end of function stab. */ + if (pst && nlist.n_type == N_FUN && *namestring == '\000') + { + CORE_ADDR valu; - /* It's value is the size (in bytes) of the function for + /* It's value is the size (in bytes) of the function for function relative stabs, or the address of the function's end for old style stabs. */ - valu = nlist.n_value + last_function_start; - if (pst->raw_text_high () == 0 || valu > pst->raw_text_high ()) - pst->set_text_high (valu); - break; - } + valu = nlist.n_value + last_function_start; + if (pst->raw_text_high () == 0 || valu > pst->raw_text_high ()) + pst->set_text_high (valu); + break; + } - p = (char *) strchr (namestring, ':'); - if (!p) - continue; /* Not a debugging symbol. */ + p = (char *) strchr (namestring, ':'); + if (!p) + continue; /* Not a debugging symbol. */ - sym_len = 0; - sym_name = NULL; /* pacify "gcc -Werror" */ - if (psymtab_language == language_cplus) - { - std::string name (namestring, p - namestring); - gdb::unique_xmalloc_ptr<char> new_name - = cp_canonicalize_string (name.c_str ()); - if (new_name != nullptr) - { - sym_len = strlen (new_name.get ()); - sym_name = obstack_strdup (&objfile->objfile_obstack, - new_name.get ()); - } - } - else if (psymtab_language == language_c) - { - std::string name (namestring, p - namestring); - gdb::unique_xmalloc_ptr<char> new_name - = c_canonicalize_name (name.c_str ()); - if (new_name != nullptr) - { - sym_len = strlen (new_name.get ()); - sym_name = obstack_strdup (&objfile->objfile_obstack, - new_name.get ()); - } - } + sym_len = 0; + sym_name = NULL; /* pacify "gcc -Werror" */ + if (psymtab_language == language_cplus) + { + std::string name (namestring, p - namestring); + gdb::unique_xmalloc_ptr<char> new_name + = cp_canonicalize_string (name.c_str ()); + if (new_name != nullptr) + { + sym_len = strlen (new_name.get ()); + sym_name = obstack_strdup (&objfile->objfile_obstack, + new_name.get ()); + } + } + else if (psymtab_language == language_c) + { + std::string name (namestring, p - namestring); + gdb::unique_xmalloc_ptr<char> new_name + = c_canonicalize_name (name.c_str ()); + if (new_name != nullptr) + { + sym_len = strlen (new_name.get ()); + sym_name = obstack_strdup (&objfile->objfile_obstack, + new_name.get ()); + } + } - if (sym_len == 0) - { - sym_name = namestring; - sym_len = p - namestring; - } + if (sym_len == 0) + { + sym_name = namestring; + sym_len = p - namestring; + } - /* Main processing section for debugging symbols which + /* Main processing section for debugging symbols which the initial read through the symbol tables needs to worry about. If we reach this point, the symbol which we are considering is definitely one we are interested in. p must also contain the (valid) index into the namestring which indicates the debugging type symbol. */ - switch (p[1]) - { - case 'S': - if (pst != nullptr) - pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, - VAR_DOMAIN, LOC_STATIC, - data_sect_index, - psymbol_placement::STATIC, - nlist.n_value, psymtab_language, - partial_symtabs, objfile); - else - complaint (_("static `%*s' appears to be defined " - "outside of all compilation units"), - sym_len, sym_name); - continue; + switch (p[1]) + { + case 'S': + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, + VAR_DOMAIN, LOC_STATIC, data_sect_index, + psymbol_placement::STATIC, nlist.n_value, + psymtab_language, partial_symtabs, + objfile); + else + complaint (_ ("static `%*s' appears to be defined " + "outside of all compilation units"), + sym_len, sym_name); + continue; - case 'G': - /* The addresses in these entries are reported to be + case 'G': + /* The addresses in these entries are reported to be wrong. See the code that reads 'G's for symtabs. */ - if (pst != nullptr) - pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, - VAR_DOMAIN, LOC_STATIC, - data_sect_index, - psymbol_placement::GLOBAL, - nlist.n_value, psymtab_language, - partial_symtabs, objfile); - else - complaint (_("global `%*s' appears to be defined " - "outside of all compilation units"), - sym_len, sym_name); - continue; + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, + VAR_DOMAIN, LOC_STATIC, data_sect_index, + psymbol_placement::GLOBAL, nlist.n_value, + psymtab_language, partial_symtabs, + objfile); + else + complaint (_ ("global `%*s' appears to be defined " + "outside of all compilation units"), + sym_len, sym_name); + continue; - case 'T': - /* When a 'T' entry is defining an anonymous enum, it + case 'T': + /* When a 'T' entry is defining an anonymous enum, it may have a name which is the empty string, or a single space. Since they're not really defining a symbol, those shouldn't go in the partial symbol table. We do pick up the elements of such enums at 'check_enum:', below. */ - if (p >= namestring + 2 - || (p == namestring + 1 - && namestring[0] != ' ')) - { - if (pst != nullptr) - pst->add_psymbol (gdb::string_view (sym_name, sym_len), - true, STRUCT_DOMAIN, LOC_TYPEDEF, -1, - psymbol_placement::STATIC, - 0, psymtab_language, - partial_symtabs, objfile); - else - complaint (_("enum, struct, or union `%*s' appears " - "to be defined outside of all " - "compilation units"), - sym_len, sym_name); - if (p[2] == 't') - { - /* Also a typedef with the same name. */ - if (pst != nullptr) - pst->add_psymbol (gdb::string_view (sym_name, sym_len), - true, VAR_DOMAIN, LOC_TYPEDEF, -1, - psymbol_placement::STATIC, - 0, psymtab_language, - partial_symtabs, objfile); - else - complaint (_("typedef `%*s' appears to be defined " - "outside of all compilation units"), - sym_len, sym_name); - p += 1; - } - } - goto check_enum; + if (p >= namestring + 2 + || (p == namestring + 1 && namestring[0] != ' ')) + { + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), + true, STRUCT_DOMAIN, LOC_TYPEDEF, -1, + psymbol_placement::STATIC, 0, + psymtab_language, partial_symtabs, + objfile); + else + complaint (_ ("enum, struct, or union `%*s' appears " + "to be defined outside of all " + "compilation units"), + sym_len, sym_name); + if (p[2] == 't') + { + /* Also a typedef with the same name. */ + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, + sym_len), + true, VAR_DOMAIN, LOC_TYPEDEF, -1, + psymbol_placement::STATIC, 0, + psymtab_language, partial_symtabs, + objfile); + else + complaint (_ ("typedef `%*s' appears to be defined " + "outside of all compilation units"), + sym_len, sym_name); + p += 1; + } + } + goto check_enum; - case 't': - if (p != namestring) /* a name is there, not just :T... */ - { - if (pst != nullptr) - pst->add_psymbol (gdb::string_view (sym_name, sym_len), - true, VAR_DOMAIN, LOC_TYPEDEF, -1, - psymbol_placement::STATIC, - 0, psymtab_language, - partial_symtabs, objfile); - else - complaint (_("typename `%*s' appears to be defined " - "outside of all compilation units"), - sym_len, sym_name); - } - check_enum: - /* If this is an enumerated type, we need to + case 't': + if (p != namestring) /* a name is there, not just :T... */ + { + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), + true, VAR_DOMAIN, LOC_TYPEDEF, -1, + psymbol_placement::STATIC, 0, + psymtab_language, partial_symtabs, + objfile); + else + complaint (_ ("typename `%*s' appears to be defined " + "outside of all compilation units"), + sym_len, sym_name); + } + check_enum: + /* If this is an enumerated type, we need to add all the enum constants to the partial symbol table. This does not cover enums without names, e.g. "enum {a, b} c;" in C, but fortunately those are @@ -1567,243 +1551,244 @@ read_dbx_symtab (minimal_symbol_reader &reader, to solve this problem, the compiler needs to put out the enum in a nameless type. GCC2 does this. */ - /* We are looking for something of the form + /* We are looking for something of the form <name> ":" ("t" | "T") [<number> "="] "e" {<constant> ":" <value> ","} ";". */ - /* Skip over the colon and the 't' or 'T'. */ - p += 2; - /* This type may be given a number. Also, numbers can come + /* Skip over the colon and the 't' or 'T'. */ + p += 2; + /* This type may be given a number. Also, numbers can come in pairs like (0,26). Skip over it. */ - while ((*p >= '0' && *p <= '9') - || *p == '(' || *p == ',' || *p == ')' - || *p == '=') - p++; + while ((*p >= '0' && *p <= '9') || *p == '(' || *p == ',' + || *p == ')' || *p == '=') + p++; - if (*p++ == 'e') - { - /* The aix4 compiler emits extra crud before the members. */ - if (*p == '-') - { - /* Skip over the type (?). */ - while (*p != ':') + if (*p++ == 'e') + { + /* The aix4 compiler emits extra crud before the members. */ + if (*p == '-') + { + /* Skip over the type (?). */ + while (*p != ':') + p++; + + /* Skip over the colon. */ p++; + } - /* Skip over the colon. */ - p++; - } - - /* We have found an enumerated type. */ - /* According to comments in read_enum_type + /* We have found an enumerated type. */ + /* According to comments in read_enum_type a comma could end it instead of a semicolon. I don't know where that happens. Accept either. */ - while (*p && *p != ';' && *p != ',') - { - const char *q; + while (*p && *p != ';' && *p != ',') + { + const char *q; - /* Check for and handle cretinous dbx symbol name + /* Check for and handle cretinous dbx symbol name continuation! */ - if (*p == '\\' || (*p == '?' && p[1] == '\0')) - p = next_symbol_text (objfile); + if (*p == '\\' || (*p == '?' && p[1] == '\0')) + p = next_symbol_text (objfile); - /* Point to the character after the name + /* Point to the character after the name of the enum constant. */ - for (q = p; *q && *q != ':'; q++) - ; - /* Note that the value doesn't matter for + for (q = p; *q && *q != ':'; q++) + ; + /* Note that the value doesn't matter for enum constants in psymtabs, just in symtabs. */ - if (pst != nullptr) - pst->add_psymbol (gdb::string_view (p, q - p), true, - VAR_DOMAIN, LOC_CONST, -1, - psymbol_placement::STATIC, 0, - psymtab_language, - partial_symtabs, objfile); - else - complaint (_("enum constant `%*s' appears to be defined " - "outside of all compilation units"), - ((int) (q - p)), p); - /* Point past the name. */ - p = q; - /* Skip over the value. */ - while (*p && *p != ',') - p++; - /* Advance past the comma. */ - if (*p) - p++; - } - } - continue; + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (p, q - p), true, + VAR_DOMAIN, LOC_CONST, -1, + psymbol_placement::STATIC, 0, + psymtab_language, partial_symtabs, + objfile); + else + complaint ( + _ ("enum constant `%*s' appears to be defined " + "outside of all compilation units"), + ((int) (q - p)), p); + /* Point past the name. */ + p = q; + /* Skip over the value. */ + while (*p && *p != ',') + p++; + /* Advance past the comma. */ + if (*p) + p++; + } + } + continue; - case 'c': - /* Constant, e.g. from "const" in Pascal. */ - if (pst != nullptr) - pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, - VAR_DOMAIN, LOC_CONST, -1, - psymbol_placement::STATIC, 0, - psymtab_language, - partial_symtabs, objfile); - else - complaint (_("constant `%*s' appears to be defined " - "outside of all compilation units"), - sym_len, sym_name); + case 'c': + /* Constant, e.g. from "const" in Pascal. */ + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, + VAR_DOMAIN, LOC_CONST, -1, + psymbol_placement::STATIC, 0, + psymtab_language, partial_symtabs, + objfile); + else + complaint (_ ("constant `%*s' appears to be defined " + "outside of all compilation units"), + sym_len, sym_name); - continue; + continue; - case 'f': - if (! pst) - { - std::string name (namestring, (p - namestring)); - function_outside_compilation_unit_complaint (name.c_str ()); - } - /* Kludges for ELF/STABS with Sun ACC. */ - last_function_name = namestring; - /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit + case 'f': + if (!pst) + { + std::string name (namestring, (p - namestring)); + function_outside_compilation_unit_complaint ( + name.c_str ()); + } + /* Kludges for ELF/STABS with Sun ACC. */ + last_function_name = namestring; + /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit value for the bottom of the text seg in those cases. */ - if (nlist.n_value == 0 - && gdbarch_sofun_address_maybe_missing (gdbarch)) - { - struct bound_minimal_symbol minsym - = find_stab_function (namestring, - pst ? pst->filename : NULL, - objfile); - if (minsym.minsym != NULL) - nlist.n_value = minsym.minsym->value_raw_address (); - } - if (pst && textlow_not_set - && gdbarch_sofun_address_maybe_missing (gdbarch)) - { - pst->set_text_low (nlist.n_value); - textlow_not_set = 0; - } - /* End kludge. */ + if (nlist.n_value == 0 + && gdbarch_sofun_address_maybe_missing (gdbarch)) + { + struct bound_minimal_symbol minsym + = find_stab_function (namestring, + pst ? pst->filename : NULL, + objfile); + if (minsym.minsym != NULL) + nlist.n_value = minsym.minsym->value_raw_address (); + } + if (pst && textlow_not_set + && gdbarch_sofun_address_maybe_missing (gdbarch)) + { + pst->set_text_low (nlist.n_value); + textlow_not_set = 0; + } + /* End kludge. */ - /* Keep track of the start of the last function so we + /* Keep track of the start of the last function so we can handle end of function symbols. */ - last_function_start = nlist.n_value; + last_function_start = nlist.n_value; - /* In reordered executables this function may lie outside + /* In reordered executables this function may lie outside the bounds created by N_SO symbols. If that's the case use the address of this function as the low bound for the partial symbol table. */ - if (pst - && (textlow_not_set - || (nlist.n_value < pst->raw_text_low () - && (nlist.n_value != 0)))) - { - pst->set_text_low (nlist.n_value); - textlow_not_set = 0; - } - if (pst != nullptr) - pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, - VAR_DOMAIN, LOC_BLOCK, - SECT_OFF_TEXT (objfile), - psymbol_placement::STATIC, - nlist.n_value, psymtab_language, - partial_symtabs, objfile); - continue; + if (pst + && (textlow_not_set + || (nlist.n_value < pst->raw_text_low () + && (nlist.n_value != 0)))) + { + pst->set_text_low (nlist.n_value); + textlow_not_set = 0; + } + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, + VAR_DOMAIN, LOC_BLOCK, + SECT_OFF_TEXT (objfile), + psymbol_placement::STATIC, nlist.n_value, + psymtab_language, partial_symtabs, + objfile); + continue; - /* Global functions were ignored here, but now they + /* Global functions were ignored here, but now they are put into the global psymtab like one would expect. They're also in the minimal symbol table. */ - case 'F': - if (! pst) - { - std::string name (namestring, (p - namestring)); - function_outside_compilation_unit_complaint (name.c_str ()); - } - /* Kludges for ELF/STABS with Sun ACC. */ - last_function_name = namestring; - /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit + case 'F': + if (!pst) + { + std::string name (namestring, (p - namestring)); + function_outside_compilation_unit_complaint ( + name.c_str ()); + } + /* Kludges for ELF/STABS with Sun ACC. */ + last_function_name = namestring; + /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit value for the bottom of the text seg in those cases. */ - if (nlist.n_value == 0 - && gdbarch_sofun_address_maybe_missing (gdbarch)) - { - struct bound_minimal_symbol minsym - = find_stab_function (namestring, - pst ? pst->filename : NULL, - objfile); - if (minsym.minsym != NULL) - nlist.n_value = minsym.minsym->value_raw_address (); - } - if (pst && textlow_not_set - && gdbarch_sofun_address_maybe_missing (gdbarch)) - { - pst->set_text_low (nlist.n_value); - textlow_not_set = 0; - } - /* End kludge. */ + if (nlist.n_value == 0 + && gdbarch_sofun_address_maybe_missing (gdbarch)) + { + struct bound_minimal_symbol minsym + = find_stab_function (namestring, + pst ? pst->filename : NULL, + objfile); + if (minsym.minsym != NULL) + nlist.n_value = minsym.minsym->value_raw_address (); + } + if (pst && textlow_not_set + && gdbarch_sofun_address_maybe_missing (gdbarch)) + { + pst->set_text_low (nlist.n_value); + textlow_not_set = 0; + } + /* End kludge. */ - /* Keep track of the start of the last function so we + /* Keep track of the start of the last function so we can handle end of function symbols. */ - last_function_start = nlist.n_value; + last_function_start = nlist.n_value; - /* In reordered executables this function may lie outside + /* In reordered executables this function may lie outside the bounds created by N_SO symbols. If that's the case use the address of this function as the low bound for the partial symbol table. */ - if (pst - && (textlow_not_set - || (nlist.n_value < pst->raw_text_low () - && (nlist.n_value != 0)))) - { - pst->set_text_low (nlist.n_value); - textlow_not_set = 0; - } - if (pst != nullptr) - pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, - VAR_DOMAIN, LOC_BLOCK, - SECT_OFF_TEXT (objfile), - psymbol_placement::GLOBAL, - nlist.n_value, psymtab_language, - partial_symtabs, objfile); - continue; + if (pst + && (textlow_not_set + || (nlist.n_value < pst->raw_text_low () + && (nlist.n_value != 0)))) + { + pst->set_text_low (nlist.n_value); + textlow_not_set = 0; + } + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, + VAR_DOMAIN, LOC_BLOCK, + SECT_OFF_TEXT (objfile), + psymbol_placement::GLOBAL, nlist.n_value, + psymtab_language, partial_symtabs, + objfile); + continue; - /* Two things show up here (hopefully); static symbols of + /* Two things show up here (hopefully); static symbols of local scope (static used inside braces) or extensions of structure symbols. We can ignore both. */ - case 'V': - case '(': - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case '-': - case '#': /* For symbol identification (used in live ranges). */ - continue; + case 'V': + case '(': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + case '#': /* For symbol identification (used in live ranges). */ + continue; - case ':': - /* It is a C++ nested symbol. We don't need to record it + case ':': + /* It is a C++ nested symbol. We don't need to record it (I don't think); if we try to look up foo::bar::baz, then symbols for the symtab containing foo should get read in, I think. */ - /* Someone says sun cc puts out symbols like + /* Someone says sun cc puts out symbols like /foo/baz/maclib::/usr/local/bin/maclib, which would get here with a symbol type of ':'. */ - continue; + continue; - default: - /* Unexpected symbol descriptor. The second and subsequent stabs + default: + /* Unexpected symbol descriptor. The second and subsequent stabs of a continued stab can show up here. The question is whether they ever can mimic a normal stab--it would be nice if not, since we certainly don't want to spend the time searching to the end of every string looking for a backslash. */ - complaint (_("unknown symbol descriptor `%c'"), - p[1]); + complaint (_ ("unknown symbol descriptor `%c'"), p[1]); - /* Ignore it; perhaps it is an extension that we don't + /* Ignore it; perhaps it is an extension that we don't know about. */ - continue; - } - } + continue; + } + } case N_EXCL: @@ -1812,8 +1797,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, /* Find the corresponding bincl and mark that psymtab on the psymtab dependency list. */ { - legacy_psymtab *needed_pst = - find_corresponding_bincl_psymtab (namestring, nlist.n_value); + legacy_psymtab *needed_pst + = find_corresponding_bincl_psymtab (namestring, nlist.n_value); /* If this include file was defined earlier in this file, leave it alone. */ @@ -1841,19 +1826,15 @@ read_dbx_symtab (minimal_symbol_reader &reader, { legacy_psymtab **orig = dependency_list; - dependency_list = - (legacy_psymtab **) + dependency_list = (legacy_psymtab **) alloca ((dependencies_allocated *= 2) * sizeof (legacy_psymtab *)); memcpy (dependency_list, orig, - (dependencies_used - * sizeof (legacy_psymtab *))); + (dependencies_used * sizeof (legacy_psymtab *))); #ifdef DEBUG_INFO - gdb_printf (gdb_stderr, - "Had to reallocate " - "dependency list.\n"); - gdb_printf (gdb_stderr, - "New dependencies allocated: %d\n", + gdb_printf (gdb_stderr, "Had to reallocate " + "dependency list.\n"); + gdb_printf (gdb_stderr, "New dependencies allocated: %d\n", dependencies_allocated); #endif } @@ -1870,9 +1851,9 @@ read_dbx_symtab (minimal_symbol_reader &reader, { dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, - symnum * symbol_size, - (CORE_ADDR) 0, dependency_list, - dependencies_used, textlow_not_set); + symnum * symbol_size, (CORE_ADDR) 0, + dependency_list, dependencies_used, + textlow_not_set); pst = (legacy_psymtab *) 0; includes_used = 0; dependencies_used = 0; @@ -1888,12 +1869,12 @@ read_dbx_symtab (minimal_symbol_reader &reader, case N_EINCL: case N_DSLINE: case N_BSLINE: - case N_SSYM: /* Claim: Structure or union element. + case N_SSYM: /* Claim: Structure or union element. Hopefully, I can ignore this. */ - case N_ENTRY: /* Alternate entry point; can ignore. */ - case N_MAIN: /* Can definitely ignore this. */ - case N_CATCH: /* These are GNU C++ extensions */ - case N_EHDECL: /* that can safely be ignored here. */ + case N_ENTRY: /* Alternate entry point; can ignore. */ + case N_MAIN: /* Can definitely ignore this. */ + case N_CATCH: /* These are GNU C++ extensions */ + case N_EHDECL: /* that can safely be ignored here. */ case N_LENG: case N_BCOMM: case N_ECOMM: @@ -1905,11 +1886,11 @@ read_dbx_symtab (minimal_symbol_reader &reader, case N_BNSYM: case N_ENSYM: case N_LBRAC: - case N_NSYMS: /* Ultrix 4.0: symbol count */ - case N_DEFD: /* GNU Modula-2 */ - case N_ALIAS: /* SunPro F77: alias name, ignore for now. */ + case N_NSYMS: /* Ultrix 4.0: symbol count */ + case N_DEFD: /* GNU Modula-2 */ + case N_ALIAS: /* SunPro F77: alias name, ignore for now. */ - case N_OBJ: /* Useless types from Solaris. */ + case N_OBJ: /* Useless types from Solaris. */ case N_OPT: case N_PATCH: /* These symbols aren't interesting; don't worry about them. */ @@ -1928,17 +1909,16 @@ read_dbx_symtab (minimal_symbol_reader &reader, { /* Don't set high text address of PST lower than it already is. */ - CORE_ADDR text_end = - (lowest_text_address == (CORE_ADDR) -1 - ? text_addr - : lowest_text_address) - + text_size; - - dbx_end_psymtab (objfile, partial_symtabs, - pst, psymtab_include_list, includes_used, - symnum * symbol_size, + CORE_ADDR text_end + = (lowest_text_address == (CORE_ADDR) -1 ? text_addr + : lowest_text_address) + + text_size; + + dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, + includes_used, symnum * symbol_size, (text_end > pst->raw_text_high () - ? text_end : pst->raw_text_high ()), + ? text_end + : pst->raw_text_high ()), dependency_list, dependencies_used, textlow_not_set); } } @@ -1957,8 +1937,8 @@ start_psymtab (psymtab_storage *partial_symtabs, struct objfile *objfile, legacy_psymtab *result = new legacy_psymtab (filename, partial_symtabs, objfile->per_bfd, textlow); - result->read_symtab_private = - XOBNEW (&objfile->objfile_obstack, struct symloc); + result->read_symtab_private + = XOBNEW (&objfile->objfile_obstack, struct symloc); LDSYMOFF (result) = ldsymoff; result->legacy_read_symtab = dbx_read_symtab; result->legacy_expand_psymtab = dbx_expand_psymtab; @@ -1981,12 +1961,10 @@ start_psymtab (psymtab_storage *partial_symtabs, struct objfile *objfile, legacy_psymtab * dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, - legacy_psymtab *pst, - const char **include_list, int num_includes, - int capping_symbol_offset, CORE_ADDR capping_text, - legacy_psymtab **dependency_list, - int number_dependencies, - int textlow_not_set) + legacy_psymtab *pst, const char **include_list, + int num_includes, int capping_symbol_offset, + CORE_ADDR capping_text, legacy_psymtab **dependency_list, + int number_dependencies, int textlow_not_set) { int i; struct gdbarch *gdbarch = objfile->arch (); @@ -2077,18 +2055,17 @@ dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, for (i = 0; i < num_includes; i++) { - legacy_psymtab *subpst = - new legacy_psymtab (include_list[i], partial_symtabs, objfile->per_bfd); + legacy_psymtab *subpst + = new legacy_psymtab (include_list[i], partial_symtabs, + objfile->per_bfd); - subpst->read_symtab_private = - XOBNEW (&objfile->objfile_obstack, struct symloc); - LDSYMOFF (subpst) = - LDSYMLEN (subpst) = 0; + subpst->read_symtab_private + = XOBNEW (&objfile->objfile_obstack, struct symloc); + LDSYMOFF (subpst) = LDSYMLEN (subpst) = 0; /* We could save slight bits of space by only making one of these, shared by the entire set of include files. FIXME-someday. */ - subpst->dependencies = - partial_symtabs->allocate_dependencies (1); + subpst->dependencies = partial_symtabs->allocate_dependencies (1); subpst->dependencies[0] = pst; subpst->number_of_dependencies = 1; @@ -2096,9 +2073,7 @@ dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, subpst->legacy_expand_psymtab = pst->legacy_expand_psymtab; } - if (num_includes == 0 - && number_dependencies == 0 - && pst->empty () + if (num_includes == 0 && number_dependencies == 0 && pst->empty () && has_line_numbers == 0) { /* Throw away this psymtab, it's empty. */ @@ -2115,7 +2090,7 @@ dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, } return pst; } - + static void dbx_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile) { @@ -2124,7 +2099,7 @@ dbx_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile) /* Read in all partial symtabs on which this one is dependent. */ pst->expand_dependencies (objfile); - if (LDSYMLEN (pst)) /* Otherwise it's a dummy. */ + if (LDSYMLEN (pst)) /* Otherwise it's a dummy. */ { /* Init stuff necessary for reading in symbols */ stabsread_init (); @@ -2184,10 +2159,10 @@ read_ofile_symtab (struct objfile *objfile, legacy_psymtab *pst) unsigned char type; unsigned max_symnum; bfd *abfd; - int sym_offset; /* Offset to start of symbols to read */ - int sym_size; /* Size of symbols to read */ - CORE_ADDR text_offset; /* Start of text segment for symbols */ - int text_size; /* Size of text segment for symbols */ + int sym_offset; /* Offset to start of symbols to read */ + int sym_size; /* Size of symbols to read */ + CORE_ADDR text_offset; /* Start of text segment for symbols */ + int text_size; /* Size of text segment for symbols */ sym_offset = LDSYMOFF (pst); sym_size = LDSYMLEN (pst); @@ -2201,7 +2176,8 @@ read_ofile_symtab (struct objfile *objfile, legacy_psymtab *pst) set_last_source_file (NULL); abfd = objfile->obfd.get (); - symfile_bfd = objfile->obfd.get (); /* Implicit param to next_text_symbol. */ + symfile_bfd + = objfile->obfd.get (); /* Implicit param to next_text_symbol. */ symbuf_end = symbuf_idx = 0; symbuf_read = 0; symbuf_left = sym_offset + sym_size; @@ -2250,15 +2226,13 @@ read_ofile_symtab (struct objfile *objfile, legacy_psymtab *pst) fill_symbuf (abfd); bufp = &symbuf[symbuf_idx]; if (bfd_h_get_8 (abfd, bufp->e_type) != N_SO) - error (_("First symbol in segment of executable not a source symbol")); + error (_ ("First symbol in segment of executable not a source symbol")); max_symnum = sym_size / symbol_size; - for (symnum = 0; - symnum < max_symnum; - symnum++) + for (symnum = 0; symnum < max_symnum; symnum++) { - QUIT; /* Allow this to be interruptable. */ + QUIT; /* Allow this to be interruptable. */ if (symbuf_idx == symbuf_end) fill_symbuf (abfd); bufp = &symbuf[symbuf_idx++]; @@ -2274,7 +2248,7 @@ read_ofile_symtab (struct objfile *objfile, legacy_psymtab *pst) if (sizeof (nlist.n_value) > 4 /* We are a 64-bit debugger debugging a 32-bit program. */ && (type == N_LSYM || type == N_PSYM)) - /* We have to be careful with the n_value in the case of N_LSYM + /* We have to be careful with the n_value in the case of N_LSYM and N_PSYM entries, because they are signed offsets from frame pointer, but we actually read them as unsigned 32-bit values. This is not a problem for 32-bit debuggers, for which negative @@ -2284,9 +2258,8 @@ read_ofile_symtab (struct objfile *objfile, legacy_psymtab *pst) or we'll end up interpreting negative values as very large positive offsets. */ nlist.n_value = (nlist.n_value ^ 0x80000000) - 0x80000000; - process_one_symbol (type, nlist.n_desc, nlist.n_value, - namestring, section_offsets, objfile, - PST_LANGUAGE (pst)); + process_one_symbol (type, nlist.n_desc, nlist.n_value, namestring, + section_offsets, objfile, PST_LANGUAGE (pst)); } /* We skip checking for a new .o or -l file; that should never happen in this routine. */ @@ -2337,15 +2310,13 @@ read_ofile_symtab (struct objfile *objfile, legacy_psymtab *pst) dbxread_objfile = NULL; } - /* Record the namespace that the function defined by SYMBOL was defined in, if necessary. BLOCK is the associated block; use OBSTACK for allocation. */ static void -cp_set_block_scope (const struct symbol *symbol, - struct block *block, +cp_set_block_scope (const struct symbol *symbol, struct block *block, struct obstack *obstack) { if (symbol->demangled_name () != NULL) @@ -2461,8 +2432,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, cstk = pop_context (); /* Make a block for the local symbols within. */ - block = finish_block (cstk.name, - cstk.old_blocks, NULL, + block = finish_block (cstk.name, cstk.old_blocks, NULL, cstk.start_addr, cstk.start_addr + valu); /* For C++, set the block's scope. */ @@ -2525,8 +2495,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, 2000 would output N_LSYM entries after N_LBRAC entries. As a consequence, these symbols are simply discarded. Complain if this is the case. */ - complaint (_("misplaced N_LBRAC entry; discarding local " - "symbols which have no enclosing block")); + complaint (_ ("misplaced N_LBRAC entry; discarding local " + "symbols which have no enclosing block")); } *get_local_symbols () = cstk.locals; @@ -2545,12 +2515,11 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, ??? Which compilers? Is this ever harmful?. */ if (cstk.start_addr > valu) { - complaint (_("block start larger than block end")); + complaint (_ ("block start larger than block end")); cstk.start_addr = valu; } /* Make a block for the local symbols within. */ - finish_block (0, cstk.old_blocks, NULL, - cstk.start_addr, valu); + finish_block (0, cstk.old_blocks, NULL, cstk.start_addr, valu); } } else @@ -2591,7 +2560,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, if (previous_stab_code == (unsigned char) N_SO) { patch_subfile_names (get_current_subfile (), name); - break; /* Ignore repeated SOs. */ + break; /* Ignore repeated SOs. */ } end_compunit_symtab (valu); end_stabs (); @@ -2658,8 +2627,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, if (within_function && sline_found_in_function == 0) { - CORE_ADDR addr = processing_gcc_compilation == 2 ? - last_function_start : valu; + CORE_ADDR addr + = processing_gcc_compilation == 2 ? last_function_start : valu; record_line (get_current_subfile (), desc, gdbarch_addr_bits_remove (gdbarch, addr)); @@ -2682,9 +2651,9 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, offset added to their value; then we process symbol definitions in the name. */ - case N_STSYM: /* Static symbol in data segment. */ - case N_LCSYM: /* Static symbol in BSS segment. */ - case N_ROSYM: /* Static symbol in read-only data segment. */ + case N_STSYM: /* Static symbol in data segment. */ + case N_LCSYM: /* Static symbol in BSS segment. */ + case N_ROSYM: /* Static symbol in read-only data segment. */ /* HORRID HACK DEPT. However, it's Sun's furgin' fault. Solaris 2's stabs-in-elf makes *most* symbols relative but leaves a few absolute (at least for Solaris 2.1 and version @@ -2731,29 +2700,29 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, case N_ROSYM: goto case_N_ROSYM; default: - internal_error (_("failed internal consistency check")); + internal_error (_ ("failed internal consistency check")); } } - case_N_STSYM: /* Static symbol in data segment. */ - case N_DSLINE: /* Source line number, data segment. */ + case_N_STSYM: /* Static symbol in data segment. */ + case N_DSLINE: /* Source line number, data segment. */ section_index = SECT_OFF_DATA (objfile); valu += section_offsets[SECT_OFF_DATA (objfile)]; goto define_a_symbol; - case_N_LCSYM: /* Static symbol in BSS segment. */ - case N_BSLINE: /* Source line number, BSS segment. */ + case_N_LCSYM: /* Static symbol in BSS segment. */ + case N_BSLINE: /* Source line number, BSS segment. */ /* N_BROWS: overlaps with N_BSLINE. */ section_index = SECT_OFF_BSS (objfile); valu += section_offsets[SECT_OFF_BSS (objfile)]; goto define_a_symbol; - case_N_ROSYM: /* Static symbol in read-only data segment. */ + case_N_ROSYM: /* Static symbol in read-only data segment. */ section_index = SECT_OFF_RODATA (objfile); valu += section_offsets[SECT_OFF_RODATA (objfile)]; goto define_a_symbol; - case N_ENTRY: /* Alternate entry point. */ + case N_ENTRY: /* Alternate entry point. */ /* Relocate for dynamic loading. */ section_index = SECT_OFF_TEXT (objfile); valu += section_offsets[SECT_OFF_TEXT (objfile)]; @@ -2763,14 +2732,14 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, Handle them in a "default" way, but complain to people who care. */ default: - case N_CATCH: /* Exception handler catcher. */ - case N_EHDECL: /* Exception handler name. */ - case N_PC: /* Global symbol in Pascal. */ - case N_M2C: /* Modula-2 compilation unit. */ + case N_CATCH: /* Exception handler catcher. */ + case N_EHDECL: /* Exception handler name. */ + case N_PC: /* Global symbol in Pascal. */ + case N_M2C: /* Modula-2 compilation unit. */ /* N_MOD2: overlaps with N_EHDECL. */ - case N_SCOPE: /* Modula-2 scope information. */ - case N_ECOML: /* End common (local name). */ - case N_NBTEXT: /* Gould Non-Base-Register symbols??? */ + case N_SCOPE: /* Modula-2 scope information. */ + case N_ECOML: /* End common (local name). */ + case N_NBTEXT: /* Gould Non-Base-Register symbols??? */ case N_NBDATA: case N_NBBSS: case N_NBSTS: @@ -2781,15 +2750,15 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, define_a_symbol: /* These symbol types don't need the address field relocated, since it is either unused, or is absolute. */ - case N_GSYM: /* Global variable. */ - case N_NSYMS: /* Number of symbols (Ultrix). */ - case N_NOMAP: /* No map? (Ultrix). */ - case N_RSYM: /* Register variable. */ - case N_DEFD: /* Modula-2 GNU module dependency. */ - case N_SSYM: /* Struct or union element. */ - case N_LSYM: /* Local symbol in stack. */ - case N_PSYM: /* Parameter variable. */ - case N_LENG: /* Length of preceding symbol type. */ + case N_GSYM: /* Global variable. */ + case N_NSYMS: /* Number of symbols (Ultrix). */ + case N_NOMAP: /* No map? (Ultrix). */ + case N_RSYM: /* Register variable. */ + case N_DEFD: /* Modula-2 GNU module dependency. */ + case N_SSYM: /* Struct or union element. */ + case N_LSYM: /* Local symbol in stack. */ + case N_PSYM: /* Parameter variable. */ + case N_LENG: /* Length of preceding symbol type. */ if (name) { int deftype; @@ -2824,7 +2793,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, if (get_context_stack_depth () > 1) { - complaint (_("unmatched N_LBRAC before symtab pos %d"), + complaint (_ ("unmatched N_LBRAC before symtab pos %d"), symnum); break; } @@ -2835,8 +2804,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, cstk = pop_context (); /* Make a block for the local symbols within. */ - block = finish_block (cstk.name, - cstk.old_blocks, NULL, + block = finish_block (cstk.name, cstk.old_blocks, NULL, cstk.start_addr, valu); /* For C++, set the block's scope. */ @@ -2853,8 +2821,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, default: { - struct symbol *sym = define_symbol (valu, name, desc, type, - objfile); + struct symbol *sym + = define_symbol (valu, name, desc, type, objfile); if (sym != nullptr) sym->set_section_index (section_index); } @@ -2866,7 +2834,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, /* We use N_OPT to carry the gcc2_compiled flag. Sun uses it for a bunch of other flags, too. Someday we may parse their flags; for now we ignore theirs and hope they'll ignore ours. */ - case N_OPT: /* Solaris 2: Compiler options. */ + case N_OPT: /* Solaris 2: Compiler options. */ if (name) { if (strcmp (name, GCC2_COMPILED_FLAG_SYMBOL) == 0) @@ -2878,7 +2846,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, } break; - case N_MAIN: /* Name of main routine. */ + case N_MAIN: /* Name of main routine. */ /* FIXME: If one has a symbol file with N_MAIN and then replaces it with a symbol file with "main" and without N_MAIN. I'm not sure exactly what rule to follow but probably something @@ -2892,13 +2860,13 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, break; /* The following symbol types can be ignored. */ - case N_OBJ: /* Solaris 2: Object file dir and name. */ - case N_PATCH: /* Solaris 2: Patch Run Time Checker. */ + case N_OBJ: /* Solaris 2: Object file dir and name. */ + case N_PATCH: /* Solaris 2: Patch Run Time Checker. */ /* N_UNDF: Solaris 2: File separator mark. */ /* N_UNDF: -- we will never encounter it, since we only process one file's symbols at once. */ - case N_ENDM: /* Solaris 2: End of module. */ - case N_ALIAS: /* SunPro F77: alias name, ignore for now. */ + case N_ENDM: /* Solaris 2: End of module. */ + case N_ALIAS: /* SunPro F77: alias name, ignore for now. */ break; } @@ -2931,7 +2899,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, previous_stab_code = type; } - + /* FIXME: The only difference between this and elfstab_build_psymtabs is the call to install_minimal_symbols for elf, and the support for split sections. If the differences are really that small, the code @@ -2956,8 +2924,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name, adjusted for coff details. */ void -coffstab_build_psymtabs (struct objfile *objfile, - CORE_ADDR textaddr, unsigned int textsize, +coffstab_build_psymtabs (struct objfile *objfile, CORE_ADDR textaddr, + unsigned int textsize, const std::vector<asection *> &stabsects, file_ptr stabstroffset, unsigned int stabstrsize) { @@ -2972,14 +2940,14 @@ coffstab_build_psymtabs (struct objfile *objfile, DBX_TEXT_ADDR (objfile) = textaddr; DBX_TEXT_SIZE (objfile) = textsize; -#define COFF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */ +#define COFF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */ DBX_SYMBOL_SIZE (objfile) = COFF_STABS_SYMBOL_SIZE; DBX_STRINGTAB_SIZE (objfile) = stabstrsize; if (stabstrsize > bfd_get_size (sym_bfd)) - error (_("ridiculous string table size: %d bytes"), stabstrsize); - DBX_STRINGTAB (objfile) = (char *) - obstack_alloc (&objfile->objfile_obstack, stabstrsize + 1); + error (_ ("ridiculous string table size: %d bytes"), stabstrsize); + DBX_STRINGTAB (objfile) + = (char *) obstack_alloc (&objfile->objfile_obstack, stabstrsize + 1); OBJSTAT (objfile, sz_strtab += stabstrsize + 1); /* Now read in the string table in one big gulp. */ @@ -3000,8 +2968,7 @@ coffstab_build_psymtabs (struct objfile *objfile, /* In a coff file, we've already installed the minimal symbols that came from the coff (non-stab) symbol table, so always act like an incremental load here. */ - scoped_restore save_symbuf_sections - = make_scoped_restore (&symbuf_sections); + scoped_restore save_symbuf_sections = make_scoped_restore (&symbuf_sections); if (stabsects.size () == 1) { stabsize = bfd_section_size (stabsects[0]); @@ -3027,7 +2994,7 @@ coffstab_build_psymtabs (struct objfile *objfile, dbx_symfile_read (objfile, 0); } - + /* Scan and build partial symbols for an ELF symbol file. This ELF file has already been processed to get its minimal symbols. @@ -3061,7 +3028,7 @@ elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect, want this. */ find_text_range (sym_bfd, objfile); -#define ELF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */ +#define ELF_STABS_SYMBOL_SIZE 12 /* XXX FIXME XXX */ DBX_SYMBOL_SIZE (objfile) = ELF_STABS_SYMBOL_SIZE; DBX_SYMCOUNT (objfile) = bfd_section_size (stabsect) / DBX_SYMBOL_SIZE (objfile); @@ -3070,9 +3037,9 @@ elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect, DBX_STAB_SECTION (objfile) = stabsect; if (stabstrsize > bfd_get_size (sym_bfd)) - error (_("ridiculous string table size: %d bytes"), stabstrsize); - DBX_STRINGTAB (objfile) = (char *) - obstack_alloc (&objfile->objfile_obstack, stabstrsize + 1); + error (_ ("ridiculous string table size: %d bytes"), stabstrsize); + DBX_STRINGTAB (objfile) + = (char *) obstack_alloc (&objfile->objfile_obstack, stabstrsize + 1); OBJSTAT (objfile, sz_strtab += stabstrsize + 1); /* Now read in the string table in one big gulp. */ @@ -3108,7 +3075,7 @@ elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect, case it does, it will install them itself. */ dbx_symfile_read (objfile, 0); } - + /* Scan and build partial symbols for a file with special sections for stabs and stabstrings. The file has already been processed to get its minimal symbols, and any other symbols that might be necessary to resolve GSYMs. @@ -3143,40 +3110,40 @@ stabsect_build_psymtabs (struct objfile *objfile, char *stab_name, return; if (!stabstrsect) - error (_("stabsect_build_psymtabs: Found stabs (%s), " - "but not string section (%s)"), + error (_ ("stabsect_build_psymtabs: Found stabs (%s), " + "but not string section (%s)"), stab_name, stabstr_name); dbx_objfile_data_key.emplace (objfile); text_sect = bfd_get_section_by_name (sym_bfd, text_name); if (!text_sect) - error (_("Can't find %s section in symbol file"), text_name); + error (_ ("Can't find %s section in symbol file"), text_name); DBX_TEXT_ADDR (objfile) = bfd_section_vma (text_sect); DBX_TEXT_SIZE (objfile) = bfd_section_size (text_sect); DBX_SYMBOL_SIZE (objfile) = sizeof (struct external_nlist); - DBX_SYMCOUNT (objfile) = bfd_section_size (stabsect) - / DBX_SYMBOL_SIZE (objfile); + DBX_SYMCOUNT (objfile) + = bfd_section_size (stabsect) / DBX_SYMBOL_SIZE (objfile); DBX_STRINGTAB_SIZE (objfile) = bfd_section_size (stabstrsect); - DBX_SYMTAB_OFFSET (objfile) = stabsect->filepos; /* XXX - FIXME: POKING + DBX_SYMTAB_OFFSET (objfile) = stabsect->filepos; /* XXX - FIXME: POKING INSIDE BFD DATA STRUCTURES */ if (DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd)) - error (_("ridiculous string table size: %d bytes"), + error (_ ("ridiculous string table size: %d bytes"), DBX_STRINGTAB_SIZE (objfile)); - DBX_STRINGTAB (objfile) = (char *) - obstack_alloc (&objfile->objfile_obstack, - DBX_STRINGTAB_SIZE (objfile) + 1); + DBX_STRINGTAB (objfile) + = (char *) obstack_alloc (&objfile->objfile_obstack, + DBX_STRINGTAB_SIZE (objfile) + 1); OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile) + 1); /* Now read in the string table in one big gulp. */ - val = bfd_get_section_contents (sym_bfd, /* bfd */ - stabstrsect, /* bfd section */ + val = bfd_get_section_contents (sym_bfd, /* bfd */ + stabstrsect, /* bfd section */ DBX_STRINGTAB (objfile), /* input buffer */ - 0, /* offset into section */ + 0, /* offset into section */ DBX_STRINGTAB_SIZE (objfile)); /* amount to read */ @@ -3192,21 +3159,21 @@ stabsect_build_psymtabs (struct objfile *objfile, char *stab_name, processing_acc_compilation = 1; dbx_symfile_read (objfile, 0); } - -static const struct sym_fns aout_sym_fns = -{ - dbx_new_init, /* init anything gbl to entire symtab */ - dbx_symfile_init, /* read initial info, setup for sym_read() */ - dbx_symfile_read, /* read a symbol file into symtab */ - dbx_symfile_finish, /* finished with file, cleanup */ - default_symfile_offsets, /* parse user's offsets to internal form */ - default_symfile_segments, /* Get segment information from a file. */ + +static const struct sym_fns aout_sym_fns = { + dbx_new_init, /* init anything gbl to entire symtab */ + dbx_symfile_init, /* read initial info, setup for sym_read() */ + dbx_symfile_read, /* read a symbol file into symtab */ + dbx_symfile_finish, /* finished with file, cleanup */ + default_symfile_offsets, /* parse user's offsets to internal form */ + default_symfile_segments, /* Get segment information from a file. */ NULL, - default_symfile_relocate, /* Relocate a debug section. */ - NULL, /* sym_probe_fns */ + default_symfile_relocate, /* Relocate a debug section. */ + NULL, /* sym_probe_fns */ }; void _initialize_dbxread (); + void _initialize_dbxread () { |