From: Justin Sapp <[email protected]>

https://sourceware.org/gdb/current/onlinedocs/gdb.html/General-Query-Packets.html#qSupported
```
Whenever the stub receives a ‘qSupported’ request, the supplied set
of GDB features should override any previous request. This allows GDB to
put the stub in a known state, even if the stub had previously been
communicating with a different version of GDB.
```

We exposed this by connecting to gdbstub using a gdb client first, and
then WinDbg (EXDI) for windows kernel debugging. Since they both
differ in their multiprocess support, this was confusing EXDI.

While we are here, fix the same for fork_events in user mode.

Signed-off-by: Pierrick Bouvier <[email protected]>
---
 gdbstub/gdbstub.c | 6 ++++++
 gdbstub/user.c    | 1 +
 2 files changed, 7 insertions(+)

diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
index 0a328b0dd48..dbb2000c817 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -1679,6 +1679,12 @@ void gdb_extend_qsupported_features(char *qflags)
 
 static void handle_query_supported(GArray *params, void *user_ctx)
 {
+    /*
+     * Reset multiprocess support as a new gdb client may have different 
support
+     * than a previous one.
+     */
+    gdbserver_state.multiprocess = false;
+
     g_string_printf(gdbserver_state.str_buf, "PacketSize=%x", 
MAX_PACKET_LENGTH);
     if (gdb_get_core_xml_file(first_cpu)) {
         g_string_append(gdbserver_state.str_buf, ";qXfer:features:read+");
diff --git a/gdbstub/user.c b/gdbstub/user.c
index d810f0f38c3..9b6d42d210a 100644
--- a/gdbstub/user.c
+++ b/gdbstub/user.c
@@ -701,6 +701,7 @@ fail:
 
 void gdb_handle_query_supported_user(const char *gdb_supported)
 {
+    gdbserver_user_state.fork_events = false;
     if (strstr(gdb_supported, "fork-events+")) {
         gdbserver_user_state.fork_events = true;
     }
-- 
2.47.3


Reply via email to