[gdb/symtab] Fix disassembly of non-contiguous functions
When running test-case gdb.dwarf2/dw2-ranges-func.exp with target board readnow, we have: ... FAIL: gdb.dwarf2/dw2-ranges-func.exp: disassemble foo (pattern 2) ... The function foo consists of two ranges: ... <1><12f>: Abbrev Number: 7 (DW_TAG_subprogram) <130> DW_AT_external : 1 <131> DW_AT_name : foo <135> DW_AT_ranges : 0x40 ... which are listed here: ... 00000040 00000000004004c1 00000000004004dc 00000040 00000000004004ae 00000000004004ba ... Normally the disassemble instruction lists both ranges, but with -readnow it only lists the first. This is due to function find_pc_partial_function, which only interacts with partial symtabs, but not with expanded ones. Fix this by using find_pc_sect_compunit_symtab in find_pc_partial_function. Tested on x86_64, with native and target board readnow. This fixes 19 FAILs for target board readnow, in test-cases gdb.arch/amd64-entry-value.exp, gdb.base/multi-forks.exp, gdb.dwarf2/dw2-ranges-func.exp and gdb.linespec/skip-two.exp. gdb/ChangeLog: 2020-04-23 Tom de Vries <tdevries@suse.de> * blockframe.c (find_pc_partial_function): Use find_pc_sect_compunit_symtab rather than objfile->sf->qf->find_pc_sect_compunit_symtab.
This commit is contained in:
parent
30ce8e47fa
commit
ae3ab1f067
2 changed files with 7 additions and 13 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2020-04-23 Tom de Vries <tdevries@suse.de>
|
||||||
|
|
||||||
|
* blockframe.c (find_pc_partial_function): Use
|
||||||
|
find_pc_sect_compunit_symtab rather than
|
||||||
|
objfile->sf->qf->find_pc_sect_compunit_symtab.
|
||||||
|
|
||||||
2020-04-22 Tom de Vries <tdevries@suse.de>
|
2020-04-22 Tom de Vries <tdevries@suse.de>
|
||||||
|
|
||||||
PR symtab/25764
|
PR symtab/25764
|
||||||
|
|
|
@ -236,19 +236,7 @@ find_pc_partial_function (CORE_ADDR pc, const char **name, CORE_ADDR *address,
|
||||||
goto return_cached_value;
|
goto return_cached_value;
|
||||||
|
|
||||||
msymbol = lookup_minimal_symbol_by_pc_section (mapped_pc, section);
|
msymbol = lookup_minimal_symbol_by_pc_section (mapped_pc, section);
|
||||||
for (objfile *objfile : current_program_space->objfiles ())
|
compunit_symtab = find_pc_sect_compunit_symtab (mapped_pc, section);
|
||||||
{
|
|
||||||
if (objfile->sf)
|
|
||||||
{
|
|
||||||
compunit_symtab
|
|
||||||
= objfile->sf->qf->find_pc_sect_compunit_symtab (objfile, msymbol,
|
|
||||||
mapped_pc,
|
|
||||||
section,
|
|
||||||
0);
|
|
||||||
}
|
|
||||||
if (compunit_symtab != NULL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (compunit_symtab != NULL)
|
if (compunit_symtab != NULL)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue