Defer minimal symbol name-setting
Currently the demangled name of a minimal symbol is set when creating the symbol. However, there is no intrinsic need to do this. This patch instead arranges for the demangling to be done just before the minsym hash tables are filled. This will be useful in a later patch. gdb/ChangeLog 2019-11-26 Tom Tromey <tom@tromey.com> * symtab.h (struct minimal_symbol) <name_set>: New member. * minsyms.c (minimal_symbol_reader::record_full): Copy name. Don't call symbol_set_names. (minimal_symbol_reader::install): Call symbol_set_names. Change-Id: I4fe3993b99fb3a43968067806e294d48e377fd76
This commit is contained in:
parent
aa36950904
commit
5a79c10755
|
@ -1,3 +1,10 @@
|
|||
2019-11-26 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* symtab.h (struct minimal_symbol) <name_set>: New member.
|
||||
* minsyms.c (minimal_symbol_reader::record_full): Copy name.
|
||||
Don't call symbol_set_names.
|
||||
(minimal_symbol_reader::install): Call symbol_set_names.
|
||||
|
||||
2019-11-26 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
||||
|
||||
* python/python.c (gdbpy_enter::~gdbpy_enter): Release GIL after
|
||||
|
|
|
@ -1127,7 +1127,12 @@ minimal_symbol_reader::record_full (gdb::string_view name,
|
|||
msymbol = &m_msym_bunch->contents[m_msym_bunch_index];
|
||||
symbol_set_language (msymbol, language_auto,
|
||||
&m_objfile->per_bfd->storage_obstack);
|
||||
symbol_set_names (msymbol, name, copy_name, m_objfile->per_bfd);
|
||||
|
||||
if (copy_name)
|
||||
msymbol->name = obstack_strndup (&m_objfile->per_bfd->storage_obstack,
|
||||
name.data (), name.size ());
|
||||
else
|
||||
msymbol->name = name.data ();
|
||||
|
||||
SET_MSYMBOL_VALUE_ADDRESS (msymbol, address);
|
||||
MSYMBOL_SECTION (msymbol) = section;
|
||||
|
@ -1354,6 +1359,17 @@ minimal_symbol_reader::install ()
|
|||
m_objfile->per_bfd->minimal_symbol_count = mcount;
|
||||
m_objfile->per_bfd->msymbols = std::move (msym_holder);
|
||||
|
||||
msymbols = m_objfile->per_bfd->msymbols.get ();
|
||||
for (int i = 0; i < mcount; ++i)
|
||||
{
|
||||
if (!msymbols[i].name_set)
|
||||
{
|
||||
symbol_set_names (&msymbols[i], msymbols[i].name,
|
||||
false, m_objfile->per_bfd);
|
||||
msymbols[i].name_set = 1;
|
||||
}
|
||||
}
|
||||
|
||||
build_minimal_symbol_hash_tables (m_objfile);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -668,6 +668,10 @@ struct minimal_symbol : public general_symbol_info
|
|||
|
||||
unsigned maybe_copied : 1;
|
||||
|
||||
/* Non-zero if this symbol ever had its demangled name set (even if
|
||||
it was set to NULL). */
|
||||
unsigned int name_set : 1;
|
||||
|
||||
/* Minimal symbols with the same hash key are kept on a linked
|
||||
list. This is the link. */
|
||||
|
||||
|
|
Loading…
Reference in New Issue