diff options
author | Christina Schimpe <christina.schimpe@intel.com> | 2021-11-18 16:13:16 +0000 |
---|---|---|
committer | Christina Schimpe <christina.schimpe@intel.com> | 2023-01-30 12:45:31 +0100 |
commit | ff52c0736a637fec4938f4b957bc8847c709b13c (patch) | |
tree | 51f0d7e28e085c92694e534fe5b7ed8f127c321e /gdb/testsuite | |
parent | 594a01c217143dce2f1f3181bcca4047b4a44107 (diff) | |
download | binutils-ff52c0736a637fec4938f4b957bc8847c709b13c.zip binutils-ff52c0736a637fec4938f4b957bc8847c709b13c.tar.gz binutils-ff52c0736a637fec4938f4b957bc8847c709b13c.tar.bz2 |
gdb: Make global feature array a per-remote target array
This patch applies the appropriate FIXME notes described in commit 5b6d1e4
"Multi-target support".
"You'll notice that remote.c includes some FIXME notes. These refer to
the fact that the global arrays that hold data for the remote packets
supported are still globals. For example, if we connect to two
different servers/stubs, then each might support different remote
protocol features. They might even be different architectures, like
e.g., one ARM baremetal stub, and a x86 gdbserver, to debug a
host/controller scenario as a single program. That isn't going to
work correctly today, because of said globals. I'm leaving fixing
that for another pass, since it does not appear to be trivial, and I'd
rather land the base work first. It's already useful to be able to
debug multiple instances of the same server (e.g., a distributed
cluster, where you have full control over the servers installed), so I
think as is it's already reasonable incremental progress."
Using this patch it is possible to configure per-remote targets'
feature packets.
Given the following setup for two gdbservers:
~~~~
gdbserver --multi :1234
gdbserver --disable-packet=vCont --multi :2345
~~~~
Before this patch configuring of range-stepping was not possible for one
of two connected remote targets with different support for the vCont
packet. As one of the targets supports vCont, it should be possible to
configure "set range-stepping". However, the output of GDB looks like:
(gdb) target extended-remote :1234
Remote debugging using :1234
(gdb) add-inferior -no-connection
[New inferior 2]
Added inferior 2
(gdb) inferior 2
[Switching to inferior 2 [<null>] (<noexec>)]
(gdb) target extended-remote :2345
Remote debugging using :2345
(gdb) set range-stepping on
warning: Range stepping is not supported by the current target
(gdb) inferior 1
[Switching to inferior 1 [<null>] (<noexec>)]
(gdb) set range-stepping on
warning: Range stepping is not supported by the current target
~~~~
Two warnings are shown. The warning for inferior 1 should not appear
as it is connected to a target supporting the vCont package.
~~~~
(gdb) target extended-remote :1234
Remote debugging using :1234
(gdb) add-inferior -no-connection
[New inferior 2]
Added inferior 2
(gdb) inferior 2
[Switching to inferior 2 [<null>] (<noexec>)]
(gdb) target extended-remote :2345
Remote debugging using :2345
(gdb) set range-stepping on
warning: Range stepping is not supported by the current target
(gdb) inferior 1
[Switching to inferior 1 [<null>] (<noexec>)]
(gdb) set range-stepping on
(gdb)
~~~~
Now only one warning is shown for inferior 2, which is connected to
a target not supporting vCont.
The per-remote target feature array is realized by a new class
remote_features, which stores the per-remote target array and
provides functions to determine supported features of the target.
A remote_target object now has a new member of that class.
Each time a new remote_target object is initialized, a new per-remote
target array is constructed based on the global remote_protocol_packets
array. The global array is initialized in the function _initialize_remote
and can be configured using the command line. Before this patch the
command line configuration affected current targets and future remote
targets (due to the global feature array used by all remote
targets). This behavior is different and the configuration applies as
follows:
- If a target is connected, the command line configuration affects the
current connection. All other existing remote targets are not
affected.
- If not connected, the command line configuration affects future
connections.
The show command displays the current remote target's configuration. If no
remote target is selected the default configuration for future
connections is shown.
If we have for instance the following setup with inferior 2 being
selected:
~~~~
(gdb) info inferiors
Num Description Connection Executable
1 <null> 1 (extended-remote :1234)
* 2 <null> 2 (extended-remote :2345)
~~~~
Before this patch, if we run 'set remote multiprocess-feature-packet', the
following configuration was set:
The feature array of all remote targets (in this setup the two connected
targets) and all future remote connections are affected.
After this patch, it will be configured as follows:
The feature array of target with port :2345 which is currently selected
will be configured. All other existing remote targets are not affected.
The show command 'show remote multiprocess-feature-packet' will display
the configuration of target with port :2345.
Due to this configuration change, it is required to adapt the test
"gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp" to configure the
multiprocess-feature-packet before the connections are created.
To inform the gdb user about the new behaviour of the 'show remote
PACKET-NAME' commands and the new configuration impact for remote
targets using the 'set remote PACKET-NAME' commands the commands'
outputs are adapted. Due to this change it is required to adapt each
test using the set/show remote 'PACKET-NAME' commands.
Diffstat (limited to 'gdb/testsuite')
18 files changed, 79 insertions, 28 deletions
diff --git a/gdb/testsuite/gdb.base/cond-eval-mode.exp b/gdb/testsuite/gdb.base/cond-eval-mode.exp index 16fb067..49f9fc7 100644 --- a/gdb/testsuite/gdb.base/cond-eval-mode.exp +++ b/gdb/testsuite/gdb.base/cond-eval-mode.exp @@ -59,13 +59,18 @@ gdb_test_multiple $test_target $test_target { # evaluation. Now make sure we can force-disable the # ConditionalBreakpoints RSP feature. if [gdb_is_target_remote] { - gdb_test_no_output "set remote conditional-breakpoints-packet off" + gdb_test \ + "set remote conditional-breakpoints-packet off" \ + "Support for the 'ConditionalBreakpoints' packet on the current remote target is set to \"off\"." gdb_test $test_target "$warning" \ "set breakpoint condition-evaluation target, with support disabled" # Confirm we can re-enable it. - gdb_test_no_output "set remote conditional-breakpoints-packet on" + gdb_test \ + "set remote conditional-breakpoints-packet on" \ + "Support for the 'ConditionalBreakpoints' packet on the current remote target is set to \"on\"." + gdb_test_no_output $test_target "restore $test_target" } diff --git a/gdb/testsuite/gdb.base/dprintf.exp b/gdb/testsuite/gdb.base/dprintf.exp index 99cb505..2d838e7 100644 --- a/gdb/testsuite/gdb.base/dprintf.exp +++ b/gdb/testsuite/gdb.base/dprintf.exp @@ -214,7 +214,10 @@ gdb_test "set dprintf-style foobar" "Undefined item: \"foobar\"." \ # as expected. dprintf relies on support for target-side breakpoint # commands --- use it as proxy. if [gdb_is_target_remote] { - gdb_test_no_output "set remote breakpoint-commands-packet off" + gdb_test \ + "set remote breakpoint-commands-packet off" \ + "Support for the 'BreakpointCommands' packet on the current remote target is set to \"off\"." + gdb_test "set dprintf-style agent" \ "warning: Target cannot run dprintf commands.*" \ "set dprintf-style agent, with feature disabled" diff --git a/gdb/testsuite/gdb.base/find-unmapped.exp b/gdb/testsuite/gdb.base/find-unmapped.exp index 1cf1152..dd747d5 100644 --- a/gdb/testsuite/gdb.base/find-unmapped.exp +++ b/gdb/testsuite/gdb.base/find-unmapped.exp @@ -78,7 +78,10 @@ if {[target_info gdb_protocol] == "remote" || [target_info gdb_protocol] == "extended-remote"} { test_not_found 0 with_test_prefix "search-memory-packet off" { - gdb_test_no_output "set remote search-memory-packet off" + gdb_test \ + "set remote search-memory-packet off" \ + "Support for the 'qSearch:memory' packet on the current remote target is set to \"off\"." + test_not_found 0 } } else { diff --git a/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.exp b/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.exp index cf4083b..e0c29fb 100644 --- a/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.exp +++ b/gdb/testsuite/gdb.base/hbreak-in-shr-unsupported.exp @@ -52,7 +52,9 @@ gdb_test_no_output "set breakpoint always-inserted on" # Force-disable Z1 packets, in case the target actually supports # these. if {$is_target_remote} { - gdb_test_no_output "set remote Z-packet off" + gdb_test \ + "set remote Z-packet off" \ + "Use of Z packets on the current remote target is set to \"off\"." } # Probe for hw breakpoints support. With Z packets disabled, this diff --git a/gdb/testsuite/gdb.base/remote.exp b/gdb/testsuite/gdb.base/remote.exp index a1c9973..b9b05de 100644 --- a/gdb/testsuite/gdb.base/remote.exp +++ b/gdb/testsuite/gdb.base/remote.exp @@ -198,7 +198,7 @@ gdb_test_no_output "set remote hardware-breakpoint-limit 2147483647" # Check the X/P/p alias commands display the correct packet names. foreach pkt {X P p} { - gdb_test "show remote ${pkt}-packet" "Support for the `${pkt}' packet is.*" + gdb_test "show remote ${pkt}-packet" "Support for the '${pkt}' packet on the current remote target is .*" } gdb_exit diff --git a/gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp b/gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp index 487d209..0dffde2 100644 --- a/gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp +++ b/gdb/testsuite/gdb.multi/multi-target-info-inferiors.exp @@ -30,15 +30,13 @@ set run_python_tests [allow_python_tests] # indicates whether the multi-process feature of remote targets is # turned off or on. proc test_info_inferiors {multi_process} { - setup "off" + + setup "off" $multi_process if { $::run_python_tests } { gdb_test_no_output "source ${::remote_python_file}" "load python file" } - gdb_test_no_output \ - "set remote multiprocess-feature-packet $multi_process" - # Get the description for inferior INF for when the current # inferior id is CURRENT. proc inf_desc {inf current} { diff --git a/gdb/testsuite/gdb.multi/multi-target.exp.tcl b/gdb/testsuite/gdb.multi/multi-target.exp.tcl index 2356b6c..1c03834 100644 --- a/gdb/testsuite/gdb.multi/multi-target.exp.tcl +++ b/gdb/testsuite/gdb.multi/multi-target.exp.tcl @@ -104,7 +104,7 @@ proc cleanup_gdbservers { } { # Return true on success, false otherwise. -proc setup {non-stop} { +proc setup {non-stop {multi_process ""}} { global gcorefile gcore_created global binfile @@ -123,6 +123,12 @@ proc setup {non-stop} { gdb_test_no_output "set non-stop ${non-stop}" + if {${multi_process} ne ""} then { + gdb_test \ + "set remote multiprocess-feature-packet $multi_process" \ + "Support for the 'multiprocess-feature' packet on future remote targets is set to \"${multi_process}\"." + } + if ![runto all_started] then { return 0 } diff --git a/gdb/testsuite/gdb.server/connect-without-multi-process.exp b/gdb/testsuite/gdb.server/connect-without-multi-process.exp index fcd64c9..4591371 100644 --- a/gdb/testsuite/gdb.server/connect-without-multi-process.exp +++ b/gdb/testsuite/gdb.server/connect-without-multi-process.exp @@ -45,7 +45,9 @@ proc do_test {multiprocess} { # extended-remote board, therefore already connected. gdb_test "disconnect" ".*" - gdb_test_no_output "set remote multiprocess-feature $multiprocess" + gdb_test \ + "set remote multiprocess-feature $multiprocess" \ + "Support for the 'multiprocess-feature' packet on future remote targets is set to \"$multiprocess\"." set res [gdbserver_spawn ""] set gdbserver_protocol [lindex $res 0] diff --git a/gdb/testsuite/gdb.server/exit-multiple-threads.exp b/gdb/testsuite/gdb.server/exit-multiple-threads.exp index 46239e3..87867f0 100644 --- a/gdb/testsuite/gdb.server/exit-multiple-threads.exp +++ b/gdb/testsuite/gdb.server/exit-multiple-threads.exp @@ -54,9 +54,14 @@ proc prepare_for_test { executable disable_multi_process } { # Disable XML-based thread listing, and possible the multi-process # extensions. - gdb_test_no_output "set remote threads-packet off" + gdb_test \ + "set remote threads-packet off" \ + "Support for the 'qXfer:threads:read' packet on future remote targets is set to \"off\"." + if { $disable_multi_process } { - gdb_test_no_output "set remote multiprocess-feature-packet off" + gdb_test \ + "set remote multiprocess-feature-packet off" \ + "Support for the 'multiprocess-feature' packet on future remote targets is set to \"off\"." } # Start gdbserver and connect. diff --git a/gdb/testsuite/gdb.server/ext-restart.exp b/gdb/testsuite/gdb.server/ext-restart.exp index 5b6aa70..a9e84ff 100644 --- a/gdb/testsuite/gdb.server/ext-restart.exp +++ b/gdb/testsuite/gdb.server/ext-restart.exp @@ -51,7 +51,10 @@ gdb_test "run" "Breakpoint.* main .*" "run to main" with_test_prefix "restart" { # Disable vRun packet and clear remote exec-file, so that GDB will # use R packet to restart the process. - gdb_test_no_output "set remote run-packet off" + gdb_test \ + "set remote run-packet off" \ + "Support for the 'vRun' packet on the current remote target is set to \"off\"." + gdb_test_no_output "set remote exec-file" set test "run to main" diff --git a/gdb/testsuite/gdb.server/ext-wrapper.exp b/gdb/testsuite/gdb.server/ext-wrapper.exp index 2fe601a..316b742 100644 --- a/gdb/testsuite/gdb.server/ext-wrapper.exp +++ b/gdb/testsuite/gdb.server/ext-wrapper.exp @@ -55,7 +55,10 @@ gdb_test "print d" "\\$${decimal} = ${hex} \"1\".*" with_test_prefix "restart" { # Disable vRun packet and clear remote exec-file, so that GDB will # use R packet to restart the process. - gdb_test_no_output "set remote run-packet off" + gdb_test \ + "set remote run-packet off" \ + "Support for the 'vRun' packet on the current remote target is set to \"off\"." + gdb_test_no_output "set remote exec-file" set test "run to marker" gdb_test_multiple "run" $test { diff --git a/gdb/testsuite/gdb.server/server-exec-info.exp b/gdb/testsuite/gdb.server/server-exec-info.exp index 6bee4bf..030ca64 100644 --- a/gdb/testsuite/gdb.server/server-exec-info.exp +++ b/gdb/testsuite/gdb.server/server-exec-info.exp @@ -29,7 +29,10 @@ if [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] { # extended-remote board, therefore already connected. gdb_test "disconnect" ".*" -gdb_test_no_output "set remote pid-to-exec-file-packet off" +gdb_test \ + "set remote pid-to-exec-file-packet off" \ + "Support for the 'qXfer:exec-file:read' packet on future remote targets is set to \"off\"." + gdb_test "file" ".*" "file" \ {Discard symbol table from `.*'\? \(y or n\) } "y" gdbserver_run "" diff --git a/gdb/testsuite/gdb.server/server-kill.exp b/gdb/testsuite/gdb.server/server-kill.exp index b757369..5622b27 100644 --- a/gdb/testsuite/gdb.server/server-kill.exp +++ b/gdb/testsuite/gdb.server/server-kill.exp @@ -114,7 +114,9 @@ proc_with_prefix test_tstatus {} { # Enable trace status packet which is disabled after the # connection if the remote target doesn't support tracepoint at # all. Otherwise, no RSP packet is sent out. - gdb_test_no_output "set remote trace-status-packet on" + gdb_test \ + "set remote trace-status-packet on" \ + "Support for the 'qTStatus' packet on the current remote target is set to \"on\"." # Force GDB to talk with GDBserver, so that we can get the # "connection closed" error. diff --git a/gdb/testsuite/gdb.server/stop-reply-no-thread-multi.exp b/gdb/testsuite/gdb.server/stop-reply-no-thread-multi.exp index 20d45ba..042c285 100644 --- a/gdb/testsuite/gdb.server/stop-reply-no-thread-multi.exp +++ b/gdb/testsuite/gdb.server/stop-reply-no-thread-multi.exp @@ -68,8 +68,12 @@ proc run_test { target_non_stop disable_feature } { set gdbserver_gdbport [lindex $res 1] # Disable XML-based thread listing, and multi-process extensions. - gdb_test_no_output "set remote threads-packet off" - gdb_test_no_output "set remote multiprocess-feature-packet off" + gdb_test \ + "set remote threads-packet off" \ + "Support for the 'qXfer:threads:read' packet on future remote targets is set to \"off\"." + gdb_test \ + "set remote multiprocess-feature-packet off" \ + "Support for the 'multiprocess-feature' packet on future remote targets is set to \"off\"." set res [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport] if ![gdb_assert {$res == 0} "connect"] { diff --git a/gdb/testsuite/gdb.server/stop-reply-no-thread.exp b/gdb/testsuite/gdb.server/stop-reply-no-thread.exp index 848ada1..3ef512b 100644 --- a/gdb/testsuite/gdb.server/stop-reply-no-thread.exp +++ b/gdb/testsuite/gdb.server/stop-reply-no-thread.exp @@ -56,8 +56,13 @@ proc run_test { disable_feature target_nonstop } { set gdbserver_gdbport [lindex $res 1] # Disable XML-based thread listing, and multi-process extensions. - gdb_test_no_output "set remote threads-packet off" - gdb_test_no_output "set remote multiprocess-feature-packet off" + gdb_test \ + "set remote threads-packet off" \ + "Support for the 'qXfer:threads:read' packet on future remote targets is set to \"off\"." + + gdb_test \ + "set remote multiprocess-feature-packet off" \ + "Support for the 'multiprocess-feature' packet on future remote targets is set to \"off\"." # Set target-nonstop mode. gdb_test_no_output "maint set target-non-stop ${target_nonstop}" diff --git a/gdb/testsuite/gdb.threads/process-dies-while-handling-bp.exp b/gdb/testsuite/gdb.threads/process-dies-while-handling-bp.exp index 59416d4..23f4c50 100644 --- a/gdb/testsuite/gdb.threads/process-dies-while-handling-bp.exp +++ b/gdb/testsuite/gdb.threads/process-dies-while-handling-bp.exp @@ -58,15 +58,18 @@ proc do_test { non_stop cond_bp_target } { if {!$cond_bp_target} { # Leaving breakpoint evaluation to GDB exposes failures # similar to native debugging. - gdb_test_no_output "set remote conditional-breakpoints-packet off" + gdb_test \ + "set remote conditional-breakpoints-packet off" \ + "Support for the 'ConditionalBreakpoints' packet on the current remote target is set to \"off\"." + set should_kfail 1 } else { set test "show remote conditional-breakpoints-packet" gdb_test_multiple $test $test { - -re "currently enabled\.\r\n$gdb_prompt $" { + -re "\, currently enabled.*\r\n$gdb_prompt $" { pass $test } - -re "currently disabled\.\r\n$gdb_prompt $" { + -re "\, currently disabled.*\r\n$gdb_prompt $" { unsupported "no support for target-side conditional breakpoints" return } diff --git a/gdb/testsuite/gdb.trace/change-loc.exp b/gdb/testsuite/gdb.trace/change-loc.exp index b77e283..1315a6d 100644 --- a/gdb/testsuite/gdb.trace/change-loc.exp +++ b/gdb/testsuite/gdb.trace/change-loc.exp @@ -313,7 +313,9 @@ proc tracepoint_install_in_trace_disabled { trace_type } { gdb_test_no_output "tstart" # Force-disable the InstallInTrace RSP feature. - gdb_test_no_output "set remote install-in-trace-packet off" + gdb_test \ + "set remote install-in-trace-packet off" \ + "Support for the 'InstallInTrace' packet on the current remote target is set to \"off\"." # Set a tracepoint while a trace experiment is ongoing. gdb_test "${trace_type} set_tracepoint" \ diff --git a/gdb/testsuite/gdb.trace/qtro.exp b/gdb/testsuite/gdb.trace/qtro.exp index c15028d..98a4549 100644 --- a/gdb/testsuite/gdb.trace/qtro.exp +++ b/gdb/testsuite/gdb.trace/qtro.exp @@ -79,7 +79,7 @@ prepare_for_trace_disassembly set traceframe_info_supported -1 set test "probe for traceframe-info support" gdb_test_multiple "show remote traceframe-info-packet" $test { - -re ".*Support for .* is auto-detected, currently (\[a-z\]*).*$gdb_prompt $" { + -re ".*Support for .* is \"auto\", currently (\[a-z\]*).*$gdb_prompt $" { set status $expect_out(1,string) if { $status == "enabled" } { @@ -110,7 +110,9 @@ foreach tfinfo { auto off } { clean_restart $testfile runto_main - gdb_test_no_output "set remote traceframe-info-packet $tfinfo" + gdb_test \ + "set remote traceframe-info-packet $tfinfo" \ + "Support for the 'qXfer:traceframe-info:read' packet on the current remote target is set to *.*$tfinfo*.*" prepare_for_trace_disassembly |