[gdb/symtab] Add symbol with inherited DW_AT_const_value to psymtabs
authorTom de Vries <tdevries@suse.de>
Tue, 7 Apr 2020 15:33:05 +0000 (17:33 +0200)
committerTom de Vries <tdevries@suse.de>
Tue, 7 Apr 2020 15:33:05 +0000 (17:33 +0200)
commit25c11acac349bf6e77a233c7604bf8e04b8a1424
tree554b59b417a08e1b9cb3dcf1f56229eced877553
parenta0543b0b4c9cfa0fe1f1484a0eb895243c04cc21
[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.
gdb/ChangeLog
gdb/dwarf2/read.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.dwarf2/imported-unit-abstract-const-value.exp [new file with mode: 0644]