From patchwork Wed May 24 16:37:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 69982 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 BF0BD388265A for ; Wed, 24 May 2023 16:40:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BF0BD388265A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1684946455; bh=PFqn5VuIDU8D36QEOVEuy2lW4cztNU99+5y+t5mkdkw=; 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=GjAEPKE3Zu16wfv+UDWuCh4vntjNIl7D7EhotU3dCTXFtgbr6FTto8yd3EE1VRAUx ly5eHFK17bY9uqQbOq8MRRxx5D31N7F4Gs5CN3zhh7KOWhmI6zrXeWB4XcioI3RzZE mGysAb/GgLH/0HW8bAmeJDPUpox3hWV/6Q0GA5Us= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd36.google.com (mail-io1-xd36.google.com [IPv6:2607:f8b0:4864:20::d36]) by sourceware.org (Postfix) with ESMTPS id 8FB2A385772B for ; Wed, 24 May 2023 16:37:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8FB2A385772B Received: by mail-io1-xd36.google.com with SMTP id ca18e2360f4ac-77483a5a350so30979039f.0 for ; Wed, 24 May 2023 09:37:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684946257; x=1687538257; 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=PFqn5VuIDU8D36QEOVEuy2lW4cztNU99+5y+t5mkdkw=; b=F7AzlBWjQpnYYuSxrApAzUm6mmwXml/y3ywolhk5d1Soz5ikvlVNlmh6xQ+GYeuZ0c gxepftqW8tjMRmmseD6B+zrzo+FUTnnCtdbikpcmEBMSg5JamGgvDtxg+Qdoql57EWZu VDAsq2vr8GC+kJQvrObQxf+Rbdy143IDG9ZDXxEaw7RRwNH9YXa1aJGj5MgWNXlnIvRY bLYNe4xe1/787ao8HTJAcE9N2xM3D14OqcaN8kX93EledGZr44791FQXRRh5+ogXeD1k 9jj2dxTPXbrQ3wAaecExfKCRbyW+0x7CuVsrLTLPJuG260/V5M27wMhESgoCLmBEgzYt HqXA== X-Gm-Message-State: AC+VfDxHufmsPJYS3d1uoZwZ26H9vq6wOWLeglm2mCfeY5m+Qgs172AC erOsqt2sn+ESvc4dD+lIrFwBa6LPYQ7g+sQO+f4Hiw== X-Google-Smtp-Source: ACHHUZ6q1rqjtKVOuw54FGWRnWfXaa2sePwSDdjhDgAIaNnamu+/gxPRKdr3PJ4TBLSOPJnBdGIePw== X-Received: by 2002:a5e:9241:0:b0:76c:5694:5c2e with SMTP id z1-20020a5e9241000000b0076c56945c2emr10921472iop.13.1684946256832; 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.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 May 2023 09:37:36 -0700 (PDT) Date: Wed, 24 May 2023 10:37:12 -0600 Subject: [PATCH 21/25] Add "target" parameter to DAP attach request MIME-Version: 1.0 Message-Id: <20230427-ada-catch-exception-v1-21-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, KAM_SHORT, 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" This adds a new "target" to the DAP attach request. This is passed to "target remote". I thought "attach" made the most sense for this, because in some sense gdb is attaching to a running process. It's worth noting that all DAP "attach" parameters are defined by the implementation. Reviewed-By: Eli Zaretskii --- gdb/doc/gdb.texinfo | 8 ++++-- gdb/python/lib/gdb/dap/launch.py | 10 ++++++-- gdb/testsuite/gdb.dap/remote-dap.exp | 49 ++++++++++++++++++++++++++++++++++++ gdb/testsuite/lib/dap-support.exp | 11 ++++++++ 4 files changed, 74 insertions(+), 4 deletions(-) diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 1b967485bc6..f66dd4df3cf 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -39020,12 +39020,16 @@ If provided, this is a string that specifies the program to use. This corresponds to the @code{file} command. @xref{Files}. @end table -@value{GDBN} defines a parameter that can be passed to the -@code{attach} request: +@value{GDBN} defines some parameters that can be passed to the +@code{attach} request. One of these must be specified. @table @code @item pid The process ID to which @value{GDBN} should attach. @xref{Attach}. + +@item target +The target to which @value{GDBN} should connect. This is a string and +is passed to the @code{target remote} command. @xref{Connecting}. @end table @node JIT Interface diff --git a/gdb/python/lib/gdb/dap/launch.py b/gdb/python/lib/gdb/dap/launch.py index e187c3144d7..2fec3267cbb 100644 --- a/gdb/python/lib/gdb/dap/launch.py +++ b/gdb/python/lib/gdb/dap/launch.py @@ -56,13 +56,19 @@ def launch( @request("attach") -def attach(*, pid: int, **args): +def attach(*, pid: Optional[int] = None, target: Optional[str] = None, **args): # Ensure configurationDone does not try to run. global _program _program = None + if pid is not None: + cmd = "attach " + str(pid) + elif target is not None: + cmd = "target remote " + target + else: + raise Exception("attach requires either 'pid' or 'target'") # Use send_gdb_with_response to ensure we get an error if the # attach fails. - send_gdb_with_response("attach " + str(pid)) + send_gdb_with_response(cmd) return None diff --git a/gdb/testsuite/gdb.dap/remote-dap.exp b/gdb/testsuite/gdb.dap/remote-dap.exp new file mode 100644 index 00000000000..33524082051 --- /dev/null +++ b/gdb/testsuite/gdb.dap/remote-dap.exp @@ -0,0 +1,49 @@ +# Copyright 2023 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Test "attach" with a remote target in DAP. + +load_lib gdbserver-support.exp +load_lib dap-support.exp + +require allow_dap_tests allow_gdbserver_tests +# We want to have control over where we start gdbserver. +require {!is_remote target} + +# This test is only for remote targets. +if {[target_info exists gdb_protocol] + && [target_info gdb_protocol] != "remote"} { + unsupported "requires remote" + return +} + +standard_testfile attach.c + +if {[build_executable ${testfile}.exp $testfile $srcfile] == -1} { + return +} + +set target_exec [gdb_remote_download target [standard_output_file $testfile]] + +lassign [gdbserver_start "" $target_exec] protocol port +# Really should have been caught up above. +gdb_assert {$protocol == "remote"} + +# We just want to test that attaching works at all. +if {[dap_target_remote $port] != ""} { + dap_shutdown true +} + +close_gdbserver diff --git a/gdb/testsuite/lib/dap-support.exp b/gdb/testsuite/lib/dap-support.exp index 5c547480d09..e1fada8b703 100644 --- a/gdb/testsuite/lib/dap-support.exp +++ b/gdb/testsuite/lib/dap-support.exp @@ -283,6 +283,17 @@ proc dap_attach {pid} { [format {o pid [i %s]} $pid]] } +# Start gdb, send a DAP initialize request, and then an attach request +# specifying TARGET as the remote target. Returns the empty string on +# failure, or the response object from the attach request. +proc dap_target_remote {target} { + if {[_dap_initialize "startup - initialize"] == ""} { + return "" + } + return [dap_check_request_and_response "startup - target" attach \ + [format {o target [s %s]} $target]] +} + # Cleanly shut down gdb. TERMINATE is passed as the terminateDebuggee # parameter to the request. proc dap_shutdown {{terminate false}} {