From patchwork Wed May 24 16:37:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 69985 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 B3EBB3850404 for ; Wed, 24 May 2023 16:41:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B3EBB3850404 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1684946490; bh=MTI6s+eTgbZF9pdd0TYJIEPhScyIHTW3I1EBD1u9py4=; h=Date:Subject:References:In-Reply-To:To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=dY/Dc3qHfQEIXQXGih85Bmje0woDJh2x04i1+aQTy3EFyfNojbhMZ3oqZSx1ymXjY ZuUZljQHa6JgRYRp8aky65L+uWCEtf4M2XLQAb6jOVlzxIX62iWpKC6kWKRDasVwpY J4UHrHJ5qrqVj2NaurM7ipXv1kNo+OMp+GEKu2u8= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd31.google.com (mail-io1-xd31.google.com [IPv6:2607:f8b0:4864:20::d31]) by sourceware.org (Postfix) with ESMTPS id 897963858D28 for ; Wed, 24 May 2023 16:37:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 897963858D28 Received: by mail-io1-xd31.google.com with SMTP id ca18e2360f4ac-76c75d32005so31317639f.1 for ; Wed, 24 May 2023 09:37:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684946256; x=1687538256; h=to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MTI6s+eTgbZF9pdd0TYJIEPhScyIHTW3I1EBD1u9py4=; b=Q9sv3JFeWqpXp9BfszZgaXhSFqdXNFY3/7AOS0V18lVE0YoZaMO5+vAU83AuH1FumM qW1ddgLiKbH/48BkiQMY0sVpTvRoSg6zBmwd+RFNCfSchgqFoG21CF08grPWG0Wk9NTb gwcJgHmkeqBjcFYNBbyhQcS90FBI/enn7pjjqr2UieL9J7QpYf+St82//2TVDZ9tRQUM m8ljHfTmza+vRTfAnPK+auUwjBwILR30ktqTd0NkAR77iCCxqys6szvHqPyzn0tl1jW2 sEkZrpugbTymIRpiTFuN6F/a/sf6Cl8YO126rVJHSXWliREtdo91EN0FhyWjWcz4sWNg ioZw== X-Gm-Message-State: AC+VfDw+x+4A+aXqQzS+0JQwERI0ysJEh1XksZcFTTjRtri0FC+PbSWm UV4VexE4aAl1TpDLP4/todeg+d8DgUjJXc+3pEBixA== X-Google-Smtp-Source: ACHHUZ7F21+Ey/vlkitdE9MQi2NqbPdWH08NWaafRi/Lv5a1IO1uKVWtYs+wusOGKInx48xbmxBHzQ== X-Received: by 2002:a05:6602:2202:b0:760:ced3:4481 with SMTP id n2-20020a056602220200b00760ced34481mr10501694ion.4.1684946256224; Wed, 24 May 2023 09:37:36 -0700 (PDT) Received: from localhost.localdomain (71-211-130-244.hlrn.qwest.net. [71.211.130.244]) by smtp.gmail.com with ESMTPSA id o22-20020a6bcf16000000b0076c81bf2731sm3397266ioa.20.2023.05.24.09.37.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 May 2023 09:37:35 -0700 (PDT) Date: Wed, 24 May 2023 10:37:11 -0600 Subject: [PATCH 20/25] Handle DAP supportsVariableType capability MIME-Version: 1.0 Message-Id: <20230427-ada-catch-exception-v1-20-947caa9905e3@adacore.com> References: <20230427-ada-catch-exception-v1-0-947caa9905e3@adacore.com> In-Reply-To: <20230427-ada-catch-exception-v1-0-947caa9905e3@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.2 X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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: Tom Tromey via Gdb-patches From: Tom Tromey Reply-To: Tom Tromey Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" A DAP client can report the supportsVariableType in the initialize request. In this case, gdb can include the type of a variable or expression in various results. --- gdb/python/lib/gdb/dap/evaluate.py | 1 - gdb/python/lib/gdb/dap/server.py | 11 +++++++++++ gdb/python/lib/gdb/dap/varref.py | 3 +++ gdb/testsuite/gdb.dap/basic-dap.exp | 3 ++- gdb/testsuite/lib/dap-support.exp | 4 +++- 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/gdb/python/lib/gdb/dap/evaluate.py b/gdb/python/lib/gdb/dap/evaluate.py index 1db6962f8e0..2b400651b67 100644 --- a/gdb/python/lib/gdb/dap/evaluate.py +++ b/gdb/python/lib/gdb/dap/evaluate.py @@ -70,7 +70,6 @@ def _repl(command, frame_id): } -# FIXME supportsVariableType handling @request("evaluate") def eval_request( *, diff --git a/gdb/python/lib/gdb/dap/server.py b/gdb/python/lib/gdb/dap/server.py index be66676f730..b1c75ab967f 100644 --- a/gdb/python/lib/gdb/dap/server.py +++ b/gdb/python/lib/gdb/dap/server.py @@ -186,6 +186,17 @@ def capability(name, value=True): return wrap +def client_bool_capability(name): + """Return the value of a boolean client capability. + + If the capability was not specified, or did not have boolean type, + False is returned.""" + global _server + if name in _server.config and isinstance(_server.config[name], bool): + return _server.config[name] + return False + + @request("initialize") def initialize(**args): global _server, _capabilities diff --git a/gdb/python/lib/gdb/dap/varref.py b/gdb/python/lib/gdb/dap/varref.py index 88c34c20468..23f18d647c3 100644 --- a/gdb/python/lib/gdb/dap/varref.py +++ b/gdb/python/lib/gdb/dap/varref.py @@ -15,6 +15,7 @@ import gdb from .startup import in_gdb_thread +from .server import client_bool_capability from abc import abstractmethod @@ -165,6 +166,8 @@ class VariableReference(BaseReference): result["memoryReference"] = hex(int(self.value)) elif self.value.address is not None: result["memoryReference"] = hex(int(self.value.address)) + if client_bool_capability("supportsVariableType"): + result["type"] = str(self.value.type) return result @in_gdb_thread diff --git a/gdb/testsuite/gdb.dap/basic-dap.exp b/gdb/testsuite/gdb.dap/basic-dap.exp index 9aaa94051e6..ca0d1be9f12 100644 --- a/gdb/testsuite/gdb.dap/basic-dap.exp +++ b/gdb/testsuite/gdb.dap/basic-dap.exp @@ -162,7 +162,8 @@ dap_match_values "global value in main" [lindex $obj 0] \ set obj [dap_check_request_and_response "set global in main" \ setExpression {o expression [s global_variable] value [s 23]}] dap_match_values "global value in main after set" [lindex $obj 0] \ - "body result" 23 + "body result" 23 \ + "body type" int set obj [dap_request_and_response \ evaluate {o expression [s nosuchvariable]}] diff --git a/gdb/testsuite/lib/dap-support.exp b/gdb/testsuite/lib/dap-support.exp index 8667164fa11..5c547480d09 100644 --- a/gdb/testsuite/lib/dap-support.exp +++ b/gdb/testsuite/lib/dap-support.exp @@ -230,7 +230,9 @@ proc _dap_initialize {name} { if {[dap_gdb_start]} { return "" } - return [dap_check_request_and_response $name initialize] + return [dap_check_request_and_response $name initialize \ + {o clientID [s "gdb testsuite"] \ + supportsVariableType [l true]}] } # Start gdb, send a DAP initialize request, and then a launch request