[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
@ -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>
|
||||
|
||||
PR symtab/25764
|
||||
|
@ -236,19 +236,7 @@ find_pc_partial_function (CORE_ADDR pc, const char **name, CORE_ADDR *address,
|
||||
goto return_cached_value;
|
||||
|
||||
msymbol = lookup_minimal_symbol_by_pc_section (mapped_pc, section);
|
||||
for (objfile *objfile : current_program_space->objfiles ())
|
||||
{
|
||||
if (objfile->sf)
|
||||
{
|
||||
compunit_symtab
|
||||
= objfile->sf->qf->find_pc_sect_compunit_symtab (objfile, msymbol,
|
||||
mapped_pc,
|
||||
section,
|
||||
0);
|
||||
}
|
||||
if (compunit_symtab != NULL)
|
||||
break;
|
||||
}
|
||||
compunit_symtab = find_pc_sect_compunit_symtab (mapped_pc, section);
|
||||
|
||||
if (compunit_symtab != NULL)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user