[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.  */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.