public inbox for
help / color / mirror / Atom feed
From: Bruno Larsen <>
Subject: [binutils-gdb] gdb/testsuite: introduce gdb_step_until
Date: Tue, 13 Sep 2022 12:08:10 +0000 (GMT)	[thread overview]
Message-ID: <> (raw);h=9db78678c7c08760fe1eff7d94a5989cf2fc4145

commit 9db78678c7c08760fe1eff7d94a5989cf2fc4145
Author: Bruno Larsen <>
Date:   Wed Jul 20 16:44:26 2022 -0300

    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.

 gdb/testsuite/lib/gdb.exp | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 2f1147159ad..0f6bb20b49c 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

                 reply	other threads:[~2022-09-13 12:08 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).