Record minimal symbols directly in reader.
This patch changes minimal symbol creation in two ways. First, it removes global variables in favor of members of minimal_symbol_reader. Second, it changes functions like prim_record_minimal_symbol to be member functions of minimal_symbol_reader. 2016-10-21 Tom Tromey <tom@tromey.com> * xcoffread.c (record_minimal_symbol, scan_xcoff_symtab): Add "reader" argument. Update. (xcoff_initial_scan): Update. * symfile.h (mdebug_build_psymtabs): Add "reader" argument. * mipsread.c (mipscoff_symfile_read): Update. (read_alphacoff_dynamic_symtab): Add "reader" argument. Update. * minsyms.h (minimal_symbol_reader) <record, record_full>: Declare. <m_msym_bunch, m_msym_bunch_index, m_msym_count>: New members. <record_with_info>: New function, renamed from prim_record_minimal_symbol_and_info. * minsyms.c (msym_bunch, msym_bunch_index, msym_count): Remove globals. (minimal_symbol_reader): Initialize new members. (minimal_symbol_reader::record): Renamed from prim_record_minimal_symbol. (minimal_symbol_reader::record_full): Renamed from prim_record_minimal_symbol_full. (prim_record_minimal_symbol_and_info): Move to minsyms.h; rename. * mdebugread.c (mdebug_build_psymtabs, parse_partial_symbols) (record_minimal_symbol): Add "reader" argument. Update. (elfmdebug_build_psymtabs): Update. * machoread.c (macho_symtab_add_minsym, macho_symtab_read): Add "reader" argument. Update. (macho_symfile_read): Update. * elfread.c (record_minimal_symbol, elf_symtab_read) (elf_rel_plt_read): Add "reader" argument. Update. (elf_read_minimal_symbols): Update. * dbxread.c (record_minimal_symbol, read_dbx_dynamic_symtab) (read_dbx_symtab): Add "reader" argument. Update. (dbx_symfile_read): Update. * coffread.c (record_minimal_symbol, coff_symtab_read): Add "reader" argument. Update. (coff_symfile_read): Update. * coff-pe-read.h (read_pe_exported_syms): Add "reader" argument. * coff-pe-read.c (add_pe_exported_sym, add_pe_forwarded_sym) (read_pe_exported_syms): Add "reader" argument. Update.
This commit is contained in:
parent
d25e871993
commit
8dddcb8f00
|
@ -1,3 +1,43 @@
|
|||
2016-10-21 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* xcoffread.c (record_minimal_symbol, scan_xcoff_symtab): Add
|
||||
"reader" argument. Update.
|
||||
(xcoff_initial_scan): Update.
|
||||
* symfile.h (mdebug_build_psymtabs): Add "reader" argument.
|
||||
* mipsread.c (mipscoff_symfile_read): Update.
|
||||
(read_alphacoff_dynamic_symtab): Add "reader" argument. Update.
|
||||
* minsyms.h (minimal_symbol_reader) <record, record_full>:
|
||||
Declare.
|
||||
<m_msym_bunch, m_msym_bunch_index, m_msym_count>: New members.
|
||||
<record_with_info>: New function, renamed from
|
||||
prim_record_minimal_symbol_and_info.
|
||||
* minsyms.c (msym_bunch, msym_bunch_index, msym_count): Remove
|
||||
globals.
|
||||
(minimal_symbol_reader): Initialize new members.
|
||||
(minimal_symbol_reader::record): Renamed from
|
||||
prim_record_minimal_symbol.
|
||||
(minimal_symbol_reader::record_full): Renamed from
|
||||
prim_record_minimal_symbol_full.
|
||||
(prim_record_minimal_symbol_and_info): Move to minsyms.h; rename.
|
||||
* mdebugread.c (mdebug_build_psymtabs, parse_partial_symbols)
|
||||
(record_minimal_symbol): Add "reader" argument. Update.
|
||||
(elfmdebug_build_psymtabs): Update.
|
||||
* machoread.c (macho_symtab_add_minsym, macho_symtab_read): Add
|
||||
"reader" argument. Update.
|
||||
(macho_symfile_read): Update.
|
||||
* elfread.c (record_minimal_symbol, elf_symtab_read)
|
||||
(elf_rel_plt_read): Add "reader" argument. Update.
|
||||
(elf_read_minimal_symbols): Update.
|
||||
* dbxread.c (record_minimal_symbol, read_dbx_dynamic_symtab)
|
||||
(read_dbx_symtab): Add "reader" argument. Update.
|
||||
(dbx_symfile_read): Update.
|
||||
* coffread.c (record_minimal_symbol, coff_symtab_read): Add
|
||||
"reader" argument. Update.
|
||||
(coff_symfile_read): Update.
|
||||
* coff-pe-read.h (read_pe_exported_syms): Add "reader" argument.
|
||||
* coff-pe-read.c (add_pe_exported_sym, add_pe_forwarded_sym)
|
||||
(read_pe_exported_syms): Add "reader" argument. Update.
|
||||
|
||||
2016-10-21 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* xcoffread.c (xcoff_initial_scan): Update.
|
||||
|
|
|
@ -150,7 +150,8 @@ get_section_vmas (bfd *abfd, asection *sectp, void *context)
|
|||
OBJFILE is the objfile struct of DLL_NAME. */
|
||||
|
||||
static void
|
||||
add_pe_exported_sym (const char *sym_name,
|
||||
add_pe_exported_sym (minimal_symbol_reader &reader,
|
||||
const char *sym_name,
|
||||
unsigned long func_rva,
|
||||
int ordinal,
|
||||
const struct read_pe_section_data *section_data,
|
||||
|
@ -176,13 +177,12 @@ add_pe_exported_sym (const char *sym_name,
|
|||
" for entry \"%s\" in dll \"%s\"\n"),
|
||||
section_data->section_name, sym_name, dll_name);
|
||||
|
||||
prim_record_minimal_symbol_and_info (qualified_name, vma,
|
||||
section_data->ms_type,
|
||||
section_data->index, objfile);
|
||||
reader.record_with_info (qualified_name, vma, section_data->ms_type,
|
||||
section_data->index);
|
||||
|
||||
/* Enter the plain name as well, which might not be unique. */
|
||||
prim_record_minimal_symbol_and_info (bare_name, vma, section_data->ms_type,
|
||||
section_data->index, objfile);
|
||||
reader.record_with_info (bare_name, vma, section_data->ms_type,
|
||||
section_data->index);
|
||||
if (debug_coff_pe_read > 1)
|
||||
fprintf_unfiltered (gdb_stdlog, _("Adding exported symbol \"%s\""
|
||||
" in dll \"%s\"\n"), sym_name, dll_name);
|
||||
|
@ -200,7 +200,8 @@ add_pe_exported_sym (const char *sym_name,
|
|||
OBJFILE is the objfile struct of DLL_NAME. */
|
||||
|
||||
static int
|
||||
add_pe_forwarded_sym (const char *sym_name, const char *forward_dll_name,
|
||||
add_pe_forwarded_sym (minimal_symbol_reader &reader,
|
||||
const char *sym_name, const char *forward_dll_name,
|
||||
const char *forward_func_name, int ordinal,
|
||||
const char *dll_name, struct objfile *objfile)
|
||||
{
|
||||
|
@ -266,12 +267,10 @@ add_pe_forwarded_sym (const char *sym_name, const char *forward_dll_name,
|
|||
code. */
|
||||
baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
|
||||
|
||||
prim_record_minimal_symbol_and_info (qualified_name, vma - baseaddr,
|
||||
msymtype, section, objfile);
|
||||
reader.record_with_info (qualified_name, vma - baseaddr, msymtype, section);
|
||||
|
||||
/* Enter the plain name as well, which might not be unique. */
|
||||
prim_record_minimal_symbol_and_info (bare_name, vma - baseaddr, msymtype,
|
||||
section, objfile);
|
||||
reader.record_with_info (bare_name, vma - baseaddr, msymtype, section);
|
||||
xfree (qualified_name);
|
||||
xfree (bare_name);
|
||||
|
||||
|
@ -331,7 +330,8 @@ pe_as32 (void *ptr)
|
|||
pe_implied_import_dll in pe-dll.c. */
|
||||
|
||||
void
|
||||
read_pe_exported_syms (struct objfile *objfile)
|
||||
read_pe_exported_syms (minimal_symbol_reader &reader,
|
||||
struct objfile *objfile)
|
||||
{
|
||||
bfd *dll = objfile->obfd;
|
||||
unsigned long nbnormal, nbforward;
|
||||
|
@ -580,7 +580,7 @@ read_pe_exported_syms (struct objfile *objfile)
|
|||
forward_dll_name[len] = '\0';
|
||||
forward_func_name = ++sep;
|
||||
}
|
||||
if (add_pe_forwarded_sym (funcname, forward_dll_name,
|
||||
if (add_pe_forwarded_sym (reader, funcname, forward_dll_name,
|
||||
forward_func_name, ordinal,
|
||||
dll_name, objfile) != 0)
|
||||
++nbforward;
|
||||
|
@ -595,7 +595,7 @@ read_pe_exported_syms (struct objfile *objfile)
|
|||
char *sym_name = (char *) (erva + name_rva);
|
||||
|
||||
section_found = 1;
|
||||
add_pe_exported_sym (sym_name, func_rva, ordinal,
|
||||
add_pe_exported_sym (reader, sym_name, func_rva, ordinal,
|
||||
section_data + sectix, dll_name, objfile);
|
||||
++nbnormal;
|
||||
break;
|
||||
|
@ -607,7 +607,7 @@ read_pe_exported_syms (struct objfile *objfile)
|
|||
|
||||
if (name_rva == 0)
|
||||
{
|
||||
add_pe_exported_sym (NULL, func_rva, ordinal,
|
||||
add_pe_exported_sym (reader, NULL, func_rva, ordinal,
|
||||
section_data, dll_name, objfile);
|
||||
++nbnormal;
|
||||
}
|
||||
|
|
|
@ -27,7 +27,8 @@ struct bfd;
|
|||
|
||||
/* Read the export table and convert it to minimal symbol table
|
||||
entries */
|
||||
extern void read_pe_exported_syms (struct objfile *objfile);
|
||||
extern void read_pe_exported_syms (minimal_symbol_reader &reader,
|
||||
struct objfile *objfile);
|
||||
|
||||
/* Extract from ABFD the offset of the .text section.
|
||||
Returns default value 0x1000 if information is not found. */
|
||||
|
|
|
@ -207,7 +207,8 @@ static void read_one_sym (struct coff_symbol *,
|
|||
struct internal_syment *,
|
||||
union internal_auxent *);
|
||||
|
||||
static void coff_symtab_read (long, unsigned int, struct objfile *);
|
||||
static void coff_symtab_read (minimal_symbol_reader &,
|
||||
long, unsigned int, struct objfile *);
|
||||
|
||||
/* We are called once per section from coff_symfile_read. We
|
||||
need to examine each section we are passed, check to see
|
||||
|
@ -461,7 +462,8 @@ is_import_fixup_symbol (struct coff_symbol *cs,
|
|||
}
|
||||
|
||||
static struct minimal_symbol *
|
||||
record_minimal_symbol (struct coff_symbol *cs, CORE_ADDR address,
|
||||
record_minimal_symbol (minimal_symbol_reader &reader,
|
||||
struct coff_symbol *cs, CORE_ADDR address,
|
||||
enum minimal_symbol_type type, int section,
|
||||
struct objfile *objfile)
|
||||
{
|
||||
|
@ -479,8 +481,7 @@ record_minimal_symbol (struct coff_symbol *cs, CORE_ADDR address,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
return prim_record_minimal_symbol_and_info (cs->c_name, address,
|
||||
type, section, objfile);
|
||||
return reader.record_with_info (cs->c_name, address, type, section);
|
||||
}
|
||||
|
||||
/* coff_symfile_init ()
|
||||
|
@ -650,7 +651,7 @@ coff_symfile_read (struct objfile *objfile, int symfile_flags)
|
|||
/* Now that the executable file is positioned at symbol table,
|
||||
process it and define symbols accordingly. */
|
||||
|
||||
coff_symtab_read ((long) symtab_offset, num_symbols, objfile);
|
||||
coff_symtab_read (reader, (long) symtab_offset, num_symbols, objfile);
|
||||
|
||||
/* Install any minimal symbols that have been collected as the
|
||||
current minimal symbols for this objfile. */
|
||||
|
@ -778,7 +779,8 @@ coff_symfile_finish (struct objfile *objfile)
|
|||
We read them one at a time using read_one_sym (). */
|
||||
|
||||
static void
|
||||
coff_symtab_read (long symtab_offset, unsigned int nsyms,
|
||||
coff_symtab_read (minimal_symbol_reader &reader,
|
||||
long symtab_offset, unsigned int nsyms,
|
||||
struct objfile *objfile)
|
||||
{
|
||||
struct gdbarch *gdbarch = get_objfile_arch (objfile);
|
||||
|
@ -876,7 +878,7 @@ coff_symtab_read (long symtab_offset, unsigned int nsyms,
|
|||
int section = cs_to_section (cs, objfile);
|
||||
|
||||
tmpaddr = cs->c_value;
|
||||
record_minimal_symbol (cs, tmpaddr, mst_text,
|
||||
record_minimal_symbol (reader, cs, tmpaddr, mst_text,
|
||||
section, objfile);
|
||||
|
||||
fcn_line_ptr = main_aux.x_sym.x_fcnary.x_fcn.x_lnnoptr;
|
||||
|
@ -1036,7 +1038,7 @@ coff_symtab_read (long symtab_offset, unsigned int nsyms,
|
|||
ms_type = mst_unknown;
|
||||
}
|
||||
|
||||
msym = record_minimal_symbol (cs, tmpaddr, ms_type,
|
||||
msym = record_minimal_symbol (reader, cs, tmpaddr, ms_type,
|
||||
sec, objfile);
|
||||
if (msym)
|
||||
gdbarch_coff_make_msymbol_special (gdbarch,
|
||||
|
@ -1198,7 +1200,7 @@ coff_symtab_read (long symtab_offset, unsigned int nsyms,
|
|||
{
|
||||
/* We've got no debugging symbols, but it's a portable
|
||||
executable, so try to read the export table. */
|
||||
read_pe_exported_syms (objfile);
|
||||
read_pe_exported_syms (reader, objfile);
|
||||
}
|
||||
|
||||
if (get_last_source_file ())
|
||||
|
|
|
@ -262,9 +262,10 @@ static void dbx_read_symtab (struct partial_symtab *self,
|
|||
|
||||
static void dbx_psymtab_to_symtab_1 (struct objfile *, struct partial_symtab *);
|
||||
|
||||
static void read_dbx_dynamic_symtab (struct objfile *objfile);
|
||||
static void read_dbx_dynamic_symtab (minimal_symbol_reader &reader,
|
||||
struct objfile *objfile);
|
||||
|
||||
static void read_dbx_symtab (struct objfile *);
|
||||
static void read_dbx_symtab (minimal_symbol_reader &, struct objfile *);
|
||||
|
||||
static void free_bincl_list (struct objfile *);
|
||||
|
||||
|
@ -286,7 +287,8 @@ static void dbx_symfile_read (struct objfile *, int);
|
|||
|
||||
static void dbx_symfile_finish (struct objfile *);
|
||||
|
||||
static void record_minimal_symbol (const char *, CORE_ADDR, int,
|
||||
static void record_minimal_symbol (minimal_symbol_reader &,
|
||||
const char *, CORE_ADDR, int,
|
||||
struct objfile *);
|
||||
|
||||
static void add_new_header_file (char *, int);
|
||||
|
@ -429,7 +431,8 @@ explicit_lookup_type (int real_filenum, int index)
|
|||
#endif
|
||||
|
||||
static void
|
||||
record_minimal_symbol (const char *name, CORE_ADDR address, int type,
|
||||
record_minimal_symbol (minimal_symbol_reader &reader,
|
||||
const char *name, CORE_ADDR address, int type,
|
||||
struct objfile *objfile)
|
||||
{
|
||||
enum minimal_symbol_type ms_type;
|
||||
|
@ -508,8 +511,7 @@ record_minimal_symbol (const char *name, CORE_ADDR address, int type,
|
|||
&& address < lowest_text_address)
|
||||
lowest_text_address = address;
|
||||
|
||||
prim_record_minimal_symbol_and_info
|
||||
(name, address, ms_type, section, objfile);
|
||||
reader.record_with_info (name, address, ms_type, section);
|
||||
}
|
||||
|
||||
/* Scan and build partial symbols for a symbol file.
|
||||
|
@ -562,11 +564,11 @@ dbx_symfile_read (struct objfile *objfile, int symfile_flags)
|
|||
|
||||
/* Read stabs data from executable file and define symbols. */
|
||||
|
||||
read_dbx_symtab (objfile);
|
||||
read_dbx_symtab (reader, objfile);
|
||||
|
||||
/* Add the dynamic symbols. */
|
||||
|
||||
read_dbx_dynamic_symtab (objfile);
|
||||
read_dbx_dynamic_symtab (reader, objfile);
|
||||
|
||||
/* Install any minimal symbols that have been collected as the current
|
||||
minimal symbols for this objfile. */
|
||||
|
@ -978,7 +980,8 @@ set_namestring (struct objfile *objfile, const struct internal_nlist *nlist)
|
|||
add them to the minimal symbol table. */
|
||||
|
||||
static void
|
||||
read_dbx_dynamic_symtab (struct objfile *objfile)
|
||||
read_dbx_dynamic_symtab (minimal_symbol_reader &reader,
|
||||
struct objfile *objfile)
|
||||
{
|
||||
bfd *abfd = objfile->obfd;
|
||||
struct cleanup *back_to;
|
||||
|
@ -1052,7 +1055,7 @@ read_dbx_dynamic_symtab (struct objfile *objfile)
|
|||
if (sym->flags & BSF_GLOBAL)
|
||||
type |= N_EXT;
|
||||
|
||||
record_minimal_symbol (bfd_asymbol_name (sym), sym_value,
|
||||
record_minimal_symbol (reader, bfd_asymbol_name (sym), sym_value,
|
||||
type, objfile);
|
||||
}
|
||||
}
|
||||
|
@ -1105,8 +1108,7 @@ read_dbx_dynamic_symtab (struct objfile *objfile)
|
|||
}
|
||||
|
||||
name = bfd_asymbol_name (*rel->sym_ptr_ptr);
|
||||
prim_record_minimal_symbol (name, address, mst_solib_trampoline,
|
||||
objfile);
|
||||
reader.record (name, address, mst_solib_trampoline);
|
||||
}
|
||||
|
||||
do_cleanups (back_to);
|
||||
|
@ -1169,7 +1171,7 @@ function_outside_compilation_unit_complaint (const char *arg1)
|
|||
debugging information is available. */
|
||||
|
||||
static void
|
||||
read_dbx_symtab (struct objfile *objfile)
|
||||
read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile)
|
||||
{
|
||||
struct gdbarch *gdbarch = get_objfile_arch (objfile);
|
||||
struct external_nlist *bufp = 0; /* =0 avoids gcc -Wall glitch. */
|
||||
|
@ -1325,7 +1327,7 @@ read_dbx_symtab (struct objfile *objfile)
|
|||
record_it:
|
||||
namestring = set_namestring (objfile, &nlist);
|
||||
|
||||
record_minimal_symbol (namestring, nlist.n_value,
|
||||
record_minimal_symbol (reader, namestring, nlist.n_value,
|
||||
nlist.n_type, objfile); /* Always */
|
||||
continue;
|
||||
|
||||
|
|
|
@ -191,7 +191,8 @@ elf_locate_sections (bfd *ignore_abfd, asection *sectp, void *eip)
|
|||
}
|
||||
|
||||
static struct minimal_symbol *
|
||||
record_minimal_symbol (const char *name, int name_len, int copy_name,
|
||||
record_minimal_symbol (minimal_symbol_reader &reader,
|
||||
const char *name, int name_len, int copy_name,
|
||||
CORE_ADDR address,
|
||||
enum minimal_symbol_type ms_type,
|
||||
asection *bfd_section, struct objfile *objfile)
|
||||
|
@ -202,11 +203,10 @@ record_minimal_symbol (const char *name, int name_len, int copy_name,
|
|||
|| ms_type == mst_text_gnu_ifunc)
|
||||
address = gdbarch_addr_bits_remove (gdbarch, address);
|
||||
|
||||
return prim_record_minimal_symbol_full (name, name_len, copy_name, address,
|
||||
return reader.record_full (name, name_len, copy_name, address,
|
||||
ms_type,
|
||||
gdb_bfd_section_index (objfile->obfd,
|
||||
bfd_section),
|
||||
objfile);
|
||||
bfd_section));
|
||||
}
|
||||
|
||||
/* Read the symbol table of an ELF file.
|
||||
|
@ -226,7 +226,8 @@ record_minimal_symbol (const char *name, int name_len, int copy_name,
|
|||
#define ST_SYNTHETIC 2
|
||||
|
||||
static void
|
||||
elf_symtab_read (struct objfile *objfile, int type,
|
||||
elf_symtab_read (minimal_symbol_reader &reader,
|
||||
struct objfile *objfile, int type,
|
||||
long number_of_symbols, asymbol **symbol_table,
|
||||
int copy_names)
|
||||
{
|
||||
|
@ -318,7 +319,7 @@ elf_symtab_read (struct objfile *objfile, int type,
|
|||
continue;
|
||||
|
||||
msym = record_minimal_symbol
|
||||
(sym->name, strlen (sym->name), copy_names,
|
||||
(reader, sym->name, strlen (sym->name), copy_names,
|
||||
symaddr, mst_solib_trampoline, sect, objfile);
|
||||
if (msym != NULL)
|
||||
{
|
||||
|
@ -458,7 +459,7 @@ elf_symtab_read (struct objfile *objfile, int type,
|
|||
continue; /* Skip this symbol. */
|
||||
}
|
||||
msym = record_minimal_symbol
|
||||
(sym->name, strlen (sym->name), copy_names, symaddr,
|
||||
(reader, sym->name, strlen (sym->name), copy_names, symaddr,
|
||||
ms_type, sym->section, objfile);
|
||||
|
||||
if (msym)
|
||||
|
@ -487,7 +488,7 @@ elf_symtab_read (struct objfile *objfile, int type,
|
|||
{
|
||||
int len = atsign - sym->name;
|
||||
|
||||
record_minimal_symbol (sym->name, len, 1, symaddr,
|
||||
record_minimal_symbol (reader, sym->name, len, 1, symaddr,
|
||||
ms_type, sym->section, objfile);
|
||||
}
|
||||
}
|
||||
|
@ -504,7 +505,7 @@ elf_symtab_read (struct objfile *objfile, int type,
|
|||
{
|
||||
struct minimal_symbol *mtramp;
|
||||
|
||||
mtramp = record_minimal_symbol (sym->name, len - 4, 1,
|
||||
mtramp = record_minimal_symbol (reader, sym->name, len - 4, 1,
|
||||
symaddr,
|
||||
mst_solib_trampoline,
|
||||
sym->section, objfile);
|
||||
|
@ -531,7 +532,8 @@ elf_symtab_read (struct objfile *objfile, int type,
|
|||
DYN_SYMBOL_TABLE is no longer easily available for OBJFILE. */
|
||||
|
||||
static void
|
||||
elf_rel_plt_read (struct objfile *objfile, asymbol **dyn_symbol_table)
|
||||
elf_rel_plt_read (minimal_symbol_reader &reader,
|
||||
struct objfile *objfile, asymbol **dyn_symbol_table)
|
||||
{
|
||||
bfd *obfd = objfile->obfd;
|
||||
const struct elf_backend_data *bed = get_elf_backend_data (obfd);
|
||||
|
@ -608,7 +610,8 @@ elf_rel_plt_read (struct objfile *objfile, asymbol **dyn_symbol_table)
|
|||
memcpy (&string_buffer[name_len], SYMBOL_GOT_PLT_SUFFIX,
|
||||
got_suffix_len + 1);
|
||||
|
||||
msym = record_minimal_symbol (string_buffer, name_len + got_suffix_len,
|
||||
msym = record_minimal_symbol (reader, string_buffer,
|
||||
name_len + got_suffix_len,
|
||||
1, address, mst_slot_got_plt, got_plt,
|
||||
objfile);
|
||||
if (msym)
|
||||
|
@ -1077,7 +1080,7 @@ elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
|
|||
bfd_get_filename (objfile->obfd),
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
|
||||
elf_symtab_read (objfile, ST_REGULAR, symcount, symbol_table, 0);
|
||||
elf_symtab_read (reader, objfile, ST_REGULAR, symcount, symbol_table, 0);
|
||||
}
|
||||
|
||||
/* Add the dynamic symbols. */
|
||||
|
@ -1102,9 +1105,10 @@ elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
|
|||
bfd_get_filename (objfile->obfd),
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
|
||||
elf_symtab_read (objfile, ST_DYNAMIC, dynsymcount, dyn_symbol_table, 0);
|
||||
elf_symtab_read (reader, objfile, ST_DYNAMIC, dynsymcount,
|
||||
dyn_symbol_table, 0);
|
||||
|
||||
elf_rel_plt_read (objfile, dyn_symbol_table);
|
||||
elf_rel_plt_read (reader, objfile, dyn_symbol_table);
|
||||
}
|
||||
|
||||
/* Contrary to binutils --strip-debug/--only-keep-debug the strip command from
|
||||
|
@ -1139,7 +1143,7 @@ elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
|
|||
for (i = 0; i < synthcount; i++)
|
||||
synth_symbol_table[i] = synthsyms + i;
|
||||
make_cleanup (xfree, synth_symbol_table);
|
||||
elf_symtab_read (objfile, ST_SYNTHETIC, synthcount,
|
||||
elf_symtab_read (reader, objfile, ST_SYNTHETIC, synthcount,
|
||||
synth_symbol_table, 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -97,7 +97,8 @@ macho_register_oso (VEC (oso_el) **oso_vector_ptr,
|
|||
/* Add symbol SYM to the minimal symbol table of OBJFILE. */
|
||||
|
||||
static void
|
||||
macho_symtab_add_minsym (struct objfile *objfile, const asymbol *sym)
|
||||
macho_symtab_add_minsym (minimal_symbol_reader &reader,
|
||||
struct objfile *objfile, const asymbol *sym)
|
||||
{
|
||||
if (sym->name == NULL || *sym->name == '\0')
|
||||
{
|
||||
|
@ -147,10 +148,9 @@ macho_symtab_add_minsym (struct objfile *objfile, const asymbol *sym)
|
|||
else
|
||||
return; /* Skip this symbol. */
|
||||
|
||||
prim_record_minimal_symbol_and_info
|
||||
(sym->name, symaddr, ms_type,
|
||||
gdb_bfd_section_index (objfile->obfd, sym->section),
|
||||
objfile);
|
||||
reader.record_with_info (sym->name, symaddr, ms_type,
|
||||
gdb_bfd_section_index (objfile->obfd,
|
||||
sym->section));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -158,7 +158,8 @@ macho_symtab_add_minsym (struct objfile *objfile, const asymbol *sym)
|
|||
NUMBER_OF_SYMBOLS for OBJFILE. Registers OSO filenames found. */
|
||||
|
||||
static void
|
||||
macho_symtab_read (struct objfile *objfile,
|
||||
macho_symtab_read (minimal_symbol_reader &reader,
|
||||
struct objfile *objfile,
|
||||
long number_of_symbols, asymbol **symbol_table,
|
||||
VEC (oso_el) **oso_vector_ptr)
|
||||
{
|
||||
|
@ -227,7 +228,7 @@ macho_symtab_read (struct objfile *objfile,
|
|||
else
|
||||
{
|
||||
/* Non-debugging symbols go to the minimal symbol table. */
|
||||
macho_symtab_add_minsym (objfile, sym);
|
||||
macho_symtab_add_minsym (reader, objfile, sym);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -864,7 +865,8 @@ macho_symfile_read (struct objfile *objfile, int symfile_flags)
|
|||
bfd_get_filename (objfile->obfd),
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
|
||||
macho_symtab_read (objfile, symcount, symbol_table, &oso_vector);
|
||||
macho_symtab_read (reader, objfile, symcount, symbol_table,
|
||||
&oso_vector);
|
||||
|
||||
reader.install ();
|
||||
}
|
||||
|
|
|
@ -222,7 +222,8 @@ static int found_ecoff_debugging_info;
|
|||
static int upgrade_type (int, struct type **, int, union aux_ext *,
|
||||
int, char *);
|
||||
|
||||
static void parse_partial_symbols (struct objfile *);
|
||||
static void parse_partial_symbols (minimal_symbol_reader &,
|
||||
struct objfile *);
|
||||
|
||||
static int has_opaque_xref (FDR *, SYMR *);
|
||||
|
||||
|
@ -336,7 +337,8 @@ fdr_name (FDR *f)
|
|||
different sections are relocated via the SECTION_OFFSETS. */
|
||||
|
||||
void
|
||||
mdebug_build_psymtabs (struct objfile *objfile,
|
||||
mdebug_build_psymtabs (minimal_symbol_reader &reader,
|
||||
struct objfile *objfile,
|
||||
const struct ecoff_debug_swap *swap,
|
||||
struct ecoff_debug_info *info)
|
||||
{
|
||||
|
@ -367,7 +369,7 @@ mdebug_build_psymtabs (struct objfile *objfile,
|
|||
(*swap->swap_fdr_in) (objfile->obfd, fdr_src, fdr_ptr);
|
||||
}
|
||||
|
||||
parse_partial_symbols (objfile);
|
||||
parse_partial_symbols (reader, objfile);
|
||||
|
||||
#if 0
|
||||
/* Check to make sure file was compiled with -g. If not, warn the
|
||||
|
@ -2260,7 +2262,8 @@ function_outside_compilation_unit_complaint (const char *arg1)
|
|||
belongs to, and then records this new minimal symbol. */
|
||||
|
||||
static void
|
||||
record_minimal_symbol (const char *name, const CORE_ADDR address,
|
||||
record_minimal_symbol (minimal_symbol_reader &reader,
|
||||
const char *name, const CORE_ADDR address,
|
||||
enum minimal_symbol_type ms_type, int storage_class,
|
||||
struct objfile *objfile)
|
||||
{
|
||||
|
@ -2316,15 +2319,15 @@ record_minimal_symbol (const char *name, const CORE_ADDR address,
|
|||
section = -1;
|
||||
}
|
||||
|
||||
prim_record_minimal_symbol_and_info (name, address, ms_type,
|
||||
section, objfile);
|
||||
reader.record_with_info (name, address, ms_type, section);
|
||||
}
|
||||
|
||||
/* Master parsing procedure for first-pass reading of file symbols
|
||||
into a partial_symtab. */
|
||||
|
||||
static void
|
||||
parse_partial_symbols (struct objfile *objfile)
|
||||
parse_partial_symbols (minimal_symbol_reader &reader,
|
||||
struct objfile *objfile)
|
||||
{
|
||||
struct gdbarch *gdbarch = get_objfile_arch (objfile);
|
||||
const bfd_size_type external_sym_size = debug_swap->external_sym_size;
|
||||
|
@ -2624,7 +2627,7 @@ parse_partial_symbols (struct objfile *objfile)
|
|||
unknown_ext_complaint (name);
|
||||
}
|
||||
if (!ECOFF_IN_ELF (cur_bfd))
|
||||
record_minimal_symbol (name, svalue, ms_type, ext_in->asym.sc,
|
||||
record_minimal_symbol (reader, name, svalue, ms_type, ext_in->asym.sc,
|
||||
objfile);
|
||||
}
|
||||
|
||||
|
@ -2741,7 +2744,7 @@ parse_partial_symbols (struct objfile *objfile)
|
|||
if (sh.st == stStaticProc)
|
||||
{
|
||||
namestring = debug_info->ss + fh->issBase + sh.iss;
|
||||
record_minimal_symbol (namestring, sh.value,
|
||||
record_minimal_symbol (reader, namestring, sh.value,
|
||||
mst_file_text, sh.sc,
|
||||
objfile);
|
||||
}
|
||||
|
@ -2786,7 +2789,7 @@ parse_partial_symbols (struct objfile *objfile)
|
|||
case scPData:
|
||||
case scXData:
|
||||
namestring = debug_info->ss + fh->issBase + sh.iss;
|
||||
record_minimal_symbol (namestring, sh.value,
|
||||
record_minimal_symbol (reader, namestring, sh.value,
|
||||
mst_file_data, sh.sc,
|
||||
objfile);
|
||||
sh.value += ANOFFSET (objfile->section_offsets,
|
||||
|
@ -2797,7 +2800,7 @@ parse_partial_symbols (struct objfile *objfile)
|
|||
/* FIXME! Shouldn't this use cases for bss,
|
||||
then have the default be abs? */
|
||||
namestring = debug_info->ss + fh->issBase + sh.iss;
|
||||
record_minimal_symbol (namestring, sh.value,
|
||||
record_minimal_symbol (reader, namestring, sh.value,
|
||||
mst_file_bss, sh.sc,
|
||||
objfile);
|
||||
sh.value += ANOFFSET (objfile->section_offsets,
|
||||
|
@ -3467,10 +3470,9 @@ parse_partial_symbols (struct objfile *objfile)
|
|||
int new_sdx;
|
||||
|
||||
case stStaticProc:
|
||||
prim_record_minimal_symbol_and_info (name, minsym_value,
|
||||
reader.record_with_info (name, minsym_value,
|
||||
mst_file_text,
|
||||
SECT_OFF_TEXT (objfile),
|
||||
objfile);
|
||||
SECT_OFF_TEXT (objfile));
|
||||
|
||||
/* FALLTHROUGH */
|
||||
|
||||
|
@ -3553,15 +3555,13 @@ parse_partial_symbols (struct objfile *objfile)
|
|||
|
||||
case stStatic: /* Variable */
|
||||
if (SC_IS_DATA (sh.sc))
|
||||
prim_record_minimal_symbol_and_info (name, minsym_value,
|
||||
reader.record_with_info (name, minsym_value,
|
||||
mst_file_data,
|
||||
SECT_OFF_DATA (objfile),
|
||||
objfile);
|
||||
SECT_OFF_DATA (objfile));
|
||||
else
|
||||
prim_record_minimal_symbol_and_info (name, minsym_value,
|
||||
reader.record_with_info (name, minsym_value,
|
||||
mst_file_bss,
|
||||
SECT_OFF_BSS (objfile),
|
||||
objfile);
|
||||
SECT_OFF_BSS (objfile));
|
||||
theclass = LOC_STATIC;
|
||||
break;
|
||||
|
||||
|
@ -4885,7 +4885,7 @@ elfmdebug_build_psymtabs (struct objfile *objfile,
|
|||
error (_("Error reading ECOFF debugging information: %s"),
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
|
||||
mdebug_build_psymtabs (objfile, swap, info);
|
||||
mdebug_build_psymtabs (reader, objfile, swap, info);
|
||||
|
||||
reader.install ();
|
||||
}
|
||||
|
|
102
gdb/minsyms.c
102
gdb/minsyms.c
|
@ -64,19 +64,6 @@ struct msym_bunch
|
|||
struct minimal_symbol contents[BUNCH_SIZE];
|
||||
};
|
||||
|
||||
/* Bunch currently being filled up.
|
||||
The next field points to chain of filled bunches. */
|
||||
|
||||
static struct msym_bunch *msym_bunch;
|
||||
|
||||
/* Number of slots filled in current bunch. */
|
||||
|
||||
static int msym_bunch_index;
|
||||
|
||||
/* Total number of minimal symbols recorded so far for the objfile. */
|
||||
|
||||
static int msym_count;
|
||||
|
||||
/* See minsyms.h. */
|
||||
|
||||
unsigned int
|
||||
|
@ -922,14 +909,14 @@ get_symbol_leading_char (bfd *abfd)
|
|||
/* See minsyms.h. */
|
||||
|
||||
minimal_symbol_reader::minimal_symbol_reader (struct objfile *obj)
|
||||
: m_objfile (obj)
|
||||
{
|
||||
msym_count = 0;
|
||||
msym_bunch = NULL;
|
||||
/* Note that presetting msym_bunch_index to BUNCH_SIZE causes the
|
||||
: m_objfile (obj),
|
||||
m_msym_bunch (NULL),
|
||||
/* Note that presetting m_msym_bunch_index to BUNCH_SIZE causes the
|
||||
first call to save a minimal symbol to allocate the memory for
|
||||
the first bunch. */
|
||||
msym_bunch_index = BUNCH_SIZE;
|
||||
m_msym_bunch_index (BUNCH_SIZE),
|
||||
m_msym_count (0)
|
||||
{
|
||||
}
|
||||
|
||||
/* Discard the currently collected minimal symbols, if any. If we wish
|
||||
|
@ -944,20 +931,19 @@ minimal_symbol_reader::~minimal_symbol_reader ()
|
|||
{
|
||||
struct msym_bunch *next;
|
||||
|
||||
while (msym_bunch != NULL)
|
||||
while (m_msym_bunch != NULL)
|
||||
{
|
||||
next = msym_bunch->next;
|
||||
xfree (msym_bunch);
|
||||
msym_bunch = next;
|
||||
next = m_msym_bunch->next;
|
||||
xfree (m_msym_bunch);
|
||||
m_msym_bunch = next;
|
||||
}
|
||||
}
|
||||
|
||||
/* See minsyms.h. */
|
||||
|
||||
void
|
||||
prim_record_minimal_symbol (const char *name, CORE_ADDR address,
|
||||
enum minimal_symbol_type ms_type,
|
||||
struct objfile *objfile)
|
||||
minimal_symbol_reader::record (const char *name, CORE_ADDR address,
|
||||
enum minimal_symbol_type ms_type)
|
||||
{
|
||||
int section;
|
||||
|
||||
|
@ -967,32 +953,31 @@ prim_record_minimal_symbol (const char *name, CORE_ADDR address,
|
|||
case mst_text_gnu_ifunc:
|
||||
case mst_file_text:
|
||||
case mst_solib_trampoline:
|
||||
section = SECT_OFF_TEXT (objfile);
|
||||
section = SECT_OFF_TEXT (m_objfile);
|
||||
break;
|
||||
case mst_data:
|
||||
case mst_file_data:
|
||||
section = SECT_OFF_DATA (objfile);
|
||||
section = SECT_OFF_DATA (m_objfile);
|
||||
break;
|
||||
case mst_bss:
|
||||
case mst_file_bss:
|
||||
section = SECT_OFF_BSS (objfile);
|
||||
section = SECT_OFF_BSS (m_objfile);
|
||||
break;
|
||||
default:
|
||||
section = -1;
|
||||
}
|
||||
|
||||
prim_record_minimal_symbol_and_info (name, address, ms_type,
|
||||
section, objfile);
|
||||
record_with_info (name, address, ms_type, section);
|
||||
}
|
||||
|
||||
/* See minsyms.h. */
|
||||
|
||||
struct minimal_symbol *
|
||||
prim_record_minimal_symbol_full (const char *name, int name_len, int copy_name,
|
||||
minimal_symbol_reader::record_full (const char *name, int name_len,
|
||||
int copy_name,
|
||||
CORE_ADDR address,
|
||||
enum minimal_symbol_type ms_type,
|
||||
int section,
|
||||
struct objfile *objfile)
|
||||
int section)
|
||||
{
|
||||
struct msym_bunch *newobj;
|
||||
struct minimal_symbol *msymbol;
|
||||
|
@ -1009,7 +994,7 @@ prim_record_minimal_symbol_full (const char *name, int name_len, int copy_name,
|
|||
|
||||
/* It's safe to strip the leading char here once, since the name
|
||||
is also stored stripped in the minimal symbol table. */
|
||||
if (name[0] == get_symbol_leading_char (objfile->obfd))
|
||||
if (name[0] == get_symbol_leading_char (m_objfile->obfd))
|
||||
{
|
||||
++name;
|
||||
--name_len;
|
||||
|
@ -1018,17 +1003,17 @@ prim_record_minimal_symbol_full (const char *name, int name_len, int copy_name,
|
|||
if (ms_type == mst_file_text && startswith (name, "__gnu_compiled"))
|
||||
return (NULL);
|
||||
|
||||
if (msym_bunch_index == BUNCH_SIZE)
|
||||
if (m_msym_bunch_index == BUNCH_SIZE)
|
||||
{
|
||||
newobj = XCNEW (struct msym_bunch);
|
||||
msym_bunch_index = 0;
|
||||
newobj->next = msym_bunch;
|
||||
msym_bunch = newobj;
|
||||
m_msym_bunch_index = 0;
|
||||
newobj->next = m_msym_bunch;
|
||||
m_msym_bunch = newobj;
|
||||
}
|
||||
msymbol = &msym_bunch->contents[msym_bunch_index];
|
||||
msymbol = &m_msym_bunch->contents[m_msym_bunch_index];
|
||||
MSYMBOL_SET_LANGUAGE (msymbol, language_auto,
|
||||
&objfile->per_bfd->storage_obstack);
|
||||
MSYMBOL_SET_NAMES (msymbol, name, name_len, copy_name, objfile);
|
||||
&m_objfile->per_bfd->storage_obstack);
|
||||
MSYMBOL_SET_NAMES (msymbol, name, name_len, copy_name, m_objfile);
|
||||
|
||||
SET_MSYMBOL_VALUE_ADDRESS (msymbol, address);
|
||||
MSYMBOL_SECTION (msymbol) = section;
|
||||
|
@ -1047,28 +1032,15 @@ prim_record_minimal_symbol_full (const char *name, int name_len, int copy_name,
|
|||
|
||||
/* If we already read minimal symbols for this objfile, then don't
|
||||
ever allocate a new one. */
|
||||
if (!objfile->per_bfd->minsyms_read)
|
||||
if (!m_objfile->per_bfd->minsyms_read)
|
||||
{
|
||||
msym_bunch_index++;
|
||||
objfile->per_bfd->n_minsyms++;
|
||||
m_msym_bunch_index++;
|
||||
m_objfile->per_bfd->n_minsyms++;
|
||||
}
|
||||
msym_count++;
|
||||
m_msym_count++;
|
||||
return msymbol;
|
||||
}
|
||||
|
||||
/* See minsyms.h. */
|
||||
|
||||
struct minimal_symbol *
|
||||
prim_record_minimal_symbol_and_info (const char *name, CORE_ADDR address,
|
||||
enum minimal_symbol_type ms_type,
|
||||
int section,
|
||||
struct objfile *objfile)
|
||||
{
|
||||
return prim_record_minimal_symbol_full (name, strlen (name), 1,
|
||||
address, ms_type,
|
||||
section, objfile);
|
||||
}
|
||||
|
||||
/* Compare two minimal symbols by address and return a signed result based
|
||||
on unsigned comparisons, so that we sort into unsigned numeric order.
|
||||
Within groups with the same address, sort by name. */
|
||||
|
@ -1244,13 +1216,13 @@ minimal_symbol_reader::install ()
|
|||
if (m_objfile->per_bfd->minsyms_read)
|
||||
return;
|
||||
|
||||
if (msym_count > 0)
|
||||
if (m_msym_count > 0)
|
||||
{
|
||||
if (symtab_create_debug)
|
||||
{
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"Installing %d minimal symbols of objfile %s.\n",
|
||||
msym_count, objfile_name (m_objfile));
|
||||
m_msym_count, objfile_name (m_objfile));
|
||||
}
|
||||
|
||||
/* Allocate enough space in the obstack, into which we will gather the
|
||||
|
@ -1258,7 +1230,7 @@ minimal_symbol_reader::install ()
|
|||
compact out the duplicate entries. Once we have a final table,
|
||||
we will give back the excess space. */
|
||||
|
||||
alloc_count = msym_count + m_objfile->per_bfd->minimal_symbol_count + 1;
|
||||
alloc_count = m_msym_count + m_objfile->per_bfd->minimal_symbol_count + 1;
|
||||
obstack_blank (&m_objfile->per_bfd->storage_obstack,
|
||||
alloc_count * sizeof (struct minimal_symbol));
|
||||
msymbols = (struct minimal_symbol *)
|
||||
|
@ -1278,11 +1250,11 @@ minimal_symbol_reader::install ()
|
|||
|
||||
mcount = m_objfile->per_bfd->minimal_symbol_count;
|
||||
|
||||
for (bunch = msym_bunch; bunch != NULL; bunch = bunch->next)
|
||||
for (bunch = m_msym_bunch; bunch != NULL; bunch = bunch->next)
|
||||
{
|
||||
for (bindex = 0; bindex < msym_bunch_index; bindex++, mcount++)
|
||||
for (bindex = 0; bindex < m_msym_bunch_index; bindex++, mcount++)
|
||||
msymbols[mcount] = bunch->contents[bindex];
|
||||
msym_bunch_index = BUNCH_SIZE;
|
||||
m_msym_bunch_index = BUNCH_SIZE;
|
||||
}
|
||||
|
||||
/* Sort the minimal symbols by address. */
|
||||
|
|
|
@ -53,16 +53,17 @@ struct bound_minimal_symbol
|
|||
as opaque and use functions provided by minsyms.c to inspect them.
|
||||
*/
|
||||
|
||||
struct msym_bunch;
|
||||
|
||||
/* An RAII-based object that is used to record minimal symbols while
|
||||
they are being read. */
|
||||
class minimal_symbol_reader
|
||||
{
|
||||
public:
|
||||
|
||||
/* Prepare to start collecting minimal symbols. This should be called
|
||||
by a symbol reader to initialize the minimal symbol module.
|
||||
Currently, minimal symbol table creation is not reentrant; it
|
||||
relies on global (static) variables in minsyms.c. */
|
||||
/* Prepare to start collecting minimal symbols. This should be
|
||||
called by a symbol reader to initialize the minimal symbol
|
||||
module. */
|
||||
|
||||
explicit minimal_symbol_reader (struct objfile *);
|
||||
|
||||
|
@ -73,17 +74,7 @@ class minimal_symbol_reader
|
|||
|
||||
void install ();
|
||||
|
||||
private:
|
||||
|
||||
/* No need for these. They are intentionally not defined anywhere. */
|
||||
minimal_symbol_reader &operator=
|
||||
(const minimal_symbol_reader &);
|
||||
minimal_symbol_reader (const minimal_symbol_reader &);
|
||||
|
||||
struct objfile *m_objfile;
|
||||
};
|
||||
|
||||
/* Record a new minimal symbol. This is the "full" entry point;
|
||||
/* Record a new minimal symbol. This is the "full" entry point;
|
||||
simpler convenience entry points are also provided below.
|
||||
|
||||
This returns a new minimal symbol. It is ok to modify the returned
|
||||
|
@ -105,36 +96,57 @@ class minimal_symbol_reader
|
|||
appropriate obj_section for the minimal symbol. This can be NULL.
|
||||
OBJFILE - the objfile associated with the minimal symbol. */
|
||||
|
||||
struct minimal_symbol *prim_record_minimal_symbol_full
|
||||
(const char *name,
|
||||
struct minimal_symbol *record_full (const char *name,
|
||||
int name_len,
|
||||
int copy_name,
|
||||
CORE_ADDR address,
|
||||
enum minimal_symbol_type ms_type,
|
||||
int section,
|
||||
struct objfile *objfile);
|
||||
int section);
|
||||
|
||||
/* Like prim_record_minimal_symbol_full, but:
|
||||
/* Like record_full, but:
|
||||
- uses strlen to compute NAME_LEN,
|
||||
- passes COPY_NAME = 1,
|
||||
- and passes a default SECTION, depending on the type
|
||||
|
||||
This variant does not return the new symbol. */
|
||||
|
||||
void prim_record_minimal_symbol (const char *, CORE_ADDR,
|
||||
enum minimal_symbol_type,
|
||||
struct objfile *);
|
||||
void record (const char *, CORE_ADDR, enum minimal_symbol_type);
|
||||
|
||||
/* Like prim_record_minimal_symbol_full, but:
|
||||
/* Like record_full, but:
|
||||
- uses strlen to compute NAME_LEN,
|
||||
- passes COPY_NAME = 1. */
|
||||
|
||||
struct minimal_symbol *prim_record_minimal_symbol_and_info
|
||||
(const char *,
|
||||
CORE_ADDR,
|
||||
enum minimal_symbol_type,
|
||||
int section,
|
||||
struct objfile *);
|
||||
struct minimal_symbol *record_with_info (const char *name,
|
||||
CORE_ADDR address,
|
||||
enum minimal_symbol_type ms_type,
|
||||
int section)
|
||||
{
|
||||
return record_full (name, strlen (name), 1, address, ms_type, section);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
/* No need for these. They are intentionally not defined anywhere. */
|
||||
minimal_symbol_reader &operator=
|
||||
(const minimal_symbol_reader &);
|
||||
minimal_symbol_reader (const minimal_symbol_reader &);
|
||||
|
||||
struct objfile *m_objfile;
|
||||
|
||||
/* Bunch currently being filled up.
|
||||
The next field points to chain of filled bunches. */
|
||||
|
||||
struct msym_bunch *m_msym_bunch;
|
||||
|
||||
/* Number of slots filled in current bunch. */
|
||||
|
||||
int m_msym_bunch_index;
|
||||
|
||||
/* Total number of minimal symbols recorded so far for the
|
||||
objfile. */
|
||||
|
||||
int m_msym_count;
|
||||
};
|
||||
|
||||
/* Create the terminating entry of OBJFILE's minimal symbol table.
|
||||
If OBJFILE->msymbols is zero, allocate a single entry from
|
||||
|
|
|
@ -42,7 +42,8 @@
|
|||
#include "psymtab.h"
|
||||
|
||||
static void
|
||||
read_alphacoff_dynamic_symtab (struct section_offsets *,
|
||||
read_alphacoff_dynamic_symtab (minimal_symbol_reader &,
|
||||
struct section_offsets *,
|
||||
struct objfile *objfile);
|
||||
|
||||
/* Initialize anything that needs initializing when a completely new
|
||||
|
@ -79,12 +80,12 @@ mipscoff_symfile_read (struct objfile *objfile, int symfile_flags)
|
|||
(abfd, (asection *) NULL, &ecoff_data (abfd)->debug_info)))
|
||||
error (_("Error reading symbol table: %s"), bfd_errmsg (bfd_get_error ()));
|
||||
|
||||
mdebug_build_psymtabs (objfile, &ecoff_backend (abfd)->debug_swap,
|
||||
mdebug_build_psymtabs (reader, objfile, &ecoff_backend (abfd)->debug_swap,
|
||||
&ecoff_data (abfd)->debug_info);
|
||||
|
||||
/* Add alpha coff dynamic symbols. */
|
||||
|
||||
read_alphacoff_dynamic_symtab (objfile->section_offsets, objfile);
|
||||
read_alphacoff_dynamic_symtab (reader, objfile->section_offsets, objfile);
|
||||
|
||||
/* Install any minimal symbols that have been collected as the current
|
||||
minimal symbols for this objfile. */
|
||||
|
@ -173,7 +174,8 @@ alphacoff_locate_sections (bfd *ignore_abfd, asection *sectp, void *sip)
|
|||
them to the minimal symbol table. */
|
||||
|
||||
static void
|
||||
read_alphacoff_dynamic_symtab (struct section_offsets *section_offsets,
|
||||
read_alphacoff_dynamic_symtab (minimal_symbol_reader &reader,
|
||||
struct section_offsets *section_offsets,
|
||||
struct objfile *objfile)
|
||||
{
|
||||
bfd *abfd = objfile->obfd;
|
||||
|
@ -388,7 +390,7 @@ read_alphacoff_dynamic_symtab (struct section_offsets *section_offsets,
|
|||
}
|
||||
}
|
||||
|
||||
prim_record_minimal_symbol (name, sym_value, ms_type, objfile);
|
||||
reader.record (name, sym_value, ms_type);
|
||||
}
|
||||
|
||||
do_cleanups (cleanups);
|
||||
|
|
|
@ -652,7 +652,8 @@ void dwarf2_free_objfile (struct objfile *);
|
|||
|
||||
/* From mdebugread.c */
|
||||
|
||||
extern void mdebug_build_psymtabs (struct objfile *,
|
||||
extern void mdebug_build_psymtabs (minimal_symbol_reader &,
|
||||
struct objfile *,
|
||||
const struct ecoff_debug_swap *,
|
||||
struct ecoff_debug_info *);
|
||||
|
||||
|
|
|
@ -197,7 +197,8 @@ eb_complaint (int arg1)
|
|||
|
||||
static void xcoff_initial_scan (struct objfile *, int);
|
||||
|
||||
static void scan_xcoff_symtab (struct objfile *);
|
||||
static void scan_xcoff_symtab (minimal_symbol_reader &,
|
||||
struct objfile *);
|
||||
|
||||
static char *xcoff_next_symbol_text (struct objfile *);
|
||||
|
||||
|
@ -908,10 +909,10 @@ enter_line_range (struct subfile *subfile, unsigned beginoffset,
|
|||
This function can read past the end of the symbol table
|
||||
(into the string table) but this does no harm. */
|
||||
|
||||
/* Create a new minimal symbol (using prim_record_minimal_symbol_and_info).
|
||||
/* Create a new minimal symbol (using record_with_info).
|
||||
|
||||
Creation of all new minimal symbols should go through this function
|
||||
rather than calling the various prim_record_[...] functions in order
|
||||
rather than calling the various record functions in order
|
||||
to make sure that all symbol addresses get properly relocated.
|
||||
|
||||
Arguments are:
|
||||
|
@ -925,18 +926,17 @@ enter_line_range (struct subfile *subfile, unsigned beginoffset,
|
|||
OBJFILE - the objfile associated with the minimal symbol. */
|
||||
|
||||
static void
|
||||
record_minimal_symbol (const char *name, CORE_ADDR address,
|
||||
record_minimal_symbol (minimal_symbol_reader &reader,
|
||||
const char *name, CORE_ADDR address,
|
||||
enum minimal_symbol_type ms_type,
|
||||
int n_scnum,
|
||||
struct objfile *objfile)
|
||||
{
|
||||
|
||||
if (name[0] == '.')
|
||||
++name;
|
||||
|
||||
prim_record_minimal_symbol_and_info (name, address, ms_type,
|
||||
secnum_to_section (n_scnum, objfile),
|
||||
objfile);
|
||||
reader.record_with_info (name, address, ms_type,
|
||||
secnum_to_section (n_scnum, objfile));
|
||||
}
|
||||
|
||||
/* xcoff has static blocks marked in `.bs', `.es' pairs. They cannot be
|
||||
|
@ -2178,7 +2178,8 @@ function_outside_compilation_unit_complaint (const char *arg1)
|
|||
}
|
||||
|
||||
static void
|
||||
scan_xcoff_symtab (struct objfile *objfile)
|
||||
scan_xcoff_symtab (minimal_symbol_reader &reader,
|
||||
struct objfile *objfile)
|
||||
{
|
||||
struct gdbarch *gdbarch = get_objfile_arch (objfile);
|
||||
CORE_ADDR toc_offset = 0; /* toc offset value in data section. */
|
||||
|
@ -2288,7 +2289,7 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||
if (!misc_func_recorded)
|
||||
{
|
||||
record_minimal_symbol
|
||||
(last_csect_name, last_csect_val,
|
||||
(reader, last_csect_name, last_csect_val,
|
||||
mst_text, last_csect_sec, objfile);
|
||||
misc_func_recorded = 1;
|
||||
}
|
||||
|
@ -2343,7 +2344,7 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||
table, except for section symbols. */
|
||||
if (*namestring != '.')
|
||||
record_minimal_symbol
|
||||
(namestring, symbol.n_value,
|
||||
(reader, namestring, symbol.n_value,
|
||||
sclass == C_HIDEXT ? mst_file_data : mst_data,
|
||||
symbol.n_scnum, objfile);
|
||||
break;
|
||||
|
@ -2381,7 +2382,7 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||
main_aux[0].x_sym.x_fcnary.x_fcn.x_lnnoptr;
|
||||
|
||||
record_minimal_symbol
|
||||
(namestring, symbol.n_value,
|
||||
(reader, namestring, symbol.n_value,
|
||||
sclass == C_HIDEXT ? mst_file_text : mst_text,
|
||||
symbol.n_scnum, objfile);
|
||||
misc_func_recorded = 1;
|
||||
|
@ -2396,7 +2397,7 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||
symbols, we will choose mst_text over
|
||||
mst_solib_trampoline. */
|
||||
record_minimal_symbol
|
||||
(namestring, symbol.n_value,
|
||||
(reader, namestring, symbol.n_value,
|
||||
mst_solib_trampoline, symbol.n_scnum, objfile);
|
||||
misc_func_recorded = 1;
|
||||
break;
|
||||
|
@ -2418,7 +2419,7 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||
XMC_BS might be possible too. */
|
||||
if (*namestring != '.')
|
||||
record_minimal_symbol
|
||||
(namestring, symbol.n_value,
|
||||
(reader, namestring, symbol.n_value,
|
||||
sclass == C_HIDEXT ? mst_file_data : mst_data,
|
||||
symbol.n_scnum, objfile);
|
||||
break;
|
||||
|
@ -2434,7 +2435,7 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||
table, except for section symbols. */
|
||||
if (*namestring != '.')
|
||||
record_minimal_symbol
|
||||
(namestring, symbol.n_value,
|
||||
(reader, namestring, symbol.n_value,
|
||||
sclass == C_HIDEXT ? mst_file_bss : mst_bss,
|
||||
symbol.n_scnum, objfile);
|
||||
break;
|
||||
|
@ -2462,7 +2463,7 @@ scan_xcoff_symtab (struct objfile *objfile)
|
|||
it as a function. This will take care of functions like
|
||||
strcmp() compiled by xlc. */
|
||||
|
||||
record_minimal_symbol (last_csect_name, last_csect_val,
|
||||
record_minimal_symbol (reader, last_csect_name, last_csect_val,
|
||||
mst_text, last_csect_sec, objfile);
|
||||
misc_func_recorded = 1;
|
||||
}
|
||||
|
@ -3011,7 +3012,7 @@ xcoff_initial_scan (struct objfile *objfile, int symfile_flags)
|
|||
/* Now that the symbol table data of the executable file are all in core,
|
||||
process them and define symbols accordingly. */
|
||||
|
||||
scan_xcoff_symtab (objfile);
|
||||
scan_xcoff_symtab (reader, objfile);
|
||||
|
||||
/* Install any minimal symbols that have been collected as the current
|
||||
minimal symbols for this objfile. */
|
||||
|
|
Loading…
Reference in New Issue