public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Bruno Larsen <blarsen@redhat.com>
To: gdb-patches@sourceware.org
Subject: [PATCH v2 01/11] gdb/testsuite: introduce gdb_step_until_regexp
Date: Mon, 11 Apr 2022 17:13:23 -0300	[thread overview]
Message-ID: <20220411201333.81453-2-blarsen@redhat.com> (raw)
In-Reply-To: <20220411201333.81453-1-blarsen@redhat.com>

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
single 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 2eb711748e7..c48c5919a61 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -8506,5 +8506,35 @@ proc get_set_option_choices {set_cmd} {
     return $values
 }
 
+# This proc is used mainly to exit function in a compiler agnostic way
+# It makes gdb single step and evaluate the output at every step, to see
+# if the regexp is present.
+#
+# The proc takes 2 optional arguments, the first being the name of the
+# test and the second the maximum amount of iterations until we expect to
+# see the function. The default is 10 steps, since this is meant as the
+# last step by default, and we don't expect any compiler generated epilogue
+# longer than 10 steps.
+
+proc gdb_step_until_regexp { regexp {test_name "single stepping until regexp"} {max_steps 10} } {
+    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"
+		exp_continue
+	    } else {
+		fail $test_name
+	    }
+	}
+    }
+}
+
 # Always load compatibility stuff.
 load_lib future.exp
-- 
2.31.1


  reply	other threads:[~2022-04-11 20:14 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-11 20:13 [PATCH v2 00/11] gdb/testsuite: Cleanup gdb.base for clang testing Bruno Larsen
2022-04-11 20:13 ` Bruno Larsen [this message]
2022-04-11 20:13 ` [PATCH v2 02/11] Change gdb.base/skip-solib.exp deal with lack of epilogue information Bruno Larsen
2022-04-11 20:13 ` [PATCH v2 03/11] change gdb.base/skip.exp to use finish instead of step Bruno Larsen
2022-04-12 18:11   ` Bruno Larsen
2022-05-17 16:38   ` Bruno Larsen
2022-04-11 20:13 ` [PATCH v2 04/11] change gdb.base/symbol-alias to xfail with clang Bruno Larsen
2022-04-11 20:13 ` [PATCH v2 05/11] change gdb.base/nodebug.c to not fail " Bruno Larsen
2022-04-11 20:13 ` [PATCH v2 06/11] update gdb.base/info-program.exp " Bruno Larsen
2022-04-11 20:13 ` [PATCH v2 07/11] fix gdb.base/access-mem-running.exp for clang testing Bruno Larsen
2022-04-11 20:13 ` [PATCH v2 08/11] Fix gdb.base/call-ar-st to work with Clang Bruno Larsen
2022-04-11 20:13 ` [PATCH v2 09/11] add xfails to gdb.base/complex-parts.exp when testing with clang Bruno Larsen
2022-04-11 20:13 ` [PATCH v2 10/11] gdb/testsuite: fix gdb.base/msym-bp-shl when running with Clang Bruno Larsen
2022-04-11 20:13 ` [PATCH v2 11/11] explicitly test for stderr in gdb.base/dprintf.exp Bruno Larsen
2022-04-26 13:17 ` [PING] [PATCH v2 00/11] gdb/testsuite: Cleanup gdb.base for clang testing Bruno Larsen
2022-05-03 20:43   ` [PINGv2] " Bruno Larsen
2022-05-10 20:06     ` [PINGv3] " Bruno Larsen

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:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

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

  git send-email \
    --in-reply-to=20220411201333.81453-2-blarsen@redhat.com \
    --to=blarsen@redhat.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* 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).