Index: gdb/dbxread.c |
diff --git a/gdb/dbxread.c b/gdb/dbxread.c |
index 2d47407da31385beb8db0ae6db24913ac9a4300c..a810f42bab0033b7d23631e420b315ffddcf15d3 100644 |
--- a/gdb/dbxread.c |
+++ b/gdb/dbxread.c |
@@ -1,5 +1,5 @@ |
/* Read dbx symbol tables and convert to internal format, for GDB. |
- Copyright (C) 1986-2004, 2008-2012 Free Software Foundation, Inc. |
+ Copyright (C) 1986-2013 Free Software Foundation, Inc. |
This file is part of GDB. |
@@ -31,7 +31,7 @@ |
for real. dbx_psymtab_to_symtab() is the function that does this */ |
#include "defs.h" |
-#include "gdb_string.h" |
+#include <string.h> |
#if defined(__CYGNUSCLIB__) |
#include <sys/types.h> |
@@ -39,7 +39,7 @@ |
#endif |
#include "gdb_obstack.h" |
-#include "gdb_stat.h" |
+#include <sys/stat.h> |
#include "symtab.h" |
#include "breakpoint.h" |
#include "target.h" |
@@ -55,15 +55,20 @@ |
#include "cp-abi.h" |
#include "cp-support.h" |
#include "psympriv.h" |
+#include "block.h" |
#include "gdb_assert.h" |
-#include "gdb_string.h" |
+#include <string.h> |
#include "aout/aout64.h" |
#include "aout/stab_gnu.h" /* We always use GNU stabs, not |
native, now. */ |
+/* Key for dbx-associated data. */ |
+ |
+const struct objfile_data *dbx_objfile_data_key; |
+ |
/* We put a pointer to this structure in the read_symtab_private field |
of the psymtab. */ |
@@ -255,11 +260,12 @@ static int bincls_allocated; |
extern void _initialize_dbxread (void); |
-static void read_ofile_symtab (struct partial_symtab *); |
+static void read_ofile_symtab (struct objfile *, struct partial_symtab *); |
-static void dbx_psymtab_to_symtab (struct partial_symtab *); |
+static void dbx_read_symtab (struct partial_symtab *self, |
+ struct objfile *objfile); |
-static void dbx_psymtab_to_symtab_1 (struct partial_symtab *); |
+static void dbx_psymtab_to_symtab_1 (struct objfile *, struct partial_symtab *); |
static void read_dbx_dynamic_symtab (struct objfile *objfile); |
@@ -285,7 +291,8 @@ static void dbx_symfile_read (struct objfile *, int); |
static void dbx_symfile_finish (struct objfile *); |
-static void record_minimal_symbol (char *, CORE_ADDR, int, struct objfile *); |
+static void record_minimal_symbol (const char *, CORE_ADDR, int, |
+ struct objfile *); |
static void add_new_header_file (char *, int); |
@@ -429,40 +436,34 @@ explicit_lookup_type (int real_filenum, int index) |
#endif |
static void |
-record_minimal_symbol (char *name, CORE_ADDR address, int type, |
+record_minimal_symbol (const char *name, CORE_ADDR address, int type, |
struct objfile *objfile) |
{ |
enum minimal_symbol_type ms_type; |
int section; |
- asection *bfd_section; |
switch (type) |
{ |
case N_TEXT | N_EXT: |
ms_type = mst_text; |
section = SECT_OFF_TEXT (objfile); |
- bfd_section = DBX_TEXT_SECTION (objfile); |
break; |
case N_DATA | N_EXT: |
ms_type = mst_data; |
section = SECT_OFF_DATA (objfile); |
- bfd_section = DBX_DATA_SECTION (objfile); |
break; |
case N_BSS | N_EXT: |
ms_type = mst_bss; |
section = SECT_OFF_BSS (objfile); |
- bfd_section = DBX_BSS_SECTION (objfile); |
break; |
case N_ABS | N_EXT: |
ms_type = mst_abs; |
section = -1; |
- bfd_section = NULL; |
break; |
#ifdef N_SETV |
case N_SETV | N_EXT: |
ms_type = mst_data; |
section = SECT_OFF_DATA (objfile); |
- bfd_section = DBX_DATA_SECTION (objfile); |
break; |
case N_SETV: |
/* I don't think this type actually exists; since a N_SETV is the result |
@@ -470,7 +471,6 @@ record_minimal_symbol (char *name, CORE_ADDR address, int type, |
file local. */ |
ms_type = mst_file_data; |
section = SECT_OFF_DATA (objfile); |
- bfd_section = DBX_DATA_SECTION (objfile); |
break; |
#endif |
case N_TEXT: |
@@ -479,7 +479,6 @@ record_minimal_symbol (char *name, CORE_ADDR address, int type, |
case N_FN_SEQ: |
ms_type = mst_file_text; |
section = SECT_OFF_TEXT (objfile); |
- bfd_section = DBX_TEXT_SECTION (objfile); |
break; |
case N_DATA: |
ms_type = mst_file_data; |
@@ -493,7 +492,7 @@ record_minimal_symbol (char *name, CORE_ADDR address, int type, |
/* Same with virtual function tables, both global and static. */ |
{ |
- char *tempstring = name; |
+ const char *tempstring = name; |
if (tempstring[0] == bfd_get_symbol_leading_char (objfile->obfd)) |
++tempstring; |
@@ -501,17 +500,14 @@ record_minimal_symbol (char *name, CORE_ADDR address, int type, |
ms_type = mst_data; |
} |
section = SECT_OFF_DATA (objfile); |
- bfd_section = DBX_DATA_SECTION (objfile); |
break; |
case N_BSS: |
ms_type = mst_file_bss; |
section = SECT_OFF_BSS (objfile); |
- bfd_section = DBX_BSS_SECTION (objfile); |
break; |
default: |
ms_type = mst_unknown; |
section = -1; |
- bfd_section = NULL; |
break; |
} |
@@ -520,7 +516,7 @@ record_minimal_symbol (char *name, CORE_ADDR address, int type, |
lowest_text_address = address; |
prim_record_minimal_symbol_and_info |
- (name, address, ms_type, section, bfd_section, objfile); |
+ (name, address, ms_type, section, objfile); |
} |
/* Scan and build partial symbols for a symbol file. |
@@ -557,7 +553,7 @@ dbx_symfile_read (struct objfile *objfile, int symfile_flags) |
val = bfd_seek (sym_bfd, DBX_SYMTAB_OFFSET (objfile), SEEK_SET); |
if (val < 0) |
- perror_with_name (objfile->name); |
+ perror_with_name (objfile_name (objfile)); |
/* Size the symbol table. */ |
if (objfile->global_psymbols.size == 0 && objfile->static_psymbols.size == 0) |
@@ -624,12 +620,11 @@ dbx_symfile_init (struct objfile *objfile) |
char *name = bfd_get_filename (sym_bfd); |
asection *text_sect; |
unsigned char size_temp[DBX_STRINGTAB_SIZE_SIZE]; |
+ struct dbx_symfile_info *dbx; |
/* Allocate struct to keep track of the symfile. */ |
- objfile->deprecated_sym_stab_info = (struct dbx_symfile_info *) |
- xmalloc (sizeof (struct dbx_symfile_info)); |
- memset (objfile->deprecated_sym_stab_info, 0, |
- sizeof (struct dbx_symfile_info)); |
+ dbx = XCNEW (struct dbx_symfile_info); |
+ set_objfile_data (objfile, dbx_objfile_data_key, dbx); |
DBX_TEXT_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".text"); |
DBX_DATA_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".data"); |
@@ -737,24 +732,30 @@ dbx_symfile_init (struct objfile *objfile) |
static void |
dbx_symfile_finish (struct objfile *objfile) |
{ |
- if (objfile->deprecated_sym_stab_info != NULL) |
+ free_header_files (); |
+} |
+ |
+static void |
+dbx_free_symfile_info (struct objfile *objfile, void *arg) |
+{ |
+ struct dbx_symfile_info *dbx = arg; |
+ |
+ if (dbx->header_files != NULL) |
{ |
- if (HEADER_FILES (objfile) != NULL) |
- { |
- int i = N_HEADER_FILES (objfile); |
- struct header_file *hfiles = HEADER_FILES (objfile); |
+ int i = dbx->n_header_files; |
+ struct header_file *hfiles = dbx->header_files; |
- while (--i >= 0) |
- { |
- xfree (hfiles[i].name); |
- xfree (hfiles[i].vector); |
- } |
- xfree (hfiles); |
+ while (--i >= 0) |
+ { |
+ xfree (hfiles[i].name); |
+ xfree (hfiles[i].vector); |
} |
- xfree (objfile->deprecated_sym_stab_info); |
+ xfree (hfiles); |
} |
- free_header_files (); |
+ |
+ xfree (dbx); |
} |
+ |
/* Buffer for reading the symbol table entries. */ |
@@ -1001,7 +1002,7 @@ read_dbx_dynamic_symtab (struct objfile *objfile) |
long dynrel_count; |
arelent **dynrels; |
CORE_ADDR sym_value; |
- char *name; |
+ const char *name; |
/* Check that the symbol file has dynamic symbols that we know about. |
bfd_arch_unknown can happen if we are reading a sun3 symbol file |
@@ -1067,7 +1068,7 @@ read_dbx_dynamic_symtab (struct objfile *objfile) |
if (sym->flags & BSF_GLOBAL) |
type |= N_EXT; |
- record_minimal_symbol ((char *) bfd_asymbol_name (sym), sym_value, |
+ record_minimal_symbol (bfd_asymbol_name (sym), sym_value, |
type, objfile); |
} |
} |
@@ -1121,7 +1122,7 @@ read_dbx_dynamic_symtab (struct objfile *objfile) |
continue; |
} |
- name = (char *) bfd_asymbol_name (*rel->sym_ptr_ptr); |
+ name = bfd_asymbol_name (*rel->sym_ptr_ptr); |
prim_record_minimal_symbol (name, address, mst_solib_trampoline, |
objfile); |
} |
@@ -1245,7 +1246,7 @@ read_dbx_symtab (struct objfile *objfile) |
init_bincl_list (20, objfile); |
back_to = make_cleanup_free_bincl_list (objfile); |
- last_source_file = NULL; |
+ set_last_source_file (NULL); |
lowest_text_address = (CORE_ADDR) -1; |
@@ -1349,7 +1350,6 @@ read_dbx_symtab (struct objfile *objfile) |
record_it: |
namestring = set_namestring (objfile, &nlist); |
- bss_ext_symbol: |
record_minimal_symbol (namestring, nlist.n_value, |
nlist.n_type, objfile); /* Always */ |
continue; |
@@ -1379,8 +1379,8 @@ read_dbx_symtab (struct objfile *objfile) |
which are not the address. */ |
&& nlist.n_value >= pst->textlow) |
{ |
- end_psymtab (pst, psymtab_include_list, includes_used, |
- symnum * symbol_size, |
+ end_psymtab (objfile, pst, psymtab_include_list, |
+ includes_used, symnum * symbol_size, |
nlist.n_value > pst->texthigh |
? nlist.n_value : pst->texthigh, |
dependency_list, dependencies_used, |
@@ -1498,8 +1498,8 @@ read_dbx_symtab (struct objfile *objfile) |
if (pst) |
{ |
- end_psymtab (pst, psymtab_include_list, includes_used, |
- symnum * symbol_size, |
+ end_psymtab (objfile, pst, psymtab_include_list, |
+ includes_used, symnum * symbol_size, |
valu > pst->texthigh ? valu : pst->texthigh, |
dependency_list, dependencies_used, |
prev_textlow_not_set); |
@@ -1696,8 +1696,8 @@ read_dbx_symtab (struct objfile *objfile) |
if (new_name != NULL) |
{ |
sym_len = strlen (new_name); |
- sym_name = obsavestring (new_name, sym_len, |
- &objfile->objfile_obstack); |
+ sym_name = obstack_copy0 (&objfile->objfile_obstack, |
+ new_name, sym_len); |
xfree (new_name); |
} |
xfree (name); |
@@ -2109,7 +2109,7 @@ read_dbx_symtab (struct objfile *objfile) |
follows this module. */ |
if (pst && gdbarch_sofun_address_maybe_missing (gdbarch)) |
{ |
- end_psymtab (pst, psymtab_include_list, includes_used, |
+ end_psymtab (objfile, pst, psymtab_include_list, includes_used, |
symnum * symbol_size, |
(CORE_ADDR) 0, dependency_list, |
dependencies_used, textlow_not_set); |
@@ -2172,7 +2172,7 @@ read_dbx_symtab (struct objfile *objfile) |
: lowest_text_address) |
+ text_size; |
- end_psymtab (pst, psymtab_include_list, includes_used, |
+ end_psymtab (objfile, pst, psymtab_include_list, includes_used, |
symnum * symbol_size, |
text_end > pst->texthigh ? text_end : pst->texthigh, |
dependency_list, dependencies_used, textlow_not_set); |
@@ -2200,7 +2200,7 @@ start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow, |
result->read_symtab_private = obstack_alloc (&objfile->objfile_obstack, |
sizeof (struct symloc)); |
LDSYMOFF (result) = ldsymoff; |
- result->read_symtab = dbx_psymtab_to_symtab; |
+ result->read_symtab = dbx_read_symtab; |
SYMBOL_SIZE (result) = symbol_size; |
SYMBOL_OFFSET (result) = symbol_table_offset; |
STRING_OFFSET (result) = string_table_offset; |
@@ -2226,14 +2226,13 @@ start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow, |
FIXME: List variables and peculiarities of same. */ |
struct partial_symtab * |
-end_psymtab (struct partial_symtab *pst, |
+end_psymtab (struct objfile *objfile, struct partial_symtab *pst, |
const char **include_list, int num_includes, |
int capping_symbol_offset, CORE_ADDR capping_text, |
struct partial_symtab **dependency_list, int number_dependencies, |
int textlow_not_set) |
{ |
int i; |
- struct objfile *objfile = pst->objfile; |
struct gdbarch *gdbarch = get_objfile_arch (objfile); |
if (capping_symbol_offset != -1) |
@@ -2368,7 +2367,7 @@ end_psymtab (struct partial_symtab *pst, |
subpst->read_symtab = pst->read_symtab; |
} |
- sort_pst_symbols (pst); |
+ sort_pst_symbols (objfile, pst); |
if (num_includes == 0 |
&& number_dependencies == 0 |
@@ -2384,7 +2383,7 @@ end_psymtab (struct partial_symtab *pst, |
is not empty, but we don't realize that. Fixing that without slowing |
things down might be tricky. */ |
- discard_psymtab (pst); |
+ discard_psymtab (objfile, pst); |
/* Indicate that psymtab was thrown away. */ |
pst = (struct partial_symtab *) NULL; |
@@ -2393,14 +2392,11 @@ end_psymtab (struct partial_symtab *pst, |
} |
static void |
-dbx_psymtab_to_symtab_1 (struct partial_symtab *pst) |
+dbx_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst) |
{ |
struct cleanup *old_chain; |
int i; |
- if (!pst) |
- return; |
- |
if (pst->readin) |
{ |
fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. " |
@@ -2424,7 +2420,7 @@ dbx_psymtab_to_symtab_1 (struct partial_symtab *pst) |
wrap_here (""); /* Flush output. */ |
gdb_flush (gdb_stdout); |
} |
- dbx_psymtab_to_symtab_1 (pst->dependencies[i]); |
+ dbx_psymtab_to_symtab_1 (objfile, pst->dependencies[i]); |
} |
if (LDSYMLEN (pst)) /* Otherwise it's a dummy. */ |
@@ -2437,8 +2433,8 @@ dbx_psymtab_to_symtab_1 (struct partial_symtab *pst) |
symbol_size = SYMBOL_SIZE (pst); |
/* Read in this file's symbols. */ |
- bfd_seek (pst->objfile->obfd, SYMBOL_OFFSET (pst), SEEK_SET); |
- read_ofile_symtab (pst); |
+ bfd_seek (objfile->obfd, SYMBOL_OFFSET (pst), SEEK_SET); |
+ read_ofile_symtab (objfile, pst); |
do_cleanups (old_chain); |
} |
@@ -2447,59 +2443,57 @@ dbx_psymtab_to_symtab_1 (struct partial_symtab *pst) |
} |
/* Read in all of the symbols for a given psymtab for real. |
- Be verbose about it if the user wants that. */ |
+ Be verbose about it if the user wants that. SELF is not NULL. */ |
static void |
-dbx_psymtab_to_symtab (struct partial_symtab *pst) |
+dbx_read_symtab (struct partial_symtab *self, struct objfile *objfile) |
{ |
bfd *sym_bfd; |
- struct cleanup *back_to = NULL; |
- if (!pst) |
- return; |
- |
- if (pst->readin) |
+ if (self->readin) |
{ |
fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. " |
"Shouldn't happen.\n", |
- pst->filename); |
+ self->filename); |
return; |
} |
- if (LDSYMLEN (pst) || pst->number_of_dependencies) |
+ if (LDSYMLEN (self) || self->number_of_dependencies) |
{ |
+ struct cleanup *back_to; |
+ |
/* Print the message now, before reading the string table, |
to avoid disconcerting pauses. */ |
if (info_verbose) |
{ |
- printf_filtered ("Reading in symbols for %s...", pst->filename); |
+ printf_filtered ("Reading in symbols for %s...", self->filename); |
gdb_flush (gdb_stdout); |
} |
- sym_bfd = pst->objfile->obfd; |
+ sym_bfd = objfile->obfd; |
next_symbol_text_func = dbx_next_symbol_text; |
- if (DBX_STAB_SECTION (pst->objfile)) |
+ back_to = make_cleanup (null_cleanup, NULL); |
+ |
+ if (DBX_STAB_SECTION (objfile)) |
{ |
stabs_data |
- = symfile_relocate_debug_section (pst->objfile, |
- DBX_STAB_SECTION (pst->objfile), |
+ = symfile_relocate_debug_section (objfile, |
+ DBX_STAB_SECTION (objfile), |
NULL); |
if (stabs_data) |
- back_to = make_cleanup (free_current_contents, |
- (void *) &stabs_data); |
+ make_cleanup (free_current_contents, (void *) &stabs_data); |
} |
- dbx_psymtab_to_symtab_1 (pst); |
+ dbx_psymtab_to_symtab_1 (objfile, self); |
- if (back_to) |
- do_cleanups (back_to); |
+ do_cleanups (back_to); |
/* Match with global symbols. This only needs to be done once, |
after all of the symtabs and dependencies have been read in. */ |
- scan_file_globals (pst->objfile); |
+ scan_file_globals (objfile); |
/* Finish up the debug error message. */ |
if (info_verbose) |
@@ -2510,7 +2504,7 @@ dbx_psymtab_to_symtab (struct partial_symtab *pst) |
/* Read in a defined section of a specific object file's symbols. */ |
static void |
-read_ofile_symtab (struct partial_symtab *pst) |
+read_ofile_symtab (struct objfile *objfile, struct partial_symtab *pst) |
{ |
char *namestring; |
struct external_nlist *bufp; |
@@ -2518,14 +2512,12 @@ read_ofile_symtab (struct partial_symtab *pst) |
unsigned char type; |
unsigned max_symnum; |
bfd *abfd; |
- struct objfile *objfile; |
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 */ |
struct section_offsets *section_offsets; |
- objfile = pst->objfile; |
sym_offset = LDSYMOFF (pst); |
sym_size = LDSYMLEN (pst); |
text_offset = pst->textlow; |
@@ -2537,10 +2529,9 @@ read_ofile_symtab (struct partial_symtab *pst) |
section_offsets = pst->section_offsets; |
dbxread_objfile = objfile; |
- subfile_stack = NULL; |
stringtab_global = DBX_STRINGTAB (objfile); |
- last_source_file = NULL; |
+ set_last_source_file (NULL); |
abfd = objfile->obfd; |
symfile_bfd = objfile->obfd; /* Implicit param to next_text_symbol. */ |
@@ -2578,21 +2569,6 @@ read_ofile_symtab (struct partial_symtab *pst) |
if (strncmp (tempstring, "__gnu_compiled", 14) == 0) |
processing_gcc_compilation = 2; |
} |
- |
- /* Try to select a C++ demangling based on the compilation unit |
- producer. */ |
- |
-#if 0 |
- /* For now, stay with AUTO_DEMANGLING for g++ output, as we don't |
- know whether it will use the old style or v3 mangling. */ |
- if (processing_gcc_compilation) |
- { |
- if (AUTO_DEMANGLING) |
- { |
- set_demangling_style (GNU_DEMANGLING_STYLE_STRING); |
- } |
- } |
-#endif |
} |
else |
{ |
@@ -2658,15 +2634,6 @@ read_ofile_symtab (struct partial_symtab *pst) |
processing_gcc_compilation = 1; |
else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0) |
processing_gcc_compilation = 2; |
- |
-#if 0 |
- /* For now, stay with AUTO_DEMANGLING for g++ output, as we don't |
- know whether it will use the old style or v3 mangling. */ |
- if (AUTO_DEMANGLING) |
- { |
- set_demangling_style (GNU_DEMANGLING_STYLE_STRING); |
- } |
-#endif |
} |
else if (type & N_EXT || type == (unsigned char) N_TEXT |
|| type == (unsigned char) N_NBTEXT) |
@@ -2705,6 +2672,34 @@ read_ofile_symtab (struct partial_symtab *pst) |
} |
+/* 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, |
+ struct obstack *obstack) |
+{ |
+ if (SYMBOL_DEMANGLED_NAME (symbol) != NULL) |
+ { |
+ /* Try to figure out the appropriate namespace from the |
+ demangled name. */ |
+ |
+ /* FIXME: carlton/2003-04-15: If the function in question is |
+ a method of a class, the name will actually include the |
+ name of the class as well. This should be harmless, but |
+ is a little unfortunate. */ |
+ |
+ const char *name = SYMBOL_DEMANGLED_NAME (symbol); |
+ unsigned int prefix_len = cp_entire_prefix_len (name); |
+ |
+ block_set_scope (block, |
+ obstack_copy0 (obstack, name, prefix_len), |
+ obstack); |
+ } |
+} |
+ |
/* This handles a single symbol from the symbol-file, building symbols |
into a GDB symtab. It takes these arguments and an implicit argument. |
@@ -2722,7 +2717,7 @@ read_ofile_symtab (struct partial_symtab *pst) |
void |
process_one_symbol (int type, int desc, CORE_ADDR valu, char *name, |
- struct section_offsets *section_offsets, |
+ const struct section_offsets *section_offsets, |
struct objfile *objfile) |
{ |
struct gdbarch *gdbarch = get_objfile_arch (objfile); |
@@ -2764,7 +2759,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name, |
/* Something is wrong if we see real data before seeing a source |
file name. */ |
- if (last_source_file == NULL && type != (unsigned char) N_SO) |
+ if (get_last_source_file () == NULL && type != (unsigned char) N_SO) |
{ |
/* Ignore any symbols which appear before an N_SO symbol. |
Currently no one puts symbols there, but we should deal |
@@ -2812,8 +2807,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name, |
/* For C++, set the block's scope. */ |
if (SYMBOL_LANGUAGE (new->name) == language_cplus) |
- cp_set_block_scope (new->name, block, &objfile->objfile_obstack, |
- "", 0); |
+ cp_set_block_scope (new->name, block, &objfile->objfile_obstack); |
/* May be switching to an assembler file which may not be using |
block relative stabs, so reset the offset. */ |
@@ -2827,7 +2821,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name, |
/* Relocate for dynamic loading. */ |
valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)); |
- valu = gdbarch_smash_text_address (gdbarch, valu); |
+ valu = gdbarch_addr_bits_remove (gdbarch, valu); |
last_function_start = valu; |
goto define_a_symbol; |
@@ -2940,7 +2934,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name, |
n_opt_found = 0; |
- if (last_source_file) |
+ if (get_last_source_file ()) |
{ |
/* Check if previous symbol was also an N_SO (with some |
sanity checks). If so, that one was actually the |
@@ -3173,7 +3167,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name, |
&& gdbarch_sofun_address_maybe_missing (gdbarch)) |
{ |
CORE_ADDR minsym_valu = |
- find_stab_function_addr (name, last_source_file, objfile); |
+ find_stab_function_addr (name, get_last_source_file (), |
+ objfile); |
/* The function find_stab_function_addr will return |
0 if the minimal symbol wasn't found. |
@@ -3217,8 +3212,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name, |
/* For C++, set the block's scope. */ |
if (SYMBOL_LANGUAGE (new->name) == language_cplus) |
cp_set_block_scope (new->name, block, |
- &objfile->objfile_obstack, |
- "", 0); |
+ &objfile->objfile_obstack); |
} |
new = push_context (0, valu); |
@@ -3241,15 +3235,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name, |
if (strcmp (name, GCC2_COMPILED_FLAG_SYMBOL) == 0) |
{ |
processing_gcc_compilation = 2; |
-#if 0 /* Works, but is experimental. -fnf */ |
- /* For now, stay with AUTO_DEMANGLING for g++ output, as |
- we don't know whether it will use the old style or v3 |
- mangling. */ |
- if (AUTO_DEMANGLING) |
- { |
- set_demangling_style (GNU_DEMANGLING_STYLE_STRING); |
- } |
-#endif |
} |
else |
n_opt_found = 1; |
@@ -3347,7 +3332,7 @@ coffstab_build_psymtabs (struct objfile *objfile, |
/* There is already a dbx_symfile_info allocated by our caller. |
It might even contain some info from the coff symtab to help us. */ |
- info = objfile->deprecated_sym_stab_info; |
+ info = DBX_SYMFILE_INFO (objfile); |
DBX_TEXT_ADDR (objfile) = textaddr; |
DBX_TEXT_SIZE (objfile) = textsize; |
@@ -3436,7 +3421,7 @@ elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect, |
/* There is already a dbx_symfile_info allocated by our caller. |
It might even contain some info from the ELF symtab to help us. */ |
- info = objfile->deprecated_sym_stab_info; |
+ info = DBX_SYMFILE_INFO (objfile); |
/* Find the first and last text address. dbx_symfile_read seems to |
want this. */ |
@@ -3515,6 +3500,7 @@ stabsect_build_psymtabs (struct objfile *objfile, char *stab_name, |
asection *stabsect; |
asection *stabstrsect; |
asection *text_sect; |
+ struct dbx_symfile_info *dbx; |
stabsect = bfd_get_section_by_name (sym_bfd, stab_name); |
stabstrsect = bfd_get_section_by_name (sym_bfd, stabstr_name); |
@@ -3527,10 +3513,8 @@ stabsect_build_psymtabs (struct objfile *objfile, char *stab_name, |
"but not string section (%s)"), |
stab_name, stabstr_name); |
- objfile->deprecated_sym_stab_info = (struct dbx_symfile_info *) |
- xmalloc (sizeof (struct dbx_symfile_info)); |
- memset (objfile->deprecated_sym_stab_info, 0, |
- sizeof (struct dbx_symfile_info)); |
+ dbx = XCNEW (struct dbx_symfile_info); |
+ set_objfile_data (objfile, dbx_objfile_data_key, dbx); |
text_sect = bfd_get_section_by_name (sym_bfd, text_name); |
if (!text_sect) |
@@ -3579,7 +3563,6 @@ stabsect_build_psymtabs (struct objfile *objfile, char *stab_name, |
static const struct sym_fns aout_sym_fns = |
{ |
- bfd_target_aout_flavour, |
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 */ |
@@ -3596,5 +3579,8 @@ static const struct sym_fns aout_sym_fns = |
void |
_initialize_dbxread (void) |
{ |
- add_symtab_fns (&aout_sym_fns); |
+ add_symtab_fns (bfd_target_aout_flavour, &aout_sym_fns); |
+ |
+ dbx_objfile_data_key |
+ = register_objfile_data_with_cleanup (NULL, dbx_free_symfile_info); |
} |