From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7862) id 284EB385114F; Tue, 13 Sep 2022 12:08:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 284EB385114F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1663070890; bh=2/USwl28Fj4QiQe9ADPa3z+wfi4g+r8Y7X3zskY7hv0=; h=From:To:Subject:Date:From; b=lRPsbrYYbSC4YGyvD28dSWCsvG9j0avn+hl7g0gF7uaBJC+/o/31O1dCpyF6y8sTf 465doi2G5SEVVAO+/m24wgU4ZQ/Fb2xg89L6j7myfvGKjGtiHsQyaetC0GeYxuN3+t +8kdiBR3yKtV12/vIZoNzHmXQIOmci/EmctD6MA8= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Bruno Larsen To: gdb-cvs@sourceware.org Subject: [binutils-gdb] gdb/testsuite: introduce gdb_step_until X-Act-Checkin: binutils-gdb X-Git-Author: Bruno Larsen X-Git-Refname: refs/heads/master X-Git-Oldrev: 3f5bbc3e2075ef5061a815c73fdc277218489f22 X-Git-Newrev: 9db78678c7c08760fe1eff7d94a5989cf2fc4145 Message-Id: <20220913120810.284EB385114F@sourceware.org> Date: Tue, 13 Sep 2022 12:08:10 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D9db78678c7c0= 8760fe1eff7d94a5989cf2fc4145 commit 9db78678c7c08760fe1eff7d94a5989cf2fc4145 Author: Bruno Larsen Date: Wed Jul 20 16:44:26 2022 -0300 gdb/testsuite: introduce gdb_step_until =20 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. =20 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. =20 This patch only introduces this proc, but does not add it to any existing tests, these will be introduced in the following commit. Diff: --- 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 "" } =20 +# 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 =3D=3D "" } { + 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