Re: [PATCH] [gdb/tui] Fix gdb.tui/list-before.exp on ppc64-linux

Tom de Vries <[email protected]>
Newsgroups gmane.comp.gdb.patches
Message-ID <[email protected]>
On 8/1/26 2:28 PM, Tom de Vries wrote:
> 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.
> 

I'm pushing this shortly.

Thanks,
- Tom

> Tested on ppc64-linux and x86_64-linux.
> ---
>   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.  */
> 
> base-commit: 5b805c95e9399e35f7bc895ec5b67aabdbc6ce41
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.