[gdb/symtab] Add symbol with inherited DW_AT_const_value to psymtabs
Consider the test-case added in this patch, with resulting dwarf (related to
variable aaa):
...
<0><d2>: Abbrev Number: 2 (DW_TAG_partial_unit)
<1><eb>: Abbrev Number: 4 (DW_TAG_variable)
<ec> DW_AT_name : aaa
<f0> DW_AT_type : <0xe4>
<f4> DW_AT_const_value : 1
<0><10c>: Abbrev Number: 2 (DW_TAG_compile_unit)
<10e> DW_AT_name : <artificial>
<1><11b>: Abbrev Number: 3 (DW_TAG_variable)
<11c> DW_AT_abstract_origin: <0xeb>
...
When running the test-case, we see:
...
(gdb) p aaa^M
No symbol "aaa" in current context.^M
(gdb) FAIL: gdb.dwarf2/imported-unit-abstract-const-value.exp: p aaa
...
while with target board readnow.exp, we have:
...
(gdb) p aaa^M
$1 = 1^M
...
This is due to the fact that there's no aaa symbol in the partial symtabs:
...
Partial symtab for source file <artificial>@0x101 (object 0x351cf40)^M
...
Global partial symbols:^M
`main', function, 0x4004a7^M
^M
...
which is due to the fact that when attempting to add the symbol corresponding
to DIE 0x11b in add_partial_symbol:
...
(gdb) p /x pdi->sect_off
$4 = 0x11b
(gdb) p pdi.has_const_value
$5 = 0
...
it seems the DW_AT_const_value was not inherited from DIE 0xeb, and
consequently we leave without adding a partial symbol.
Fix this by making sure that partial_die_info::has_const_value is inherited
in partial_die_info::fixup.
Build and reg-tested on x86_64-linux.
Tested test-case with target boards readnow, cc-with-gdb-index and
cc-with-debug-names. The "print aaa" test fails for cc-with-gdb-index, that's
PR25791, the test passes when applying the corresponding proposed patch.
gdb/ChangeLog:
2020-04-07 Tom de Vries <tdevries@suse.de>
PR symtab/25796
* dwarf2/read.c (can_have_DW_AT_const_value_p): New function.
(partial_die_info::fixup): Inherit has_const_value.
gdb/testsuite/ChangeLog:
2020-04-07 Tom de Vries <tdevries@suse.de>
PR symtab/25796
* gdb.dwarf2/imported-unit-abstract-const-value.exp: New file.