aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Larsen <blarsen@redhat.com>2022-07-20 16:44:26 -0300
committerBruno Larsen <blarsen@redhat.com>2022-09-13 14:02:20 +0200
commit9db78678c7c08760fe1eff7d94a5989cf2fc4145 (patch)
tree461bb2069b862c2bafcc84468a4de31c0a9bedba
parent3f5bbc3e2075ef5061a815c73fdc277218489f22 (diff)
downloadbinutils-9db78678c7c08760fe1eff7d94a5989cf2fc4145.zip
binutils-9db78678c7c08760fe1eff7d94a5989cf2fc4145.tar.gz
binutils-9db78678c7c08760fe1eff7d94a5989cf2fc4145.tar.bz2
gdb/testsuite: introduce gdb_step_until
Currently, GDB's testsuite uses a set amount of step commands to exit functions. This is a problem if a compiler emits different epilogue information from gcc, or emits no epilogue information at all. It was most noticeable if Clang was used to test GDB. To fix this unreliability, this commit introduces a new proc that will step the inferior until it is stopped at a line that matches the given regexp, or until it steps too many times - defined as an optional argument. If the line is found, it shows up as a single PASS in the test, and if the line is not found, a single FAIL is emitted. This patch only introduces this proc, but does not add it to any existing tests, these will be introduced in the following commit.
-rw-r--r--gdb/testsuite/lib/gdb.exp30
1 files changed, 30 insertions, 0 deletions
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 2f11471..0f6bb20 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -8842,5 +8842,35 @@ gdb_caching_proc arm_cc_for_target {
return ""
}
+# Step until the pattern REGEXP is found. Step at most
+# MAX_STEPS times, but stop stepping once REGEXP is found.
+#
+# 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"
+ }
+
+ 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"
+ exp_continue
+ } else {
+ fail $test_name
+ }
+ }
+ }
+}
+
# Always load compatibility stuff.
load_lib future.exp