From ed32754a8c7919feffc6ddb66ff1c532e4a4d1cd Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Thu, 9 Mar 2023 10:45:03 +0100 Subject: [PATCH] [gdb/testsuite] Fix gdb.server/multi-ui-errors.exp for remote target Test-case gdb.server/multi-ui-errors.exp fails for target board remote-gdbserver-on-localhost with REMOTE_TARGET_USERNAME=remote-target: ... (gdb) PASS: gdb.server/multi-ui-errors.exp: interact with GDB's main UI Executing on target: kill -9 6447 (timeout = 300) builtin_spawn [open ...]^M XYZ1ZYX sh: line 0: kill: (6447) - Operation not permitted ... The problem is that the kill command: ... remote_exec target "kill -9 $gdbserver_pid" ... intended to kill gdbserver instead tries to kill the ssh client session in which the gdbserver runs, and fails because it's trying as the remote target user (remote-target on localhost) to kill a pid owned by the the build user ($USER on localhost). Fix this by getting the gdbserver pid using the ppid trick from server-kill.exp. Likewise in gdb.server/server-kill-python.exp. Tested on x86_64-linux. --- gdb/testsuite/gdb.server/multi-ui-errors.c | 5 +++++ gdb/testsuite/gdb.server/multi-ui-errors.exp | 29 +++++++++++++++++++++++++ gdb/testsuite/gdb.server/server-kill-python.exp | 23 +++++++++++++++++++- 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/gdb/testsuite/gdb.server/multi-ui-errors.c b/gdb/testsuite/gdb.server/multi-ui-errors.c index 09739198cc1..afa1815fbee 100644 --- a/gdb/testsuite/gdb.server/multi-ui-errors.c +++ b/gdb/testsuite/gdb.server/multi-ui-errors.c @@ -17,12 +17,17 @@ #include #include +#include + +pid_t server_pid; int main (void) { int i; + server_pid = getppid (); + printf ("@@XX@@ Inferior Starting @@XX@@\n"); for (i = 0; i < 120; ++i) diff --git a/gdb/testsuite/gdb.server/multi-ui-errors.exp b/gdb/testsuite/gdb.server/multi-ui-errors.exp index 9cc5239d888..266207a5f4b 100644 --- a/gdb/testsuite/gdb.server/multi-ui-errors.exp +++ b/gdb/testsuite/gdb.server/multi-ui-errors.exp @@ -100,6 +100,35 @@ with_spawn_id $gdb_main_spawn_id { gdb_test "echo hello\\n" "hello" "interact with GDB's main UI" } +# Get the gdbserver PID. +set gdbserver_pid 0 +with_spawn_id $gdb_main_spawn_id { + gdb_test "interrupt" + + gdb_test_multiple "" "interrupt arrived" { + -re "Program received signal SIGINT, Interrupt\\.\r\n" { + pass $gdb_test_name + } + } + + gdb_test_multiple "p server_pid" "" { + -re -wrap " = ($decimal)" { + set gdbserver_pid $expect_out(1,string) + pass $gdb_test_name + } + } + + gdb_test_multiple continue "" { + -re "Continuing\\.\r\n" { + pass $gdb_test_name + } + } +} + +if { $gdbserver_pid == 0 } { + return +} + # Now kill the gdbserver. remote_exec target "kill -9 $gdbserver_pid" diff --git a/gdb/testsuite/gdb.server/server-kill-python.exp b/gdb/testsuite/gdb.server/server-kill-python.exp index 7b8f29b2890..f6b373065a8 100644 --- a/gdb/testsuite/gdb.server/server-kill-python.exp +++ b/gdb/testsuite/gdb.server/server-kill-python.exp @@ -30,12 +30,16 @@ if {[build_executable "failed to prepare" ${testfile} \ return -1 } +set target_binfile [gdb_remote_download target $binfile] + # Start gdbserver. -set res [gdbserver_spawn "${binfile}"] +set res [gdbserver_spawn "${target_binfile}"] set gdbserver_protocol [lindex $res 0] set gdbserver_gdbport [lindex $res 1] set gdbserver_pid [exp_pid -i $server_spawn_id] +set break_linenr [gdb_get_line_number "@@XX@@ Inferior Starting @@XX@@"] + # Generate a python script we will later source. set file1 [standard_output_file file1.py] set fd [open "$file1" w] @@ -44,6 +48,9 @@ puts $fd \ def do_gdb_stuff (): gdb.execute ('target $gdbserver_protocol $gdbserver_gdbport') + gdb.execute ('break $srcfile:$break_linenr') + gdb.execute ('continue') + gdb.execute ('p server_pid') gdb.execute ('continue') do_gdb_stuff()" @@ -57,8 +64,22 @@ if {[gdb_spawn_with_cmdline_opts \ return } +# Get the gdbserver PID. +set gdbserver_pid 0 + # Wait for the inferior to start up. with_spawn_id $server_spawn_id { + gdb_test_multiple "" "get gdbserver PID" { + -re " = ($decimal)\r\n" { + set gdbserver_pid $expect_out(1,string) + pass $gdb_test_name + } + } + + if { $gdbserver_pid == 0 } { + return + } + gdb_test_multiple "" "ensure inferior is running" { -re "@@XX@@ Inferior Starting @@XX@@" { pass $gdb_test_name -- 2.11.4.GIT