From patchwork Tue Mar 28 12:23:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 67012 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 14EBD3858C1F for ; Tue, 28 Mar 2023 12:23:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 14EBD3858C1F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1680006213; bh=Z9VUB2kmRt9LMxyX1EXQFZxfJxio+3vUk6AU3Sfi/6w=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=sJ3EfMiEsPc0V4A3RR8bod2B8u+7fsWF3US/eofi2nSr3QhHMJwTLiBaMC5l4DnVm vaKN80swtGgb73G0SEgAtcFrnEaC84EVoyDlweJHxkHcN9Fp2RnODVD/4tf3ZadVF6 3t1NcqchbDhhbkbg+710cHrd0aidPOJfb5tEUzlY= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id DBFFE3858D39 for ; Tue, 28 Mar 2023 12:23:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DBFFE3858D39 Received: from localhost.localdomain (unknown [217.28.27.60]) (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 ESMTPSA id 815A01E0D2; Tue, 28 Mar 2023 08:23:06 -0400 (EDT) To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH] gdb/testsuite: allow "require" callbacks to provide a reason Date: Tue, 28 Mar 2023 08:23:05 -0400 Message-Id: <20230328122305.6108-1-simon.marchi@efficios.com> X-Mailer: git-send-email 2.40.0 MIME-Version: 1.0 X-Spam-Status: No, score=-1173.3 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_SOFTFAIL, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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: , X-Patchwork-Original-From: Simon Marchi via Gdb-patches From: Simon Marchi Reply-To: Simon Marchi Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" When an allow_* proc returns false, it can be a bit difficult what check failed exactly, if the procedure does multiple checks. To make investigation easier, I propose to allow the "require" callbacks to be able to return a list of two elements: the zero/non-zero value, and a reason string. Use the new feature in allow_hipcc_tests to demonstrate it (it's also where I hit actually hit this inconvenience). On my computer (where GDB is built with amd-dbgapi support but where I don't have a suitable GPU target), I get: UNSUPPORTED: gdb.rocm/simple.exp: require failed: allow_hipcc_tests (no suitable amdgpu targets found) vs before: UNSUPPORTED: gdb.rocm/simple.exp: require failed: allow_hipcc_tests Change-Id: Id1966535b87acfcbe9eac99f49dc1196398c6578 --- gdb/testsuite/lib/gdb.exp | 37 +++++++++++++++++++++++++++++-------- gdb/testsuite/lib/rocm.exp | 8 ++++---- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 46aa1441d6d0..7fb4f1cbdab4 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -9251,22 +9251,43 @@ gdb_caching_proc have_avx {} { # # ARG can either be a name, or of the form !NAME. # -# Each name is a proc to evaluate in the caller's context. It returns -# a boolean, and a "!" means to invert the result. If this is -# nonzero, all is well. If it is zero, an "untested" is emitted and -# this proc causes the caller to return. +# Each name is a proc to evaluate in the caller's context. It can return a +# boolean or a two element list with a boolean and a reason string. +# A "!" means to invert the result. If this is true, all is well. If it is +# false, an "unsupported" is emitted and this proc causes the caller to return. +# +# The reason string is used to provide some context about a require failure, +# and is included in the "unsupported" message. proc require { args } { foreach arg $args { if {[string index $arg 0] == "!"} { - set ok 0 + set required_val 0 set fn [string range $arg 1 end] } else { - set ok 1 + set required_val 1 set fn $arg } - if {$ok != !![uplevel 1 $fn]} { - unsupported "require failed: $arg" + + set result [uplevel 1 $fn] + set len [llength $result] + if { $len == 2 } { + set actual_val [lindex $result 0] + set msg [lindex $result 1] + } elseif { $len == 1 } { + set actual_val $result + set msg "" + } else { + error "proc $fn returned a list of unexpected length $len" + } + + if {$required_val != !!$actual_val} { + if { [string length $msg] > 0 } { + unsupported "require failed: $arg ($msg)" + } else { + unsupported "require failed: $arg" + } + return -code return 0 } } diff --git a/gdb/testsuite/lib/rocm.exp b/gdb/testsuite/lib/rocm.exp index b3e435339dbc..389d73bcaa5f 100644 --- a/gdb/testsuite/lib/rocm.exp +++ b/gdb/testsuite/lib/rocm.exp @@ -64,19 +64,19 @@ gdb_caching_proc allow_hipcc_tests {} { # testing against GDBserver, there's no point in running the ROCm # tests. if {[target_info gdb_protocol] != ""} { - return 0 + return {0 "remote debugging"} } # Ensure that GDB is built with amd-dbgapi support. set output [remote_exec host $::GDB "$::INTERNAL_GDBFLAGS --configuration"] if { [string first "--with-amd-dbgapi" $output] == -1 } { - return 0 + return {0 "amd-dbgapi not supported"} } # Check we have a working hipcc compiler available. set targets [hcc_amdgpu_targets] if { [llength $targets] == 0} { - return 0 + return {0 "no suitable amdgpu targets found"} } set flags [list hip additional_flags=--offload-arch=[join $targets ","]] @@ -93,7 +93,7 @@ gdb_caching_proc allow_hipcc_tests {} { return 0; } } executable $flags]} { - return 0 + return {0 "failed to compile hip program"} } return 1