Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Tom de Vries via Gdb-patches <gdb-patches@sourceware.org>
To: gdb-patches@sourceware.org
Subject: [RFC][gdb/testsuite] Fix inferior pid in gdb.server/server-kill.exp
Date: Tue, 11 Oct 2022 16:01:52 +0200	[thread overview]
Message-ID: <20221011140150.GA15277@delia.home> (raw)

Hi,

Consider this patch in gdb.server/server-kill.exp:
...
 proc kill_server {} {
     global server_pid

+    remote_exec target "pstree -a -p $server_pid"
     remote_exec target "kill -9 $server_pid"
 }
...

We have for kill_pid_of=server, as expected, the gdbserver killed:
...
Executing on target: pstree -a -p 6969    (timeout = 300)
builtin_spawn -ignore SIGHUP pstree -a -p 6969^M
gdbserver,6969^M
  `-server-kill,6976^M
Executing on target: kill -9 6969    (timeout = 300)
builtin_spawn -ignore SIGHUP kill -9 6969^M
...

But for kill_pid_of=inferior, we also have the gdbserver killed:
...
Executing on target: pstree -a -p 6805    (timeout = 300)
builtin_spawn -ignore SIGHUP pstree -a -p 6805^M
gdbserver,6805^M
  `-server-kill,6812^M
Executing on target: kill -9 6805    (timeout = 300)
builtin_spawn -ignore SIGHUP kill -9 6805^M
...

The proc prepare contains the pid extraction code:
...
    if { $::kill_pid_of == "inferior" } {
        # Get the pid of GDBServer.
        set test "p server_pid"
        set server_pid 0
        gdb_test_multiple $test $test {
            -re " = ($decimal)\r\n$gdb_prompt $" {
                set server_pid $expect_out(1,string)
                pass $test
            }
        }
    } else {
        set server_pid [exp_pid -i $::server_spawn_id]
    }
...

The bit for $::kill_pid_of == "inferior" looks like the correct code to
extract the gdbserver pid (it prints the parent PID of the inferior).

The bit for $::kill_pid_of == "server" does work for local target, but for
remote target using say target board remote-gdbserver-on-localhost, we have:
...
Executing on target: pstree -a -p 10354    (timeout = 300)
builtin_spawn [open ...]^M
ssh,10354 -l vries localhost/gdbserver --once localhost:2350 s
XYZ0ZYX
Executing on target: kill -9 10354    (timeout = 300)
builtin_spawn [open ...]^M
XYZ0ZYX
...
In other words, we're not killing the gdbserver, but the ssh session (a
problem which was already fixed once in commit f90183d7e31 ("Get GDBserver
pid on remote target")).

Fix this by:
- using the $::kill_pid_of == "inferior" bit for the gdbserver pid, and
- using the inferior command for the the inferior pid.

This introduces the following 4 FAILs:
...
FAIL: gdb.server/server-kill.exp: kill_pid_of=inferior: test_tstatus: tstatus
FAIL: gdb.server/server-kill.exp: kill_pid_of=inferior: test_unwind_nosyms: bt
FAIL: gdb.server/server-kill.exp: kill_pid_of=inferior: test_unwind_syms: bt
FAIL: gdb.server/server-kill.exp: kill_pid_of=inferior: test_stepi: stepi
...

The first in more detail:
...
(gdb) status-packet on
tstatus^M
No trace has been run on the target.^M
Collected 0 trace frames.^M
Trace buffer has 5242880 bytes of 5242880 bytes free (0% full).^M
Trace will stop if GDB disconnects.^M
Not looking at any trace frame.^M
(gdb) FAIL: gdb.server/server-kill.exp: kill_pid_of=inferior: test_tstatus: tstatus
...

The test-case contains the comment:
...
 # When KILL_PID_OF is set to 'inferior' then the pid we kill is that
 # of the inferior running under gdbserver, when this process dies
 # gdbserver itself will exit.
...
but that doesn't seem to be happening.

I've added a sleep 60 after the kill to rule out any timing issues, and indeed
after 60 seconds the gdbserver is still running.

I don't know gdbserver well enough to decide whether the test-case assumption
is wrong and we need to fix the test-case, or there's a gdbserver problem
which is known or for which we can file a PR.

Tested on x86_64-linux.

Any comments?

Thanks,
- Tom

[gdb/testsuite] Fix inferior pid in gdb.server/server-kill.exp

---
 gdb/testsuite/gdb.server/server-kill.exp | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/gdb/testsuite/gdb.server/server-kill.exp b/gdb/testsuite/gdb.server/server-kill.exp
index 93daf482907..05f4f21bc0c 100644
--- a/gdb/testsuite/gdb.server/server-kill.exp
+++ b/gdb/testsuite/gdb.server/server-kill.exp
@@ -75,10 +75,10 @@ proc prepare {} {
     gdb_breakpoint ${srcfile}:[gdb_get_line_number "i = 0;"]
     gdb_continue_to_breakpoint "after server_pid assignment"
 
-    if { $::kill_pid_of == "inferior" } {
+    set server_pid 0
+    if { $::kill_pid_of == "server" } {
 	# Get the pid of GDBServer.
 	set test "p server_pid"
-	set server_pid 0
 	gdb_test_multiple $test $test {
 	    -re " = ($decimal)\r\n$gdb_prompt $" {
 		set server_pid $expect_out(1,string)
@@ -86,7 +86,13 @@ proc prepare {} {
 	    }
 	}
     } else {
-	set server_pid [exp_pid -i $::server_spawn_id]
+	set test "inferior"
+	gdb_test_multiple $test $test {
+	    -re -wrap "Current inferior is 1 \\\[process ($decimal)\\\].*" {
+		set server_pid $expect_out(1,string)
+		pass $test
+	    }
+	}
     }
 
     if {$server_pid == 0} {

             reply	other threads:[~2022-10-11 14:02 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-11 14:01 Tom de Vries via Gdb-patches [this message]
2022-10-25 12:20 ` [PING][RFC][gdb/testsuite] " Tom de Vries via Gdb-patches
2023-03-10 15:40   ` Tom de Vries via Gdb-patches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221011140150.GA15277@delia.home \
    --to=gdb-patches@sourceware.org \
    --cc=tdevries@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox