From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id wJ4mJYhb2GJkTRcAWB0awg (envelope-from ) for ; Wed, 20 Jul 2022 15:46:16 -0400 Received: by simark.ca (Postfix, from userid 112) id 950C31E5EA; Wed, 20 Jul 2022 15:46:16 -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=uk5bDXPm; 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=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RDNS_DYNAMIC,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from sourceware.org (ip-8-43-85-97.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 174041E21F for ; Wed, 20 Jul 2022 15:46:16 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BC01C385414E for ; Wed, 20 Jul 2022 19:46:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BC01C385414E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1658346375; bh=MFLI8vBzc95MKNWvc6e4yGJ7KC9rO8VoCOodL2fe6gQ=; 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=uk5bDXPmO9MAGJY12xKGPi8PZWqbROa779EacZ3XTBfhEJesc/oPDA/vB5qffiL50 AGJcsGLnXpa5Ieg6Lgebd66Q6PCqOAEulDBrtlpY2LpnLNs/V3aLFbYzQ4qQGJi/PR sgqZYqdVW+kF4xMLultsr7Ln918KPs6jInUifRsc= Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 625DC38582AD for ; Wed, 20 Jul 2022 19:45:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 625DC38582AD Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-665-N2g4u_abPMqmto2CNhhA3g-1; Wed, 20 Jul 2022 15:44:59 -0400 X-MC-Unique: N2g4u_abPMqmto2CNhhA3g-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id EC94F185A794 for ; Wed, 20 Jul 2022 19:44:58 +0000 (UTC) Received: from blarsen.com (ovpn-116-8.gru2.redhat.com [10.97.116.8]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2648640C141D; Wed, 20 Jul 2022 19:44:57 +0000 (UTC) To: gdb-patches@sourceware.org Subject: [PATCH v4 03/15] Change gdb.base/skip-solib.exp deal with lack of epilogue information Date: Wed, 20 Jul 2022 16:44:29 -0300 Message-Id: <20220720194441.168906-5-blarsen@redhat.com> In-Reply-To: <20220720194441.168906-1-blarsen@redhat.com> References: <20220720194441.168906-1-blarsen@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.11.54.2 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" When running gdb.base/skip-solib.exp, the backtrace tests could fail with compilers that associated epilogue instructions with the last statement line of the function, instead of associating it with the closing brace, despite the feature being fully functional. As an example, when testing skipping the function square, the testsuite would show Breakpoint 1, main () at (...)/binutils-gdb/gdb/testsuite/gdb.base/skip-solib-main.c:5 5 return square(0); (gdb) step 0x00007ffff7cef560 in __libc_start_call_main () from /lib64/libc.so.6 (gdb) PASS: gdb.base/skip-solib.exp: ignoring solib file: step bt #0 0x00007ffff7cef560 in __libc_start_call_main () from /lib64/libc.so.6 #1 0x00007ffff7cef60c in __libc_start_main_impl () from /lib64/libc.so.6 #2 0x0000000000401065 in _start () (gdb) FAIL: gdb.base/skip-solib.exp: ignoring solib file: bt Which means that the feature is working, the testsuite is just mis-identifying it. To avoid this problem, the skipped function calls have been sent to a line before `return`, so epilogues won't factor in. This commit has also changed a few hardcoded steps to leave functions to the newly introduced gdb_step_until to leave those functions. --- gdb/testsuite/gdb.base/skip-inline.exp | 23 ++++++++++++++++------- gdb/testsuite/gdb.base/skip-solib-lib.c | 3 ++- gdb/testsuite/gdb.base/skip-solib-main.c | 3 ++- gdb/testsuite/gdb.base/skip-solib.exp | 12 ++++++++++-- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/gdb/testsuite/gdb.base/skip-inline.exp b/gdb/testsuite/gdb.base/skip-inline.exp index f6e9926b66c..3fbaa5469dd 100644 --- a/gdb/testsuite/gdb.base/skip-inline.exp +++ b/gdb/testsuite/gdb.base/skip-inline.exp @@ -15,6 +15,11 @@ standard_testfile +set epilogue 1 +if {![have_epilogue_line_info]} { + set epilogue 0 +} + if { [prepare_for_testing "failed to prepare" "skip-inline" \ {skip-inline.c skip1.c } \ {debug nowarnings}] } { @@ -35,16 +40,20 @@ gdb_test "skip function foo" "Function foo will be skipped when stepping\." gdb_test "bt" "\\s*\\#0\\s+main.*" "in the main" gdb_test "step" ".*" "step into baz, since foo will be skipped" gdb_test "bt" "\\s*\\#0\\s+baz.*" "in the baz, since foo was skipped" -gdb_test "step" ".*" "step in the baz" -gdb_test "bt" "\\s*\\#0\\s+baz.*" "still in the baz" -gdb_test "step" ".*" "step back to main" +gdb_step_until ".*x = 0; x = baz \\(foo \\(\\)\\).*" gdb_test "bt" "\\s*\\#0\\s+main.*" "again in the main" gdb_test "step" ".*" "step again into baz, since foo will be skipped" gdb_test "bt" "\\s*\\#0\\s+baz.*" "again in the baz" -gdb_test "step" ".*" "step in the baz, again" -gdb_test "bt" "\\s*\\#0\\s+baz.*" "still in the baz, again" -gdb_test "step" ".*" "step back to main, again" -gdb_test "bt" "\\s*\\#0\\s+main.*" "again back to main" +gdb_step_until "main \\(\\) at .*" "step back to main, again" +gdb_test "bt" "\\s*\\#0.*main.*" "again back to main" + +# Because clang doesn't add epilogue information, having a set number of +# steps puts clang more and more out of sync with gcc. It is unlikely that +# the effort of keeping both outputs will be useful. +if {$epilogue == 0} { + untested "Multiple steps tests are not supported with this compiler" + return +} if ![runto_main] { return diff --git a/gdb/testsuite/gdb.base/skip-solib-lib.c b/gdb/testsuite/gdb.base/skip-solib-lib.c index b2c4d86d703..341f1440a3b 100644 --- a/gdb/testsuite/gdb.base/skip-solib-lib.c +++ b/gdb/testsuite/gdb.base/skip-solib-lib.c @@ -7,5 +7,6 @@ int multiply(int a, int b) int square(int num) { - return multiply(num, num); + int res = multiply(num, num); + return res; } diff --git a/gdb/testsuite/gdb.base/skip-solib-main.c b/gdb/testsuite/gdb.base/skip-solib-main.c index 746bb5f36bb..a3b6d417935 100644 --- a/gdb/testsuite/gdb.base/skip-solib-main.c +++ b/gdb/testsuite/gdb.base/skip-solib-main.c @@ -2,5 +2,6 @@ int square(int num); int main() { - return square(0); + int s = square(0); + return s; } diff --git a/gdb/testsuite/gdb.base/skip-solib.exp b/gdb/testsuite/gdb.base/skip-solib.exp index 0f2ce7e1ad8..8e61725ad1b 100644 --- a/gdb/testsuite/gdb.base/skip-solib.exp +++ b/gdb/testsuite/gdb.base/skip-solib.exp @@ -82,7 +82,7 @@ with_test_prefix "ignoring solib file" { # We shouldn't step into square(), since we skipped skip-solib-lib.c. # gdb_test "step" "" - gdb_test "bt" "#0\\s+main.*" + gdb_test "bt 1" "#0\\s+main.*" } # @@ -114,5 +114,13 @@ with_test_prefix "ignoring solib function" { # the last line of square. # gdb_test "step" "" - gdb_test "bt" "#0\\s+square.*" + gdb_test "bt 1" "#0\\s+square.*" "skipped multiply" +# gdb_test_multiple "bt 1" "skipped multiply" { +# -re "#0\\s+square.*" { +# pass "skipped multiply" +# } +# -re "#0.*main.*" { +# pass "skipped multiply" +# } +# } } -- 2.31.1