aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2023-07-24 10:12:17 -0600
committerTom Tromey <tromey@adacore.com>2023-08-01 12:52:26 -0600
commit7abfd03742d2cea591dca940aa748e865f906018 (patch)
treea0d520d1a3540bbb222b99264ab6459f8a2f916c
parentf3337b1e944f379fb30e1e1639586d9392096795 (diff)
downloadbinutils-7abfd03742d2cea591dca940aa748e865f906018.zip
binutils-7abfd03742d2cea591dca940aa748e865f906018.tar.gz
binutils-7abfd03742d2cea591dca940aa748e865f906018.tar.bz2
Refactor dap_launch
This patch refactors dap_launch to make it more extensible and also easier to use.
-rw-r--r--gdb/testsuite/gdb.dap/args-env.exp2
-rw-r--r--gdb/testsuite/gdb.dap/stop-at-main.exp2
-rw-r--r--gdb/testsuite/lib/dap-support.exp67
3 files changed, 43 insertions, 28 deletions
diff --git a/gdb/testsuite/gdb.dap/args-env.exp b/gdb/testsuite/gdb.dap/args-env.exp
index 96fbb28..ae6cf2e 100644
--- a/gdb/testsuite/gdb.dap/args-env.exp
+++ b/gdb/testsuite/gdb.dap/args-env.exp
@@ -25,7 +25,7 @@ if {[build_executable ${testfile}.exp $testfile] == -1} {
return
}
-if {[dap_launch $testfile {a "b c"} {{DEI something}}] == ""} {
+if {[dap_launch $testfile arguments {a "b c"} env {{DEI something}}] == ""} {
return
}
diff --git a/gdb/testsuite/gdb.dap/stop-at-main.exp b/gdb/testsuite/gdb.dap/stop-at-main.exp
index 80a9b81..3f22f4a 100644
--- a/gdb/testsuite/gdb.dap/stop-at-main.exp
+++ b/gdb/testsuite/gdb.dap/stop-at-main.exp
@@ -25,7 +25,7 @@ if {[build_executable ${testfile}.exp $testfile $srcfile] == -1} {
return
}
-if {[dap_launch $testfile {} {} 1] == ""} {
+if {[dap_launch $testfile stop_at_main 1] == ""} {
return
}
diff --git a/gdb/testsuite/lib/dap-support.exp b/gdb/testsuite/lib/dap-support.exp
index e3750e1..4a1a288 100644
--- a/gdb/testsuite/lib/dap-support.exp
+++ b/gdb/testsuite/lib/dap-support.exp
@@ -239,40 +239,55 @@ proc _dap_initialize {name} {
# Start gdb, send a DAP initialize request, and then a launch request
# specifying FILE as the program to use for the inferior. Returns the
# empty string on failure, or the response object from the launch
-# request. If specified, ARGS is a list of command-line arguments,
-# and ENV is a list of pairs of the form {VAR VALUE} that is used to
-# populate the inferior's environment. After this is called, gdb will
-# be ready to accept breakpoint requests. If STOP_AT_MAIN is nonzero,
-# pass "stopAtBeginningOfMainSubprogram" to the launch request.
-proc dap_launch {file {args {}} {env {}} {stop_at_main 0}} {
+# request. If specified, ARGS is a dictionary of key-value pairs,
+# each passed to the launch request. Valid keys are:
+# * arguments - value is a list of strings passed as command-line
+# arguments to the inferior
+# * env - value is a list of pairs of the form {VAR VALUE} that is
+# used to populate the inferior's environment.
+# * stop_at_main - value is ignored, the presence of this means that
+# "stopAtBeginningOfMainSubprogram" will be passed to the launch
+# request.
+#
+# After this proc is called, gdb will be ready to accept breakpoint
+# requests.
+proc dap_launch {file {args {}}} {
if {[_dap_initialize "startup - initialize"] == ""} {
return ""
}
set params "o program"
append params " [format {[%s]} [list s [standard_output_file $file]]]"
- if {[llength $args] > 0} {
- append params " args"
- set arglist ""
- foreach arg $args {
- append arglist " \[s [list $arg]\]"
- }
- append params " \[a $arglist\]"
- }
+ foreach {key value} $args {
+ switch -exact -- $key {
+ arguments {
+ append params " args"
+ set arglist ""
+ foreach arg $value {
+ append arglist " \[s [list $arg]\]"
+ }
+ append params " \[a $arglist\]"
+ }
- if {[llength $env] > 0} {
- append params " env"
- set envlist ""
- foreach pair $env {
- lassign $pair var value
- append envlist " $var"
- append envlist " [format {[%s]} [list s $value]]"
- }
- append params " \[o $envlist\]"
- }
+ env {
+ append params " env"
+ set envlist ""
+ foreach pair $value {
+ lassign $pair var value
+ append envlist " $var"
+ append envlist " [format {[%s]} [list s $value]]"
+ }
+ append params " \[o $envlist\]"
+ }
+
+ stop_at_main {
+ append params { stopAtBeginningOfMainSubprogram [l true]}
+ }
- if {$stop_at_main} {
- append params { stopAtBeginningOfMainSubprogram [l true]}
+ default {
+ error "unrecognized parameter $key"
+ }
+ }
}
return [dap_check_request_and_response "startup - launch" launch $params]