mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-09-12 09:39:30 +08:00
Don't derive partial_symbol from general_symbol_info
This patch partly reverts commit 8a6d42345 ("Change representation of psymbol to flush out accessors"); specifically, it changes partial_symbol to no longer derive from general_symbol_info. The basic problem here is that the bcache compares objects bitwise, and this change made it less likely that the relevant fields in the psymbol would be fully initialized. This could be seen by running a test under valgrind on the Fedora-i686 buildbot. I considered a simpler patch, namely just zeroing the psymbol's "value" field in add_psymbol_to_bcache. However, it wasn't clear to me that this memset could not then be optimized away by the compiler. Regression tested by the buildbot. I think this should go in 8.3 as well. gdb/ChangeLog 2019-05-04 Tom Tromey <tom@tromey.com> * psymtab.c (psymbol_name_matches, match_partial_symbol) (lookup_partial_symbol, print_partial_symbols) (recursively_search_psymtabs, sort_pst_symbols, psymbol_hash) (psymbol_compare): Update. (add_psymbol_to_bcache): Clear the entire psymbol. (maintenance_check_psymtabs): Update. * psympriv.h (struct partial_symbol): Don't derive from general_symbol_info. <obj_section, unrelocated_address, address, set_unrelocated_address>: Update. <ginfo>: New member. * dwarf-index-write.c (write_psymbols, debug_names::insert) (debug_names::write_psymbols): Update.
This commit is contained in:
@ -540,7 +540,7 @@ write_psymbols (struct mapped_symtab *symtab,
|
||||
{
|
||||
struct partial_symbol *psym = *psymp;
|
||||
|
||||
if (psym->language == language_ada)
|
||||
if (psym->ginfo.language == language_ada)
|
||||
error (_("Ada is not currently supported by the index"));
|
||||
|
||||
/* Only add a given psymbol once. */
|
||||
@ -548,7 +548,7 @@ write_psymbols (struct mapped_symtab *symtab,
|
||||
{
|
||||
gdb_index_symbol_kind kind = symbol_kind (psym);
|
||||
|
||||
add_index_entry (symtab, symbol_search_name (psym),
|
||||
add_index_entry (symtab, symbol_search_name (&psym->ginfo),
|
||||
is_static, kind, cu_index);
|
||||
}
|
||||
}
|
||||
@ -684,7 +684,7 @@ public:
|
||||
const int dwarf_tag = psymbol_tag (psym);
|
||||
if (dwarf_tag == 0)
|
||||
return;
|
||||
const char *const name = symbol_search_name (psym);
|
||||
const char *const name = symbol_search_name (&psym->ginfo);
|
||||
const auto insertpair
|
||||
= m_name_to_value_set.emplace (c_str_view (name),
|
||||
std::set<symbol_value> ());
|
||||
@ -1181,7 +1181,7 @@ private:
|
||||
{
|
||||
struct partial_symbol *psym = *psymp;
|
||||
|
||||
if (psym->language == language_ada)
|
||||
if (psym->ginfo.language == language_ada)
|
||||
error (_("Ada is not currently supported by the index"));
|
||||
|
||||
/* Only add a given psymbol once. */
|
||||
|
Reference in New Issue
Block a user