From patchwork Wed May 24 16:37:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 69972 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 4F6543857711 for ; Wed, 24 May 2023 16:39:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4F6543857711 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1684946355; bh=KLaA2PwpqbnuGyG0pEhYLjMEAVaL+55VeJWqPFJo5h0=; 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=OZdur4JjeNcM88ZIBpnb2zzl4BcLFVE7TwPb63MJuttcWWgXyzaX+VBk38HAH86IL Eby6Kjwyhp076nviIWrx221TvynN7aC0E0HlBQ18FsuuvpozUXXLmfAmqukCYI9C+l WrAbRoUF5AturD6ojTPkV50xvOhdltr6jnJE9wfs= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd32.google.com (mail-io1-xd32.google.com [IPv6:2607:f8b0:4864:20::d32]) by sourceware.org (Postfix) with ESMTPS id D80293857718 for ; Wed, 24 May 2023 16:37:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D80293857718 Received: by mail-io1-xd32.google.com with SMTP id ca18e2360f4ac-76c5c806fc5so32533739f.1 for ; Wed, 24 May 2023 09:37:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684946250; x=1687538250; 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=KLaA2PwpqbnuGyG0pEhYLjMEAVaL+55VeJWqPFJo5h0=; b=bgF+gJqgWRg30SzKvbmGS0Jf/iECrtM7nTvOcPJaAUb0h/NQsZTPsNxzIJuAfzELFQ O0YN2AuwKfXuz23A6ymzdX8K/ksZx4w34pr1E9BryWuCHl1kYuxgT8SN8QTeBi96U+wB GxDyoPGwQpzwaIMZTIL+yW5ZqQ7W67ruxpjG3oxi7Bu4Y0HsAl3K9ZZ1t6ccVL0r8xVF hYsTrPdifwN2U8rW37FHFVmlAdrZ6MaxTDIaCPNVUeak+RMgKhdLJlkv07VJQk94OUcN YUWqAsStexhuRKS9l8IwMb6JhEP0o+lB872oF+3m2TFKMr7tCFOrbWXA+G+OFoM7A8lp u8tg== X-Gm-Message-State: AC+VfDx+b+VPH554W6HS24ZbSxHnL78yVQUE2iM3Hy/bE9L2endXj/SB gvKXqi8W+akze1/QdhVM7C/MFDASY/MFf3L/Gmbk7g== X-Google-Smtp-Source: ACHHUZ63EG31vLqco/3BvYUWU188PLYfR3HTpduWCo9IKxViZ5dpSRywPWoSb8N2RuunH3yadSLfNw== X-Received: by 2002:a5d:8582:0:b0:76c:5641:136 with SMTP id f2-20020a5d8582000000b0076c56410136mr10698848ioj.0.1684946249955; Wed, 24 May 2023 09:37:29 -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.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 May 2023 09:37:29 -0700 (PDT) Date: Wed, 24 May 2023 10:37:01 -0600 Subject: [PATCH 10/25] Implement DAP attach request MIME-Version: 1.0 Message-Id: <20230427-ada-catch-exception-v1-10-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=-11.8 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 implements the DAP "attach" request. Note that the copyright dates on the new test source file are not incorrect -- this was copied verbatim from another directory. Reviewed-By: Eli Zaretskii --- gdb/doc/gdb.texinfo | 8 ++++++++ gdb/python/lib/gdb/dap/launch.py | 13 ++++++++++++- gdb/testsuite/gdb.dap/attach.c | 25 +++++++++++++++++++++++++ gdb/testsuite/gdb.dap/attach.exp | 36 ++++++++++++++++++++++++++++++++++++ gdb/testsuite/lib/dap-support.exp | 19 ++++++++++++++++--- 5 files changed, 97 insertions(+), 4 deletions(-) diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index d1059e0cb7f..1b967485bc6 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -39020,6 +39020,14 @@ 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: + +@table @code +@item pid +The process ID to which @value{GDBN} should attach. @xref{Attach}. +@end table + @node JIT Interface @chapter JIT Compilation Interface @cindex just-in-time compilation diff --git a/gdb/python/lib/gdb/dap/launch.py b/gdb/python/lib/gdb/dap/launch.py index 21499a339e1..a46be1dcca2 100644 --- a/gdb/python/lib/gdb/dap/launch.py +++ b/gdb/python/lib/gdb/dap/launch.py @@ -16,7 +16,7 @@ import gdb from .events import ExecutionInvoker from .server import request, capability -from .startup import send_gdb, in_gdb_thread +from .startup import send_gdb, send_gdb_with_response, in_gdb_thread _program = None @@ -45,6 +45,17 @@ def launch(*, program=None, args=[], env=None, **extra): send_gdb(lambda: _set_args_env(args, env)) +@request("attach") +def attach(*, pid, **args): + # Ensure configurationDone does not try to run. + global _program + _program = None + # Use send_gdb_with_response to ensure we get an error if the + # attach fails. + send_gdb_with_response("attach " + str(pid)) + return None + + @capability("supportsConfigurationDoneRequest") @request("configurationDone") def config_done(**args): diff --git a/gdb/testsuite/gdb.dap/attach.c b/gdb/testsuite/gdb.dap/attach.c new file mode 100644 index 00000000000..24c5283d1e6 --- /dev/null +++ b/gdb/testsuite/gdb.dap/attach.c @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2011-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 . */ + +#include + +int +main () +{ + sleep (600); + return 0; +} diff --git a/gdb/testsuite/gdb.dap/attach.exp b/gdb/testsuite/gdb.dap/attach.exp new file mode 100644 index 00000000000..5b308f94975 --- /dev/null +++ b/gdb/testsuite/gdb.dap/attach.exp @@ -0,0 +1,36 @@ +# 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" in DAP. + +require can_spawn_for_attach allow_dap_tests + +load_lib dap-support.exp + +standard_testfile + +if {[build_executable ${testfile}.exp $testfile] == -1} { + return +} + +set test_spawn_id [spawn_wait_for_attach $binfile] +set testpid [spawn_id_get_pid $test_spawn_id] + +# We just want to test that attaching works at all. +if {[dap_attach $testpid] != ""} { + dap_shutdown true +} + +kill_wait_spawned_process $test_spawn_id diff --git a/gdb/testsuite/lib/dap-support.exp b/gdb/testsuite/lib/dap-support.exp index ead295bdbfe..8667164fa11 100644 --- a/gdb/testsuite/lib/dap-support.exp +++ b/gdb/testsuite/lib/dap-support.exp @@ -270,9 +270,22 @@ proc dap_launch {file {args {}} {env {}}} { return [dap_check_request_and_response "startup - launch" launch $params] } -# Cleanly shut down gdb. NAME is used as the test name. -proc dap_shutdown {{name shutdown}} { - dap_check_request_and_response $name disconnect +# Start gdb, send a DAP initialize request, and then an attach request +# specifying PID as the inferior process ID. Returns the empty string +# on failure, or the response object from the attach request. +proc dap_attach {pid} { + if {[_dap_initialize "startup - initialize"] == ""} { + return "" + } + return [dap_check_request_and_response "startup - attach" attach \ + [format {o pid [i %s]} $pid]] +} + +# Cleanly shut down gdb. TERMINATE is passed as the terminateDebuggee +# parameter to the request. +proc dap_shutdown {{terminate false}} { + dap_check_request_and_response "shutdown" disconnect \ + [format {o terminateDebuggee [l %s]} $terminate] } # Search the event list EVENTS for an output event matching the regexp