public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Fix gdb.ada/O2_float_param.exp for PowerPC
@ 2023-08-04 15:21 Carl Love
  2023-08-04 16:05 ` Tom Tromey
  0 siblings, 1 reply; 4+ messages in thread
From: Carl Love @ 2023-08-04 15:21 UTC (permalink / raw)
  To: Ulrich.Weigand, gdb-patches, Tom de Vries; +Cc: cel

GDB maintainers:

The gdb.ada/O2_float_param.exp for PowerPC test fails due to a
difference in the output of the frame command.  On PowerPC, the frame
command prints the address in addition to the rest of the information. 
The address is not printed on X86.  This patch updates the expect
string to account for the presence or absence of the address in the
output.

The patch fixes two failures in the test on PowerPC.  The patch has
been regression tested on Power 10 with no additional failures.

Please let me know if this patch is acceptable for mainline.  Thanks.

                     Carl 


----------------------------------
Fix gdb.ada/O2_float_param.exp for PowerPC

The frame command on Power pc prints the address in hex between the
#0 and in calle.increment.  For example

(gdb) frame
#0  0x0000000010010a88 in callee.increment (val=val@entry=99.0, msg=...)
    at /home/.../gdb/testsuite/gdb.ada/O2_float_param/callee.adb:19
19	   procedure Increment (Val : in out Float; Msg: String) is

Update the set re string to accept the hex address.

Fixes two failures on PowerPC.

Patch tested on Power10 with no new regressions.
---
 gdb/testsuite/gdb.ada/O2_float_param.exp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/gdb/testsuite/gdb.ada/O2_float_param.exp b/gdb/testsuite/gdb.ada/O2_float_param.exp
index ac6df7e3ab9..34f612e52c7 100644
--- a/gdb/testsuite/gdb.ada/O2_float_param.exp
+++ b/gdb/testsuite/gdb.ada/O2_float_param.exp
@@ -39,8 +39,11 @@ foreach_with_prefix scenario {all minimal} {
 
     runto "increment"
 
+    # Note, on PowerPC the output line looks like:
+    # #0  0x0000000010010a88 in callee.increment (val=val@entry=99.0, msg=...)
+    # Not all architectures print the address.
     set re \
-	"#0\\s+callee\\.increment \\(val(=val@entry)?=99\\.0, msg=\\.\\.\\.\\).*"
+	"#0.*callee\\.increment \\(val(=val@entry)?=99\\.0, msg=\\.\\.\\.\\).*"
     set re_different_entry_val \
        "#0\\s+callee\\.increment \\(val=99.0, val@entry=.*, msg=\\.\\.\\.\\).*"
     gdb_test_multiple "frame" "" {
-- 
2.37.2



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Fix gdb.ada/O2_float_param.exp for PowerPC
  2023-08-04 15:21 [PATCH] Fix gdb.ada/O2_float_param.exp for PowerPC Carl Love
@ 2023-08-04 16:05 ` Tom Tromey
  2023-08-04 22:56   ` Carl Love
  0 siblings, 1 reply; 4+ messages in thread
From: Tom Tromey @ 2023-08-04 16:05 UTC (permalink / raw)
  To: Carl Love via Gdb-patches; +Cc: Ulrich.Weigand, Tom de Vries, Carl Love

>>>>> "Carl" == Carl Love via Gdb-patches <gdb-patches@sourceware.org> writes:

Carl> Fix gdb.ada/O2_float_param.exp for PowerPC

Carl> The frame command on Power pc prints the address in hex between the
Carl> #0 and in calle.increment.  For example

Carl> (gdb) frame
Carl> #0  0x0000000010010a88 in callee.increment (val=val@entry=99.0, msg=...)
Carl>     at /home/.../gdb/testsuite/gdb.ada/O2_float_param/callee.adb:19
Carl> 19	   procedure Increment (Val : in out Float; Msg: String) is

Carl> +    # Note, on PowerPC the output line looks like:
Carl> +    # #0  0x0000000010010a88 in callee.increment (val=val@entry=99.0, msg=...)
Carl> +    # Not all architectures print the address.

I don't think this is architecture-dependent.  Instead, something else
is going wrong here.  Why exactly is it printing the address?  The code
here looks like:

    if (opts.addressprint)
      if (!sal.symtab
	  || frame_show_address (frame, sal)
	  || print_what == LOC_AND_ADDRESS)

Could it maybe be different inlining decisions?
Maybe seeing which of those clauses is true would show the answer.

I don't mind working around differences like this by patching the tests,
but I would like the real cause to be known and put into the comment.

Tom

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Fix gdb.ada/O2_float_param.exp for PowerPC
  2023-08-04 16:05 ` Tom Tromey
