Fix initial thread state of non-threaded remote targets
authorJan Matyas <jmatyas@codasip.com>
Thu, 25 Feb 2021 07:27:09 +0000 (08:27 +0100)
committerSimon Marchi <simon.marchi@polymtl.ca>
Thu, 25 Feb 2021 20:38:54 +0000 (15:38 -0500)
commit64d38fdd9956aefd1f0fbeb7e1d2774e71c0a9b8
treeb0934299c4e2f443f62620865a50eb117b7a25bb
parente38332c286bb96026fadc128170303cc4e935225
Fix initial thread state of non-threaded remote targets

This change fixes the initial state of the main thread of remote
targets which have no concept of threading. Such targets are
treated as single-threaded by gdb, and this single thread needs
to be initially set to the "resumed" state, in the same manner as
threads in thread-aware remote targets (see remote.c,
remote_target::remote_add_thread).

Without this fix, the following assert was triggered on thread-
unaware remote targets:

    remote_target::select_thread_for_ambiguous_stop_reply(const target_waitstatus*): Assertion `first_resumed_thread != nullptr' failed.

The bug can be reproduced using gdbserver

    * by disabling packets 'T' and 'qThreadInfo', or
    * by disabling all thread-related packets.

The test suite has been updated to include these two scenarios, see
gdb.server/stop-reply-no-thread.exp.

Change-Id: I2c39c9de17e8d6922a8c1b9e259eb316a554a43d
gdb/ChangeLog
gdb/remote.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.server/stop-reply-no-thread.exp