[binutils-gdb] [gdb/tui] Fix gdb.tui/list-before.exp on ppc64-linux
Tom de Vries via Gdb-cvs <[email protected]>
| Newsgroups | gmane.comp.gdb.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=07ee9e316ab6d53b5ed1aae8fe7448a559abe4be commit 07ee9e316ab6d53b5ed1aae8fe7448a559abe4be Author: Tom de Vries <[email protected]> Date: Wed Aug 19 16:45:29 2026 +0200 [gdb/tui] Fix gdb.tui/list-before.exp on ppc64-linux On ppc64-linux, with test-case gdb.tui/list-before.exp I run into: ... (gdb) tui enable^M ... (gdb) Screen Dump (size 80 columns x 24 rows, cursor at column 6, row 16): 0 +------------------------------------------------------------------------------+ 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | [ No Source Available ] | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 +------------------------------------------------------------------------------+ 15 exec No process (src) In: L?? PC: ?? 16 (gdb) 17 18 19 20 21 22 23 FAIL: $exp: initial source listing ... The problem is in tui_get_begin_asm_address, where we look up the minimal symbol for main, and use its address. With the v1 ABI, we don't get the address of main in the .text section: ... 00000000000008b4 <.main>: 8b4: fb e1 ff f8 std r31,-8(r1) 8b8: f8 21 ff c1 stdu r1,-64(r1) 8bc: 7c 3f 0b 78 mr r31,r1 ... but the address of the descriptor of main in the .opd section: ... 000000000001fee8 <main>: 1fee8: 00 00 00 00 .long 0x0 1feec: 00 00 08 b4 .long 0x8b4 1fef0: 00 00 00 00 .long 0x0 1fef4: 00 02 7f 00 .long 0x27f00 ... Fix this by using gdbarch_convert_from_func_ptr_addr, similar to how that's used in create_internal_breakpoint. Tested on ppc64-linux and x86_64-linux. Diff: --- gdb/tui/tui-disasm.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c index 5c68312a91b..68a5c425934 100644 --- a/gdb/tui/tui-disasm.c +++ b/gdb/tui/tui-disasm.c @@ -409,7 +409,11 @@ tui_get_begin_asm_address (struct gdbarch **gdbarch_p, CORE_ADDR *addr_p) bound_minimal_symbol main_symbol = lookup_minimal_symbol (current_program_space, main_name ()); if (main_symbol.minsym != nullptr) - addr = main_symbol.value_address (); + { + addr = main_symbol.value_address (); + addr = gdbarch_convert_from_func_ptr_addr + (gdbarch, addr, current_inferior ()->top_target ()); + } } } else /* The target is executing. */