diff options
author | Tom Tromey <tom@tromey.com> | 2016-09-22 14:25:08 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2016-10-21 14:17:33 -0600 |
commit | 8dddcb8f005e8470312bf33041bb6ddaa5084e32 (patch) | |
tree | d88f904c0193031ec5215f25f03201d321a558cc /gdb/minsyms.c | |
parent | d25e87199327846e42b5a23f4365d75e75517ab3 (diff) | |
download | gdb-8dddcb8f005e8470312bf33041bb6ddaa5084e32.zip gdb-8dddcb8f005e8470312bf33041bb6ddaa5084e32.tar.gz gdb-8dddcb8f005e8470312bf33041bb6ddaa5084e32.tar.bz2 |
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.
Diffstat (limited to 'gdb/minsyms.c')
-rw-r--r-- | gdb/minsyms.c | 106 |
1 files changed, 39 insertions, 67 deletions
diff --git a/gdb/minsyms.c b/gdb/minsyms.c index 9de5722..5f6db60 100644 --- a/gdb/minsyms.c +++ b/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, - CORE_ADDR address, - enum minimal_symbol_type ms_type, - int section, - struct objfile *objfile) +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 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. */ |