gdb/testsuite/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 6 Jul 2009 18:51:10 +0000 (18:51 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 6 Jul 2009 18:51:10 +0000 (18:51 +0000)
* lib/gdbserver-support.exp (gdbserver_start): Loop spawning
gdbserver increasing $portnum if "Can't bind address" has been seen.

gdb/testsuite/ChangeLog
gdb/testsuite/lib/gdbserver-support.exp

index 8f3bbaf4ea97d62c5b40394fe039df7f6a5bd9b5..c118286b36dea42f9ebeada4ff519853842e7964 100644 (file)
@@ -1,3 +1,8 @@
+2009-07-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * lib/gdbserver-support.exp (gdbserver_start): Loop spawning
+       gdbserver increasing $portnum if "Can't bind address" has been seen.
+
 2009-07-05  Pedro Alves  <pedro@codesourcery.com>
 
        * gdb.base/ending-run.exp: Add "step out of main" pattern for
index f755d269b7359c1f30292a93c8bfbd053b72e9ee..861406cc1f47f42fc4f9c78266956ce0d4e1e004 100644 (file)
@@ -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