[gdb/testsuite] Add PR gdb/26967 KFAIL in two more test-cases

Message ID 20240319074449.10361-1-tdevries@suse.de
State Superseded
Headers
Series [gdb/testsuite] Add PR gdb/26967 KFAIL in two more test-cases |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_gdb_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_check--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_check--master-aarch64 success Testing passed

Commit Message

Tom de Vries March 19, 2024, 7:44 a.m. UTC
  On aarch64-linux (debian 12), when running test-case
gdb.base/longjmp-until-in-main.exp, I run into:
...
(gdb) until 33^M
warning: Breakpoint address adjusted from 0x70f727c678928489 to 0xfff727c678928489.^M
Warning:^M
Cannot insert breakpoint 0.^M
Cannot access memory at address 0xfff727c678928489^M
^M
0x0000fffff7e3a580 in siglongjmp () from /lib/aarch64-linux-gnu/libc.so.6^M
(gdb) FAIL: gdb.base/longjmp-until-in-main.exp: until $line, in main
...

This is PR gdb/26967: no longjmp probe is available:
...
(gdb) info probes stap libc ^longjmp$^M
No probes matched.^M
...
and glibc applies pointer mangling which makes it fairly difficult for gdb to
get the longjmp target.

There's a KFAIL for this in test-case gdb.base/longjmp.exp, added in commit
b5e7cd5cd3d ("[gdb/testsuite] Add KFAILs in gdb.base/longjmp.exp").

Likewise, add a KFAIL in this and one more test-case.

Tested on aarch64-linux.
---
 .../gdb.base/longjmp-until-in-main.exp        | 33 +++++++++++++++++--
 .../premature-dummy-frame-removal.exp         | 31 ++++++++++++++++-
 2 files changed, 60 insertions(+), 4 deletions(-)


base-commit: a8354784a88cab5ddc212d9d2b9d51a4abd1d12d
  

Comments

Tom Tromey March 19, 2024, 1:29 p.m. UTC | #1
>>>>> "Tom" == Tom de Vries <tdevries@suse.de> writes:

Tom> +set have_longjmp_probe 0
Tom> +gdb_test_multiple "info probes stap libc ^longjmp$" "" {
Tom> +    -re -wrap "No probes matched\\." {
Tom> +	pass $gdb_test_name
Tom> +    }
Tom> +    -re -wrap "\r\nstap\[ \t\]+libc\[ \t\]+longjmp\[ \t\]+.*" {
Tom> +	pass $gdb_test_name
Tom> +	set have_longjmp_probe 1
Tom> +    }
Tom> +}

Rather than repeating this code, it's better to put it into a helper
proc of some kind.

Tom
  
Tom de Vries March 20, 2024, 9:15 a.m. UTC | #2
On 3/19/24 14:29, Tom Tromey wrote:
>>>>>> "Tom" == Tom de Vries <tdevries@suse.de> writes:
> 
> Tom> +set have_longjmp_probe 0
> Tom> +gdb_test_multiple "info probes stap libc ^longjmp$" "" {
> Tom> +    -re -wrap "No probes matched\\." {
> Tom> +	pass $gdb_test_name
> Tom> +    }
> Tom> +    -re -wrap "\r\nstap\[ \t\]+libc\[ \t\]+longjmp\[ \t\]+.*" {
> Tom> +	pass $gdb_test_name
> Tom> +	set have_longjmp_probe 1
> Tom> +    }
> Tom> +}
> 
> Rather than repeating this code, it's better to put it into a helper
> proc of some kind.
> 

Ack, fixed in a v2 submitted here ( 
https://sourceware.org/pipermail/gdb-patches/2024-March/207377.html ).

Thanks,
- Tom
  

Patch

diff --git a/gdb/testsuite/gdb.base/longjmp-until-in-main.exp b/gdb/testsuite/gdb.base/longjmp-until-in-main.exp
index d755c86ed88..2a28b78d412 100644
--- a/gdb/testsuite/gdb.base/longjmp-until-in-main.exp
+++ b/gdb/testsuite/gdb.base/longjmp-until-in-main.exp
@@ -35,10 +35,37 @@  if {![runto_main]} {
     return
 }
 
+set have_longjmp_probe 0
+gdb_test_multiple "info probes stap libc ^longjmp$" "" {
+    -re -wrap "No probes matched\\." {
+	pass $gdb_test_name
+    }
+    -re -wrap "\r\nstap\[ \t\]+libc\[ \t\]+longjmp\[ \t\]+.*" {
+	pass $gdb_test_name
+	set have_longjmp_probe 1
+    }
+}
+
 delete_breakpoints
 
 set until_to_line [gdb_get_line_number "until to here"]
 
-gdb_test "until $until_to_line" \
-    " until to here .*" \
-    "until \$line, in main"
+set re_cannot_insert_bp \
+    [multi_line \
+	 "Warning:" \
+	 "Cannot insert breakpoint $::decimal\\." \
+	 "Cannot access memory at address $::hex"]
+
+set test "until \$line, in main"
+gdb_test_multiple "until $until_to_line" $test {
+    -re -wrap "\r\n$re_cannot_insert_bp\r\n.*" {
+	if { $have_longjmp_probe } {
+	    fail $gdb_test_name
+	} else {
+	    kfail gdb/26967 $gdb_test_name
+	}
+    }
+    -re -wrap " until to here .*" {
+	pass $gdb_test_name
+    }
+}
diff --git a/gdb/testsuite/gdb.base/premature-dummy-frame-removal.exp b/gdb/testsuite/gdb.base/premature-dummy-frame-removal.exp
index 100c24aae20..a641fd66c06 100644
--- a/gdb/testsuite/gdb.base/premature-dummy-frame-removal.exp
+++ b/gdb/testsuite/gdb.base/premature-dummy-frame-removal.exp
@@ -49,7 +49,36 @@  if {![runto_main]} {
 set pyfile [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py]
 gdb_test_no_output "source ${pyfile}" "load python file"
 
-gdb_test "p some_func ()" " = 0"
+set have_longjmp_probe 0
+gdb_test_multiple "info probes stap libc ^longjmp$" "" {
+    -re -wrap "No probes matched\\." {
+	pass $gdb_test_name
+    }
+    -re -wrap "\r\nstap\[ \t\]+libc\[ \t\]+longjmp\[ \t\]+.*" {
+	pass $gdb_test_name
+	set have_longjmp_probe 1
+    }
+}
+
+set re_cannot_insert_bp \
+    [multi_line \
+	 "Warning:" \
+	 "Cannot insert breakpoint $::decimal\\." \
+	 "Cannot access memory at address $::hex"]
+
+gdb_test_multiple "p some_func ()" "" {
+    -re -wrap "\r\n$re_cannot_insert_bp\r\n.*" {
+	if { $have_longjmp_probe } {
+	    fail $gdb_test_name
+	} else {
+	    kfail gdb/26967 $gdb_test_name
+	    return 0
+	}
+    }
+    -re -wrap " = 0" {
+	pass $gdb_test_name
+    }
+}
 
 # When frame debugging is turned on, this test has (previously)
 # revealed some crashes due to the Python frame unwinder trying to