| 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]
 | 
| +}
 | 
| 
 |