Don't derive partial_symbol from general_symbol_info
authorTom Tromey <tom@tromey.com>
Tue, 23 Apr 2019 22:42:14 +0000 (16:42 -0600)
committerTom Tromey <tom@tromey.com>
Sat, 4 May 2019 19:43:50 +0000 (13:43 -0600)
commitaf97b4161f07a716783183f1b17fa5cac9f99a49
tree4afe3bc56a89346123d7ad0ab369b6da3dfe0a2e
parent9d6d4be89d12747a92629ed1bde1d423e2831de1
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.
gdb/ChangeLog
gdb/dwarf-index-write.c
gdb/psympriv.h
gdb/psymtab.c