99 lines
3.0 KiB
Diff
99 lines
3.0 KiB
Diff
From 2e5c943519de45144a880b8ce0d693dfd13f4650 Mon Sep 17 00:00:00 2001
|
|
From: Tom de Vries <tdevries@suse.de>
|
|
Date: Sat, 4 May 2024 10:41:09 +0200
|
|
Subject: [PATCH 16/48] [gdb/testsuite] Factor out proc get_portnum
|
|
|
|
In gdbserver_start, we have some code that determines what port number to use:
|
|
...
|
|
# Port id -- either specified in baseboard file, or managed here.
|
|
if [target_info exists gdb,socketport] {
|
|
set portnum [target_info gdb,socketport]
|
|
} else {
|
|
# Bump the port number to avoid conflicts with hung ports.
|
|
incr portnum
|
|
}
|
|
...
|
|
|
|
Factor this out into a new proc get_portnum.
|
|
|
|
Tested on aarch64-linux.
|
|
|
|
Approved-By: Tom Tromey <tom@tromey.com>
|
|
---
|
|
gdb/testsuite/lib/gdbserver-support.exp | 40 ++++++++++++++++++-------
|
|
1 file changed, 29 insertions(+), 11 deletions(-)
|
|
|
|
diff --git a/gdb/testsuite/lib/gdbserver-support.exp b/gdb/testsuite/lib/gdbserver-support.exp
|
|
index 30d94fd7eb6..8aaca946b7d 100644
|
|
--- a/gdb/testsuite/lib/gdbserver-support.exp
|
|
+++ b/gdb/testsuite/lib/gdbserver-support.exp
|
|
@@ -129,8 +129,31 @@ proc gdb_target_cmd { args } {
|
|
return [expr $res == 0 ? 0 : 1]
|
|
}
|
|
|
|
-global portnum
|
|
-set portnum "2345"
|
|
+# Return a usable port number.
|
|
+
|
|
+proc get_portnum {} {
|
|
+ if { [target_info exists gdb,socketport] } {
|
|
+ # Hard-coded in target board.
|
|
+ return [target_info gdb,socketport]
|
|
+ }
|
|
+
|
|
+ # Not hard-coded in target board. Return increasing port numbers,
|
|
+ # starting at $initial_portnum, to avoid conflicts with hung ports.
|
|
+ set initial_portnum 2345
|
|
+
|
|
+ # Currently available port number.
|
|
+ global portnum
|
|
+
|
|
+ # Initialize, if necessary.
|
|
+ if { ![info exists portnum] } {
|
|
+ set portnum $initial_portnum
|
|
+ }
|
|
+
|
|
+ # Return currently available port number, and update it.
|
|
+ set res $portnum
|
|
+ incr portnum
|
|
+ return $res
|
|
+}
|
|
|
|
# Locate the gdbserver binary. Returns "" if gdbserver could not be found.
|
|
|
|
@@ -247,16 +270,10 @@ proc gdbserver_default_get_comm_port { port } {
|
|
# Returns the target protocol and socket to connect to.
|
|
|
|
proc gdbserver_start { options arguments } {
|
|
- global portnum
|
|
global GDB_TEST_SOCKETHOST
|
|
|
|
# Port id -- either specified in baseboard file, or managed here.
|
|
- if [target_info exists gdb,socketport] {
|
|
- set portnum [target_info gdb,socketport]
|
|
- } else {
|
|
- # Bump the port number to avoid conflicts with hung ports.
|
|
- incr portnum
|
|
- }
|
|
+ set portnum [get_portnum]
|
|
|
|
# Extract the local and remote host ids from the target board struct.
|
|
if { [info exists GDB_TEST_SOCKETHOST] } {
|
|
@@ -372,10 +389,11 @@ proc gdbserver_start { options arguments } {
|
|
-re "Listening on" { }
|
|
-re "Can't (bind address|listen on socket): Address already in use\\.\r\n" {
|
|
verbose -log "Port $portnum is already in use."
|
|
- if ![target_info exists gdb,socketport] {
|
|
+ set other_portnum [get_portnum]
|
|
+ if { $other_portnum != $portnum } {
|
|
# Bump the port number to avoid the conflict.
|
|
wait -i $expect_out(spawn_id)
|
|
- incr portnum
|
|
+ set portnum $other_portnum
|
|
continue
|
|
}
|
|
}
|
|
--
|
|
2.35.3
|
|
|