From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com Received: by mail-io1-xd32.google.com with SMTP id ca18e2360f4ac-76c5c806fc5so32533739f.1 for ; Wed, 24 May 2023 09:37:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1684946250; x=1687538250; h=to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=KLaA2PwpqbnuGyG0pEhYLjMEAVaL+55VeJWqPFJo5h0=; b=FUg8rPjar0xjSmX4zSX+uTf7qIoogv0oALVqjhDQSiif+5fRwoFcGUoKhNM1HF0ZjF 8Ti+a27nkx9uJQa5Dskl69shq3ukyr+1NFe/EVnDwfj5yfKk2qv2dAZTltqjsvJAkX8l q740N9ccescnBQQ5TvnpoScUtfl/u+tU+s9UOGrDwCDY1sUnD2dHYvOuBAVSlp11RSAb QX/NcmLcv/t753eTMxHlFOGYA+HrQjBn1xVHQMXZ/KcULm0UXH0q6i/LXrTetowGBJku mBvmi5e/LV/FqORiCJcunjdNSZ0LRVdTasJSec5b/trm9Upf1PS+Rn6g0TWFmv4kD9PK iRyA== 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) From: Tom Tromey Date: Wed, 24 May 2023 10:37:01 -0600 Subject: [PATCH 10/25] Implement DAP attach request MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit 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 List-Id: 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. --- 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 -- 2.40.0