From 047427a8a8eee010a107b3ed55798f73aa9bcd92 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Mon, 6 Jul 2009 18:51:10 +0000 Subject: [PATCH] gdb/testsuite/ * lib/gdbserver-support.exp (gdbserver_start): Loop spawning gdbserver increasing $portnum if "Can't bind address" has been seen. --- gdb/testsuite/ChangeLog | 5 +++ gdb/testsuite/lib/gdbserver-support.exp | 51 ++++++++++++++++--------- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 8f3bbaf4ea9..c118286b36d 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-07-06 Jan Kratochvil + + * lib/gdbserver-support.exp (gdbserver_start): Loop spawning + gdbserver increasing $portnum if "Can't bind address" has been seen. + 2009-07-05 Pedro Alves * gdb.base/ending-run.exp: Add "step out of main" pattern for diff --git a/gdb/testsuite/lib/gdbserver-support.exp b/gdb/testsuite/lib/gdbserver-support.exp index f755d269b73..861406cc1f4 100644 --- a/gdb/testsuite/lib/gdbserver-support.exp +++ b/gdb/testsuite/lib/gdbserver-support.exp @@ -209,26 +209,39 @@ proc gdbserver_start { options arguments } { set gdbserver [find_gdbserver] - # Export the host:port pair. - set gdbport $debughost$portnum - - # Fire off the debug agent. - set gdbserver_command "$gdbserver" - if { $options != "" } { - append gdbserver_command " $options" - } - append gdbserver_command " :$portnum" - if { $arguments != "" } { - append gdbserver_command " $arguments" - } - - set server_spawn_id [remote_spawn target $gdbserver_command] + # 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" + if { $options != "" } { + append gdbserver_command " $options" + } + append gdbserver_command " :$portnum" + if { $arguments != "" } { + append gdbserver_command " $arguments" + } - # Wait for the server to open its TCP socket, so that GDB can connect. - expect { - -i $server_spawn_id - -notransfer - -re "Listening on" { } + set server_spawn_id [remote_spawn target $gdbserver_command] + + # Wait for the server to open its TCP socket, so that GDB can connect. + expect { + -i $server_spawn_id + -notransfer + -re "Listening on" { } + -re "Can't bind address: Address already in use\\.\r\n" { + verbose -log "Port $portnum is already in use." + if ![target_info exists gdb,socketport] { + # Bump the port number to avoid the conflict. + wait -i $expect_out(spawn_id) + incr portnum + continue + } + } + } + break } # We can't just call close, because if gdbserver is local then that means -- 2.30.2