Bug 29734 - [gdb/testsuite, local-remote-host-native] FAIL: gdb.server/stop-reply-no-thread-multi.exp: target-non-stop=off: to_disable=: set remote threads-packet off (timeout)
Summary: [gdb/testsuite, local-remote-host-native] FAIL: gdb.server/stop-reply-no-thre...
Status: RESOLVED FIXED
Alias: None
Product: gdb
Classification: Unclassified
Component: testsuite (show other bugs)
Version: HEAD
: P2 normal
Target Milestone: 14.1
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-10-31 08:46 UTC by Tom de Vries
Modified: 2023-03-28 15:51 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tom de Vries 2022-10-31 08:46:47 UTC
I tried out running the gdb.server/*.exp test-cases with host+target board local-remote-host-native, but in the first test-case run into a time-out:
...
(gdb) PASS: gdb.server/stop-reply-no-thread-multi.exp: target-non-stop=off: to_disable=: disconnect
builtin_spawn /usr/bin/ssh -t -l vries 127.0.0.1 /home/vries/gdb_versions/devel/build/gdb/testsuite/../../gdbserver/gdbserver --once localhost:2346 /home/vries/gdb_versions/devel/build/gdb/testsuite/outputs/gdb.server/stop-reply-no-thread-multi/stop-reply-no-thread-multi^M
Process /home/vries/gdb_versions/devel/build/gdb/testsuite/outputs/gdb.server/stop-reply-no-thread-multi/stop-reply-no-thread-multi created; pid = 32600^M
Listening on port 2346^M
set remote threads-packet off^M
FAIL: gdb.server/stop-reply-no-thread-multi.exp: target-non-stop=off: to_disable=: set remote threads-packet off (timeout)
...

AFAICT, this is due to this line in ${board}_spawn:
...
    set board_info($board,fileid) $spawn_id
...

We have the following series of events:
- gdb is spawned, setting fileid
- a few gdb commands (set height etc) are send using fileid, and are successful
- gdbserver is spawned, overwriting fileid
- the next gdb command is sent to gdb using fileid, so it's send
  to gdbserver instead of gdb, and we run into the timeout.
Comment 1 Sourceware Commits 2023-03-28 15:48:39 UTC
The master branch has been updated by Tom de Vries <vries@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9121a23fa7294542d022c25eda0fe8b9e92c3b59

commit 9121a23fa7294542d022c25eda0fe8b9e92c3b59
Author: Tom de Vries <tdevries@suse.de>
Date:   Tue Mar 28 17:48:34 2023 +0200

    [gdb/testsuite] Fix local-remote-host-native.exp for gdb.server tests
    
    When running test-case gdb.server/stop-reply-no-thread-multi.exp with
    host+target board local-remote-host-native, I run into a time-out:
    ...
    (gdb) PASS: gdb.server/stop-reply-no-thread-multi.exp: target-non-stop=off: \
      to_disable=: disconnect
    builtin_spawn /usr/bin/ssh -t -l vries 127.0.0.1 gdbserver --once \
      localhost:2346 stop-reply-no-thread-multi^M
    Process stop-reply-no-thread-multi created; pid = 32600^M
    Listening on port 2346^M
    set remote threads-packet off^M
    FAIL: gdb.server/stop-reply-no-thread-multi.exp: target-non-stop=off: \
      to_disable=: set remote threads-packet off (timeout)
    ...
    
    This is due to this line in ${board}_spawn:
    ...
        set board_info($board,fileid) $spawn_id
    ...
    
    We have the following series of events:
    - gdb is spawned, setting fileid
    - a few gdb commands (set height etc) are send using fileid, arrive at gdb and
      are successful
    - gdbserver is spawned, overwriting fileid
    - the next gdb command is sent using fileid, so it's send
      to gdbserver instead of gdb, and we run into the timeout.
    
    There is some notion of current gdb, tracked in both gdb_spawn_id and fileid
    of the host board (see switch_gdb_spawn_id).  And because the host and target
    board are the same, spawning something on the target overwrites the fileid on
    host, and consequently the current gdb.
    
    Fix this by only setting fileid when spawning gdb.
    
    Tested on x86_64-linux.
    
    Now gdb.server/*.exp passes for host+target board local-remote-host-native,
    except for file-transfer.exp.
    
    Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29734
Comment 2 Tom de Vries 2023-03-28 15:51:10 UTC
Fixed.