gdb 13.2 update OBS-URL: https://build.opensuse.org/request/show/1093460 OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gdb?expand=0&rev=358
163 lines
5.7 KiB
Diff
163 lines
5.7 KiB
Diff
From d1e39adc6c93765434e8c6ddfe6192e85318241b Mon Sep 17 00:00:00 2001
|
|
From: Carl Love <cel@us.ibm.com>
|
|
Date: Wed, 1 Mar 2023 11:45:43 -0500
|
|
Subject: [PATCH 8/9] Move step_until procedure
|
|
|
|
Procedure step_until from test gdb.reverse/step-indirect-call-thunk.exp
|
|
is moved to lib/gdb.exp and renamed repeat_cmd_until. The existing procedure
|
|
gdb_step_until in lib/gdb.exp is simpler variant of the new repeat_cmd_until
|
|
procedure. The existing procedure gdb_step_until is changed to just call
|
|
the new repeat_cmd_until procedure with the command set to "step" and an
|
|
optional CURRENT string. The default CURRENT string is set to "\}" to work
|
|
with the existing uses of procedure gdb_step_until.
|
|
---
|
|
.../gdb.reverse/step-indirect-call-thunk.exp | 49 +++----------------
|
|
gdb/testsuite/lib/gdb.exp | 47 ++++++++++++------
|
|
2 files changed, 41 insertions(+), 55 deletions(-)
|
|
|
|
diff --git a/gdb/testsuite/gdb.reverse/step-indirect-call-thunk.exp b/gdb/testsuite/gdb.reverse/step-indirect-call-thunk.exp
|
|
index a9d22e45cfc..9970ff57a1b 100644
|
|
--- a/gdb/testsuite/gdb.reverse/step-indirect-call-thunk.exp
|
|
+++ b/gdb/testsuite/gdb.reverse/step-indirect-call-thunk.exp
|
|
@@ -30,39 +30,6 @@ if { ![runto_main] } {
|
|
return -1
|
|
}
|
|
|
|
-# Do repeated stepping COMMANDs in order to reach TARGET from CURRENT
|
|
-#
|
|
-# COMMAND is a stepping command
|
|
-# CURRENT is a string matching the current location
|
|
-# TARGET is a string matching the target location
|
|
-# TEST is the test name
|
|
-#
|
|
-# The function issues repeated COMMANDs as long as the location matches
|
|
-# CURRENT up to a maximum of 100 steps.
|
|
-#
|
|
-# TEST passes if the resulting location matches TARGET and fails
|
|
-# otherwise.
|
|
-#
|
|
-proc step_until { command current target test } {
|
|
- global gdb_prompt
|
|
-
|
|
- set count 0
|
|
- gdb_test_multiple "$command" "$test" {
|
|
- -re "$current.*$gdb_prompt $" {
|
|
- incr count
|
|
- if { $count < 100 } {
|
|
- send_gdb "$command\n"
|
|
- exp_continue
|
|
- } else {
|
|
- fail "$test"
|
|
- }
|
|
- }
|
|
- -re "$target.*$gdb_prompt $" {
|
|
- pass "$test"
|
|
- }
|
|
- }
|
|
-}
|
|
-
|
|
gdb_test_no_output "record"
|
|
gdb_test "next" ".*" "record trace"
|
|
|
|
@@ -82,20 +49,20 @@ gdb_test "reverse-next" "apply\.2.*" \
|
|
"reverse-step through thunks and over inc"
|
|
|
|
# We can use instruction stepping to step into thunks.
|
|
-step_until "stepi" "apply\.2" "indirect_thunk" "stepi into call thunk"
|
|
-step_until "stepi" "indirect_thunk" "inc" \
|
|
+repeat_cmd_until "stepi" "apply\.2" "indirect_thunk" "stepi into call thunk"
|
|
+repeat_cmd_until "stepi" "indirect_thunk" "inc" \
|
|
"stepi out of call thunk into inc"
|
|
set alphanum_re "\[a-zA-Z0-9\]"
|
|
set pic_thunk_re "__$alphanum_re*\\.get_pc_thunk\\.$alphanum_re* \\(\\)"
|
|
-step_until "stepi" "(inc|$pic_thunk_re)" "return_thunk" "stepi into return thunk"
|
|
-step_until "stepi" "return_thunk" "apply" \
|
|
+repeat_cmd_until "stepi" "(inc|$pic_thunk_re)" "return_thunk" "stepi into return thunk"
|
|
+repeat_cmd_until "stepi" "return_thunk" "apply" \
|
|
"stepi out of return thunk back into apply"
|
|
|
|
-step_until "reverse-stepi" "apply" "return_thunk" \
|
|
+repeat_cmd_until "reverse-stepi" "apply" "return_thunk" \
|
|
"reverse-stepi into return thunk"
|
|
-step_until "reverse-stepi" "return_thunk" "inc" \
|
|
+repeat_cmd_until "reverse-stepi" "return_thunk" "inc" \
|
|
"reverse-stepi out of return thunk into inc"
|
|
-step_until "reverse-stepi" "(inc|$pic_thunk_re)" "indirect_thunk" \
|
|
+repeat_cmd_until "reverse-stepi" "(inc|$pic_thunk_re)" "indirect_thunk" \
|
|
"reverse-stepi into call thunk"
|
|
-step_until "reverse-stepi" "indirect_thunk" "apply" \
|
|
+repeat_cmd_until "reverse-stepi" "indirect_thunk" "apply" \
|
|
"reverse-stepi out of call thunk into apply"
|
|
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
|
|
index cd043ce3436..b36d3a9d8c1 100644
|
|
--- a/gdb/testsuite/lib/gdb.exp
|
|
+++ b/gdb/testsuite/lib/gdb.exp
|
|
@@ -9336,31 +9336,50 @@ gdb_caching_proc arm_cc_for_target {
|
|
|
|
# Step until the pattern REGEXP is found. Step at most
|
|
# MAX_STEPS times, but stop stepping once REGEXP is found.
|
|
-#
|
|
+# CURRENT matches current location
|
|
# If REGEXP is found then a single pass is emitted, otherwise, after
|
|
# MAX_STEPS steps, a single fail is emitted.
|
|
#
|
|
# TEST_NAME is the name used in the pass/fail calls.
|
|
|
|
-proc gdb_step_until { regexp {test_name ""} {max_steps 10} } {
|
|
- if { $test_name == "" } {
|
|
- set test_name "stepping until regexp"
|
|
- }
|
|
+proc gdb_step_until { regexp {test_name "stepping until regexp"} \
|
|
+ {current "\}"} { max_steps 10 } } {
|
|
+ repeat_cmd_until "step" $current $regexp $test_name "10"
|
|
+}
|
|
+
|
|
+# Do repeated stepping COMMANDs in order to reach TARGET from CURRENT
|
|
+#
|
|
+# COMMAND is a stepping command
|
|
+# CURRENT is a string matching the current location
|
|
+# TARGET is a string matching the target location
|
|
+# TEST_NAME is the test name
|
|
+# MAX_STEPS is number of steps attempted before fail is emitted
|
|
+#
|
|
+# The function issues repeated COMMANDs as long as the location matches
|
|
+# CURRENT up to a maximum of MAX_STEPS.
|
|
+#
|
|
+# TEST_NAME passes if the resulting location matches TARGET and fails
|
|
+# otherwise.
|
|
+
|
|
+proc repeat_cmd_until { command current target \
|
|
+ {test_name "stepping until regexp"} \
|
|
+ {max_steps 100} } {
|
|
+ global gdb_prompt
|
|
|
|
set count 0
|
|
- gdb_test_multiple "step" "$test_name" {
|
|
- -re "$regexp\r\n$::gdb_prompt $" {
|
|
- pass $test_name
|
|
- }
|
|
- -re ".*$::gdb_prompt $" {
|
|
- if {$count < $max_steps} {
|
|
- incr count
|
|
- send_gdb "step\n"
|
|
+ gdb_test_multiple "$command" "$test_name" {
|
|
+ -re "$current.*$gdb_prompt $" {
|
|
+ incr count
|
|
+ if { $count < $max_steps } {
|
|
+ send_gdb "$command\n"
|
|
exp_continue
|
|
} else {
|
|
- fail $test_name
|
|
+ fail "$test_name"
|
|
}
|
|
}
|
|
+ -re "$target.*$gdb_prompt $" {
|
|
+ pass "$test_name"
|
|
+ }
|
|
}
|
|
}
|
|
|
|
--
|
|
2.35.3
|
|
|