diff options
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/minsyms.c | 18 | ||||
-rw-r--r-- | gdb/symtab.h | 4 |
3 files changed, 28 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b061e88..dc684be 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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 diff --git a/gdb/minsyms.c b/gdb/minsyms.c index a9ba66b..6e7021a 100644 --- a/gdb/minsyms.c +++ b/gdb/minsyms.c @@ -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); } } diff --git a/gdb/symtab.h b/gdb/symtab.h index 897ffda..bcbc9c8 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -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. */ |