* [PATCH] Add 'program' to DAP 'attach' request
@ 2023-12-12 14:33 Tom Tromey
2023-12-12 14:51 ` Eli Zaretskii
2023-12-22 16:05 ` Tom Tromey
0 siblings, 2 replies; 3+ messages in thread
From: Tom Tromey @ 2023-12-12 14:33 UTC (permalink / raw)
To: gdb-patches; +Cc: Tom Tromey
In many cases, it's not possible for gdb to discover the executable
when a DAP 'attach' request is used. This patch lets the IDE supply
this information.
---
gdb/NEWS | 2 ++
gdb/doc/gdb.texinfo | 11 ++++++++++-
gdb/python/lib/gdb/dap/launch.py | 25 +++++++++++++++++++++----
gdb/testsuite/gdb.dap/attach.exp | 2 +-
gdb/testsuite/lib/dap-support.exp | 11 ++++++++---
5 files changed, 42 insertions(+), 9 deletions(-)
diff --git a/gdb/NEWS b/gdb/NEWS
index 534e2e7f364..3c17d09203d 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -88,6 +88,8 @@ show remote thread-options-packet
** GDB now supports the "cancel" request.
+ ** The "attach" request now supports specifying the program.
+
* New remote packets
New stop reason: clone
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 6e4adf512ee..be79b34ad2c 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -39579,12 +39579,21 @@ the same approach as the @code{start} command. @xref{Starting}.
@end table
@value{GDBN} defines some parameters that can be passed to the
-@code{attach} request. One of these must be specified.
+@code{attach} request. Either @code{pid} or @code{target} must be
+specified, but if both are specified then @code{target} will be
+ignored.
@table @code
@item pid
The process ID to which @value{GDBN} should attach. @xref{Attach}.
+@item program
+If provided, this is a string that specifies the program to use. This
+corresponds to the @code{file} command. @xref{Files}. In some cases,
+@value{GDBN} can automatically determine which program is running.
+However, for many remote targets, this is not the case, and so this
+should be supplied.
+
@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}.
diff --git a/gdb/python/lib/gdb/dap/launch.py b/gdb/python/lib/gdb/dap/launch.py
index 7014047ff51..675542c92d0 100644
--- a/gdb/python/lib/gdb/dap/launch.py
+++ b/gdb/python/lib/gdb/dap/launch.py
@@ -28,6 +28,11 @@ from .startup import exec_and_log
_program = None
+# True if the program was attached, False otherwise. This should only
+# be accessed from the gdb thread.
+_attach = False
+
+
# Any parameters here are necessarily extensions -- DAP requires this
# from implementations. Any additions or changes here should be
# documented in the gdb manual.
@@ -43,6 +48,8 @@ def launch(
):
global _program
_program = program
+ global _attach
+ _attach = False
if cwd is not None:
exec_and_log("cd " + cwd)
if program is not None:
@@ -60,10 +67,20 @@ def launch(
@request("attach")
-def attach(*, pid: Optional[int] = None, target: Optional[str] = None, **args):
+def attach(
+ *,
+ program: Optional[str] = None,
+ pid: Optional[int] = None,
+ target: Optional[str] = None,
+ **args,
+):
# Ensure configurationDone does not try to run.
+ global _attach
+ _attach = True
global _program
- _program = None
+ _program = program
+ if program is not None:
+ exec_and_log("file " + program)
if pid is not None:
cmd = "attach " + str(pid)
elif target is not None:
@@ -77,7 +94,7 @@ def attach(*, pid: Optional[int] = None, target: Optional[str] = None, **args):
@capability("supportsConfigurationDoneRequest")
@request("configurationDone", response=False)
def config_done(**args):
- global _program
- if _program is not None:
+ global _attach
+ if not _attach:
expect_process("process")
exec_and_expect_stop("run")
diff --git a/gdb/testsuite/gdb.dap/attach.exp b/gdb/testsuite/gdb.dap/attach.exp
index 5b308f94975..4d562711f09 100644
--- a/gdb/testsuite/gdb.dap/attach.exp
+++ b/gdb/testsuite/gdb.dap/attach.exp
@@ -29,7 +29,7 @@ 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] != ""} {
+if {[dap_attach $testpid $binfile] != ""} {
dap_shutdown true
}
diff --git a/gdb/testsuite/lib/dap-support.exp b/gdb/testsuite/lib/dap-support.exp
index b9ac314fee5..8186148ee0a 100644
--- a/gdb/testsuite/lib/dap-support.exp
+++ b/gdb/testsuite/lib/dap-support.exp
@@ -306,12 +306,17 @@ proc dap_launch {file {args {}}} {
# 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} {
+proc dap_attach {pid {prog ""}} {
if {[_dap_initialize "startup - initialize"] == ""} {
return ""
}
- return [dap_check_request_and_response "startup - attach" attach \
- [format {o pid [i %s]} $pid]]
+
+ set args [format {o pid [i %s]} $pid]
+ if {$prog != ""} {
+ append args [format { program [s %s]} $prog]
+ }
+
+ return [dap_check_request_and_response "startup - attach" attach $args]
}
# Start gdb, send a DAP initialize request, and then an attach request
--
2.43.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Add 'program' to DAP 'attach' request
2023-12-12 14:33 [PATCH] Add 'program' to DAP 'attach' request Tom Tromey
@ 2023-12-12 14:51 ` Eli Zaretskii
2023-12-22 16:05 ` Tom Tromey
1 sibling, 0 replies; 3+ messages in thread
From: Eli Zaretskii @ 2023-12-12 14:51 UTC (permalink / raw)
To: Tom Tromey; +Cc: gdb-patches
> From: Tom Tromey <tromey@adacore.com>
> Cc: Tom Tromey <tromey@adacore.com>
> Date: Tue, 12 Dec 2023 07:33:57 -0700
>
> In many cases, it's not possible for gdb to discover the executable
> when a DAP 'attach' request is used. This patch lets the IDE supply
> this information.
> ---
> gdb/NEWS | 2 ++
> gdb/doc/gdb.texinfo | 11 ++++++++++-
> gdb/python/lib/gdb/dap/launch.py | 25 +++++++++++++++++++++----
> gdb/testsuite/gdb.dap/attach.exp | 2 +-
> gdb/testsuite/lib/dap-support.exp | 11 ++++++++---
> 5 files changed, 42 insertions(+), 9 deletions(-)
The documentation parts are OK, thanks.
Reviewed-By: Eli Zaretskii <eliz@gnu.org>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Add 'program' to DAP 'attach' request
2023-12-12 14:33 [PATCH] Add 'program' to DAP 'attach' request Tom Tromey
2023-12-12 14:51 ` Eli Zaretskii
@ 2023-12-22 16:05 ` Tom Tromey
1 sibling, 0 replies; 3+ messages in thread
From: Tom Tromey @ 2023-12-22 16:05 UTC (permalink / raw)
To: Tom Tromey; +Cc: gdb-patches
>>>>> "Tom" == Tom Tromey <tromey@adacore.com> writes:
Tom> In many cases, it's not possible for gdb to discover the executable
Tom> when a DAP 'attach' request is used. This patch lets the IDE supply
Tom> this information.
I'm checking this in.
Tom
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-12-22 16:05 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-12 14:33 [PATCH] Add 'program' to DAP 'attach' request Tom Tromey
2023-12-12 14:51 ` Eli Zaretskii
2023-12-22 16:05 ` Tom Tromey
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).