diff options
author | Pedro Alves <pedro@palves.net> | 2022-04-04 21:12:03 +0100 |
---|---|---|
committer | Pedro Alves <pedro@palves.net> | 2023-11-13 14:16:10 +0000 |
commit | 00b0dc819d1aac88ee45b18fdb05337e01a2df67 (patch) | |
tree | 55ae956f21ac609e8a6b74abdac218aa11eb6ec4 /gdb | |
parent | 6bd50ebd29883ac003fc936a5730ca55364f34e7 (diff) | |
download | gdb-00b0dc819d1aac88ee45b18fdb05337e01a2df67.zip gdb-00b0dc819d1aac88ee45b18fdb05337e01a2df67.tar.gz gdb-00b0dc819d1aac88ee45b18fdb05337e01a2df67.tar.bz2 |
all-stop/synchronous RSP support thread-exit events
Currently, GDB does not understand the THREAD_EXITED stop reply in
remote all-stop mode. There's no good reason for this, it just
happened that THREAD_EXITED was only ever reported in non-stop mode so
far. This patch teaches GDB to parse that event in all-stop RSP too.
There is no need to add a qSupported feature for this, because the
server won't send a THREAD_EXITED event unless GDB explicitly asks for
it, with QThreadEvents, or with the GDB_THREAD_OPTION_EXIT
QThreadOptions option added in the next patch.
Change-Id: Ide5d12391adf432779fe4c79526801c4a5630966
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/remote.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gdb/remote.c b/gdb/remote.c index 991a434..eb537fc 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -8415,6 +8415,11 @@ remote_target::process_stop_reply (struct stop_reply *stop_reply, /* Expedited registers. */ if (!stop_reply->regcache.empty ()) { + /* 'w' stop replies don't cary expedited registers (which + wouldn't make any sense for a thread that is gone + already). */ + gdb_assert (status->kind () != TARGET_WAITKIND_THREAD_EXITED); + struct regcache *regcache = get_thread_arch_regcache (this, ptid, stop_reply->arch); @@ -8599,7 +8604,7 @@ remote_target::wait_as (ptid_t ptid, target_waitstatus *status, again. Keep waiting for events. */ rs->waiting_for_stop_reply = 1; break; - case 'N': case 'T': case 'S': case 'X': case 'W': + case 'N': case 'T': case 'S': case 'X': case 'W': case 'w': { /* There is a stop reply to handle. */ rs->waiting_for_stop_reply = 0; |