diff options
author | Pedro Alves <pedro@palves.net> | 2024-05-09 12:32:53 +0100 |
---|---|---|
committer | Pedro Alves <pedro@palves.net> | 2024-05-10 11:26:41 +0100 |
commit | 6b25d11b012055936bb07179e246e04763cac27e (patch) | |
tree | 75766a5d5f7b5153059eddeddeeeac318d4b5b73 | |
parent | af7fc7ff9e4c7081cc7b163111c3db2d4b9f46b8 (diff) | |
download | gdb-6b25d11b012055936bb07179e246e04763cac27e.zip gdb-6b25d11b012055936bb07179e246e04763cac27e.tar.gz gdb-6b25d11b012055936bb07179e246e04763cac27e.tar.bz2 |
Windows gdb+gdbserver: Check whether DBG_REPLY_LATER is available
Per
<https://learn.microsoft.com/en-us/windows/win32/api/debugapi/nf-debugapi-continuedebugevent>,
DBG_REPLY_LATER is "Supported in Windows 10, version 1507 or above, ..."
Since we support versions of Windows older than 10, we need to know
whether DBG_REPLY_LATER is available. And we need to know this before
starting any inferior.
This adds a function that probes for support (and caches the result),
by trying to call ContinueDebugEvent on pid=0,tid=0 with
DBG_REPLY_LATER, and inspecting the resulting error.
Suggested-by: Hannes Domani <ssbssa@yahoo.de>
Suggested-by: Eli Zaretskii <eliz@gnu.org>
Change-Id: Ia27b981aeecaeef430ec90cebc5b3abdce00449d
-rw-r--r-- | gdb/nat/windows-nat.c | 20 | ||||
-rw-r--r-- | gdb/nat/windows-nat.h | 9 |
2 files changed, 29 insertions, 0 deletions
diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c index 4fd717e..0fdfcba 100644 --- a/gdb/nat/windows-nat.c +++ b/gdb/nat/windows-nat.c @@ -942,6 +942,26 @@ disable_randomization_available () /* See windows-nat.h. */ bool +dbg_reply_later_available () +{ + static int available = -1; + if (available == -1) + { + /* DBG_REPLY_LATER is supported since Windows 10, Version 1507. + If supported, this fails with ERROR_INVALID_HANDLE (tested on + Win10 and Win11). If not supported, it fails with + ERROR_INVALID_PARAMETER (tested on Win7). */ + if (ContinueDebugEvent (0, 0, DBG_REPLY_LATER)) + internal_error (_("ContinueDebugEvent call should not " + "have succeeded")); + available = (GetLastError () != ERROR_INVALID_PARAMETER); + } + return available; +} + +/* See windows-nat.h. */ + +bool initialize_loadable () { bool result = true; diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h index 2efb54e..96835b3 100644 --- a/gdb/nat/windows-nat.h +++ b/gdb/nat/windows-nat.h @@ -415,6 +415,15 @@ extern DeleteProcThreadAttributeList_ftype *DeleteProcThreadAttributeList; extern bool disable_randomization_available (); +/* This is available starting with Windows 10. */ +#ifndef DBG_REPLY_LATER +# define DBG_REPLY_LATER 0x40010001L +#endif + +/* Return true if it's possible to use DBG_REPLY_LATER with + ContinueDebugEvent on this host. */ +extern bool dbg_reply_later_available (); + /* Load any functions which may not be available in ancient versions of Windows. */ |