gdb/gdb-testsuite-add-pr-gdb-26967-kfail-in-two-more-tes.patch

168 lines
5.4 KiB
Diff

From fb2b155e33f5a21259c52685ee9b24f75ac66e75 Mon Sep 17 00:00:00 2001
From: Tom de Vries <tdevries@suse.de>
Date: Wed, 20 Mar 2024 19:23:48 +0100
Subject: [PATCH 10/48] [gdb/testsuite] Add PR gdb/26967 KFAIL in two more
test-cases
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").
Factor out new proc have_longjmp_probe, and use it to add similar KFAIL in
this and one more test-case.
Tested on aarch64-linux.
Approved-By: Tom Tromey <tom@tromey.com>
---
.../gdb.base/longjmp-until-in-main.exp | 24 ++++++++++++++++---
gdb/testsuite/gdb.base/longjmp.exp | 11 +--------
.../premature-dummy-frame-removal.exp | 22 ++++++++++++++++-
gdb/testsuite/lib/gdb.exp | 19 +++++++++++++++
4 files changed, 62 insertions(+), 14 deletions(-)
diff --git a/gdb/testsuite/gdb.base/longjmp-until-in-main.exp b/gdb/testsuite/gdb.base/longjmp-until-in-main.exp
index c0635f23345..6167989319a 100644
--- a/gdb/testsuite/gdb.base/longjmp-until-in-main.exp
+++ b/gdb/testsuite/gdb.base/longjmp-until-in-main.exp
@@ -35,10 +35,28 @@ if {![runto_main]} {
return
}
+set have_longjmp_probe [have_longjmp_probe]
+
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/longjmp.exp b/gdb/testsuite/gdb.base/longjmp.exp
index f74891aa7ca..0420f4df675 100644
--- a/gdb/testsuite/gdb.base/longjmp.exp
+++ b/gdb/testsuite/gdb.base/longjmp.exp
@@ -62,16 +62,7 @@ proc do_test { with_probes } {
#
# We detect the different failure modes and kfail these.
- 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 have_longjmp_probe [have_longjmp_probe]
if { $with_probes } {
if { !$have_longjmp_probe } {
diff --git a/gdb/testsuite/gdb.base/premature-dummy-frame-removal.exp b/gdb/testsuite/gdb.base/premature-dummy-frame-removal.exp
index fe906cefb14..6979345ee45 100644
--- a/gdb/testsuite/gdb.base/premature-dummy-frame-removal.exp
+++ b/gdb/testsuite/gdb.base/premature-dummy-frame-removal.exp
@@ -49,7 +49,27 @@ 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 [have_longjmp_probe]
+
+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
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 21967550cf6..70c2db4ac84 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -4615,6 +4615,25 @@ proc skip_libstdcxx_probe_tests {} {
return [skip_libstdcxx_probe_tests_prompt "$gdb_prompt $"]
}
+# Return 1 if libc supports the longjmp probe. Note that we're not using
+# gdb_caching_proc because the probe may have been disabled.
+
+proc have_longjmp_probe {} {
+ set have_probe -1
+ gdb_test_multiple "info probes stap libc ^longjmp$" "" {
+ -re -wrap "No probes matched\\." {
+ set have_probe 0
+ }
+ -re -wrap "\r\nstap\[ \t\]+libc\[ \t\]+longjmp\[ \t\]+.*" {
+ set have_probe 1
+ }
+ }
+ if { $have_probe == -1 } {
+ error "failed to get libc longjmp probe status"
+ }
+ return $have_probe
+}
+
# Helper for gdb_is_target_* procs. TARGET_NAME is the name of the target
# we're looking for (used to build the test name). TARGET_STACK_REGEXP
# is a regexp that will match the output of "maint print target-stack" if
--
2.35.3