[PATCH v2 46/47] Windows gdb: Always non-stop (default to "maint set target-non-stop on")

Pedro Alves
2025-05-19T13:35:03Z

Since having the target backend work in non-stop mode adds features
compared to old all-stop mode (signal/exception passing/suppression is
truly per-thread), this switches the backend to do
all-stop-on-top-of-non-stop, by having
windows_nat_target::always_non_stop_p return true if non-stop mode is
possible.

To be clear, this just changes how the backend works in coordination
with infrun. The user-visible mode default mode is still all-stop.

The difference is that infrun is responsible for stopping all threads
when needed, instead of the backend (actually the kernel) always doing
that before reporting an event to infrun.

Change-Id: I83d23dbb1edc7692d5d8b37f5b9e0264c74d4940
---
gdb/windows-nat.c | 10 ++++++++++
1 file changed, 10 insertions(+)

diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index 830ed0e381f..bc574377ca5 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -570,6 +570,7 @@ struct windows_nat_target final : public x86_nat_target<inf_child_target>
}

bool supports_non_stop () override;
+ bool always_non_stop_p () override;

void async (bool enable) override;

@@ -4118,6 +4119,15 @@ windows_nat_target::supports_non_stop ()
return dbg_reply_later_available ();
}

+/* Implementation of the target_ops::always_non_stop_p method. */
+
+bool
+windows_nat_target::always_non_stop_p ()
+{
+ /* If we can do non-stop, prefer it. */
+ return supports_non_stop ();
+}
+
void _initialize_windows_nat ();
void
_initialize_windows_nat ()
--
2.49.0