Index: gdb/testsuite/lib/gdbserver-support.exp |
diff --git a/gdb/testsuite/lib/gdbserver-support.exp b/gdb/testsuite/lib/gdbserver-support.exp |
index 275f33c7712964daab0c2185e897dd45f43c8c6e..ee66e48260a237fd03ccf31eaf3812842fcd66a7 100644 |
--- a/gdb/testsuite/lib/gdbserver-support.exp |
+++ b/gdb/testsuite/lib/gdbserver-support.exp |
@@ -69,6 +69,10 @@ proc gdb_target_cmd { targetname serialport } { |
verbose "Set target to $targetname" |
return 0 |
} |
+ -re "Remote debugging using stdio.*$gdb_prompt $" { |
+ verbose "Set target to $targetname" |
+ return 0 |
+ } |
-re "Remote target $targetname connected to.*$gdb_prompt $" { |
verbose "Set target to $targetname" |
return 0 |
@@ -182,6 +186,12 @@ proc gdbserver_download_current_prog { } { |
return $gdbserver_server_exec |
} |
+# Default routine to compute the argument to "target remote". |
+ |
+proc gdbserver_default_get_remote_address { host port } { |
+ return "$host$port" |
+} |
+ |
# Start a gdbserver process with initial OPTIONS and trailing ARGUMENTS. |
# The port will be filled in between them automatically. |
# |
@@ -205,6 +215,15 @@ proc gdbserver_start { options arguments } { |
set debughost "localhost:" |
} |
+ # Some boards use a different value for the port that is passed to |
+ # gdbserver and the port that is passed to the "target remote" command. |
+ # One example is the stdio gdbserver support. |
+ if [target_info exists gdb,get_remote_address] { |
+ set get_remote_address [target_info gdb,get_remote_address] |
+ } else { |
+ set get_remote_address gdbserver_default_get_remote_address |
+ } |
+ |
# Extract the protocol |
if [target_info exists gdb_protocol] { |
set protocol [target_info gdb_protocol] |
@@ -216,9 +235,6 @@ proc gdbserver_start { options arguments } { |
# Loop till we find a free port. |
while 1 { |
- # Export the host:port pair. |
- set gdbport $debughost$portnum |
- |
# Fire off the debug agent. |
set gdbserver_command "$gdbserver" |
@@ -234,9 +250,9 @@ proc gdbserver_start { options arguments } { |
if { $options != "" } { |
append gdbserver_command " $options" |
} |
- |
- append gdbserver_command " :$portnum" |
- |
+ if { $portnum != "" } { |
+ append gdbserver_command " :$portnum" |
+ } |
if { $arguments != "" } { |
append gdbserver_command " $arguments" |
} |
@@ -274,7 +290,7 @@ proc gdbserver_start { options arguments } { |
} |
} |
- return [list $protocol $gdbport] |
+ return [list $protocol [$get_remote_address $debughost $portnum]] |
} |
# Start a gdbserver process running SERVER_EXEC, and connect GDB |
@@ -339,14 +355,19 @@ proc gdbserver_reconnect { } { |
return [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport] |
} |
-# Start and connect to a gdbserver in extended mode. |
+# Start and connect to a gdbserver in extended mode. Note this frobs |
+# $gdbserver_protocol, so should be used only from a board that |
+# usually connects in target remote mode. |
proc gdbserver_start_extended { } { |
global gdbserver_protocol |
global gdbserver_gdbport |
global use_gdb_stub |
set res [gdbserver_start "--multi" ""] |
- set gdbserver_protocol "extended-[lindex $res 0]" |
+ set gdbserver_protocol [lindex $res 0] |
+ if { [string first "extended-" $gdbserver_protocol] != 0} { |
+ set gdbserver_protocol "extended-$gdbserver_protocol" |
+ } |
set gdbserver_gdbport [lindex $res 1] |
# Even if the board file is testing with target remote, our caller |
@@ -356,3 +377,32 @@ proc gdbserver_start_extended { } { |
return [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport] |
} |
+ |
+# Start and connect to a gdbserver in extended/multi mode. Unlike |
+# gdbserver_start_extended, this does not frob $gdbserver_protocol. |
+ |
+proc gdbserver_start_multi { } { |
+ global gdbserver_protocol |
+ global gdbserver_gdbport |
+ |
+ set res [gdbserver_start "--multi" ""] |
+ set gdbserver_protocol [lindex $res 0] |
+ set gdbserver_gdbport [lindex $res 1] |
+ |
+ return [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport] |
+} |
+ |
+# Start a gdbserver process in multi/extended mode, and have GDB |
+# connect to it (MI version). Return 0 on success, or non-zero on |
+# failure. |
+ |
+proc mi_gdbserver_start_multi { } { |
+ global gdbserver_protocol |
+ global gdbserver_gdbport |
+ |
+ set res [gdbserver_start "--multi" ""] |
+ set gdbserver_protocol [lindex $res 0] |
+ set gdbserver_gdbport [lindex $res 1] |
+ |
+ return [mi_gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport] |
+} |