@ 2023-08-04 22:56   ` Carl Love
  2023-08-10 16:13     ` Tom Tromey
  0 siblings, 1 reply; 4+ messages in thread
From: Carl Love @ 2023-08-04 22:56 UTC (permalink / raw)
  To: Tom Tromey, Carl Love via Gdb-patches; +Cc: Ulrich.Weigand, Tom de Vries, cel

On Fri, 2023-08-04 at 10:05 -0600, Tom Tromey wrote:
<snip>
> 
> Carl> +    # Note, on PowerPC the output line looks like:
> Carl> +    # #0  0x0000000010010a88 in callee.increment (
> val=val@entry=99.0, msg=...)
> Carl> +    # Not all architectures print the address.
> 
> I don't think this is architecture-dependent.  Instead, something
> else
> is going wrong here.  Why exactly is it printing the address?  The
> code
> here looks like:
> 
>     if (opts.addressprint)
>       if (!sal.symtab
> 	  || frame_show_address (frame, sal)
> 	  || print_what == LOC_AND_ADDRESS)
> 
> Could it maybe be different inlining decisions?
> Maybe seeing which of those clauses is true would show the answer.
> 
> I don't mind working around differences like this by patching the
> tests,
> but I would like the real cause to be known and put into the comment.

OK, I was able to get Ada installed on my X86 laptop so I could put in
debug prints on PowerPC and X86-64.  Thanks for the help identifying
where the print occurs.  

The function frame_show_address (frame, sal) returns true on PowerPC. 
The return statement for frame_show_address (frame, sal) is

   return get_frame_pc (frame) != sal.pc || !sal.is_stmt;

On PowerPC sal.is_stmt is false for this test but it is true on X86-64.

The result is the code you gave above, from print_frame in gdb/stack.c,
evaluates to true and the address is printed on PowerPC.

I updated the comment in the patch as:

+    # If sal.is_stmt is false for the frame, function frame_show_address will
+    # return true and function print_frame in gdb/stack.c will print the
+    # address.  In this case, the output will look something like:
+    # #0  0x0000000010010a88 in callee.increment (val=val@entry=99.0, msg=...)
+    # This situation currently occurs on PowerPC but not on X86-64.
+    # The re string needs to account for the possibility that the address
+    # will be printed.
     set re \
-	"#0\\s+callee\\.increment \\(val(=val@entry)?=99\\.0, msg=\\.\\.\\.\\).*"
+	"#0.*callee\\.increment \\(val(=val@entry)?=99\\.0, msg=\\.\\.\\.\\).*"
     set re_different_entry_val \

to describe when the address is printed.  I noted that the address is
printed when sal.is_stmt is false as is currently the case on PowerPC. 

I will post version two of the patch for review.

Thanks for the help on this patch.

                                 Carl 


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Fix gdb.ada/O2_float_param.exp for PowerPC
  2023-08-04 22:56   ` Carl Love
@ 2023-08-10 16:13     ` Tom Tromey
  0 siblings, 0 replies; 4+ messages in thread
From: Tom Tromey @ 2023-08-10 16:13 UTC (permalink / raw)
  To: Carl Love via Gdb-patches
  Cc: Tom Tromey, Carl Love, Ulrich.Weigand, Tom de Vries

Carl> The function frame_show_address (frame, sal) returns true on PowerPC. 
Carl> The return statement for frame_show_address (frame, sal) is

Carl>    return get_frame_pc (frame) != sal.pc || !sal.is_stmt;

Carl> On PowerPC sal.is_stmt is false for this test but it is true on X86-64.

That seems strange as well.

Tom

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-08-10 16:13 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-04 15:21 [PATCH] Fix gdb.ada/O2_float_param.exp for PowerPC Carl Love
2023-08-04 16:05 ` Tom Tromey
2023-08-04 22:56   ` Carl Love
2023-08-10 16:13     ` Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).