From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id UJsEOMaYj2JThQgAWB0awg (envelope-from ) for ; Thu, 26 May 2022 11:12:06 -0400 Received: by simark.ca (Postfix, from userid 112) id DF3C31E220; Thu, 26 May 2022 11:12:06 -0400 (EDT) Authentication-Results: simark.ca; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=QLFTl/ZQ; dkim-atps=neutral X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-3.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 7A3D61E01D for ; Thu, 26 May 2022 11:12:06 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 29EC93857430 for ; Thu, 26 May 2022 15:12:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 29EC93857430 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1653577926; bh=M5phmRLVdZVvS0lULlqQlKzHOwt6x1INPNcZPeiJjdo=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=QLFTl/ZQeCGEzgXpdefTpGWoTHnxUaUwp9BRY1Qh+nX6U6HaWCQdX+X63XOHNZUtZ g8ZsUmx+cOFURCrg/YHs2Vt454N1azPGnH1aWD8egI0hfQY8xZ/CoIgm7x1sANntfV u7vVeZvlhF24mfcCNCR5t6kRks7zuHkrwFbJ0gdM= Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 29DE63857425 for ; Thu, 26 May 2022 15:11:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 29DE63857425 Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-324-AvoZGbB7MnG3mhUnUTvvMw-1; Thu, 26 May 2022 11:11:10 -0400 X-MC-Unique: AvoZGbB7MnG3mhUnUTvvMw-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 874393C1014B for ; Thu, 26 May 2022 15:11:10 +0000 (UTC) Received: from blarsen.com (ovpn-116-42.gru2.redhat.com [10.97.116.42]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C09212026D64; Thu, 26 May 2022 15:11:09 +0000 (UTC) To: gdb-patches@sourceware.org Subject: [PATCH v3 01/14] gdb/testsuite: introduce gdb_step_until_regexp Date: Thu, 26 May 2022 12:10:28 -0300 Message-Id: <20220526151041.23223-2-blarsen@redhat.com> In-Reply-To: <20220526151041.23223-1-blarsen@redhat.com> References: <20220526151041.23223-1-blarsen@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Bruno Larsen via Gdb-patches Reply-To: Bruno Larsen Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" 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. --- No change in v3 New patch in v2 --- 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 b04fbb89e4e..c0ca1d04cc2 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -8648,5 +8648,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