aboutsummaryrefslogtreecommitdiff
path: root/gdb/i386-windows-nat.c
diff options
context:
space:
mode:
authorHannes Domani <ssbssa@yahoo.de>2020-01-26 22:04:04 +0100
committerHannes Domani <ssbssa@yahoo.de>2020-03-04 21:15:20 +0100
commit46f9f93119daaa8eceb7233a17759e10e858c9fd (patch)
tree7a2dcb557732eab4a173d0d2e336a1eb071be521 /gdb/i386-windows-nat.c
parent749479c8d3b63c9075d2fabf4b87b1f7109608b6 (diff)
downloadgdb-46f9f93119daaa8eceb7233a17759e10e858c9fd.zip
gdb-46f9f93119daaa8eceb7233a17759e10e858c9fd.tar.gz
gdb-46f9f93119daaa8eceb7233a17759e10e858c9fd.tar.bz2
Implement debugging of WOW64 processes
For WOW64 processes, the Wow64* variants of SuspendThread, GetThreadContext, SetThreadContext, and GetThreadSelectorEntry have to be used instead. And instead of EnumProcessModules, EnumProcessModulesEx with LIST_MODULES_32BIT is necessary. gdb/ChangeLog: 2020-03-04 Hannes Domani <ssbssa@yahoo.de> * NEWS: Mention support for WOW64 processes. * amd64-windows-nat.c (amd64_mappings): Rename and remove static. (amd64_windows_segment_register_p): Remove static. (_initialize_amd64_windows_nat): Update. * configure.nat <windows> (NATDEPFILES): Add i386-windows-nat.o. * i386-windows-nat.c (context_offset): Update. (i386_mappings): Rename and remove static. (i386_windows_segment_register_p): Remove static. (_initialize_i386_windows_nat): Update. * windows-nat.c (STATUS_WX86_BREAKPOINT): New macro. (STATUS_WX86_SINGLE_STEP): New macro. (EnumProcessModulesEx): New macro. (Wow64SuspendThread): New macro. (Wow64GetThreadContext): New macro. (Wow64SetThreadContext): New macro. (Wow64GetThreadSelectorEntry): New macro. (windows_set_context_register_offsets): Add static. (windows_set_segment_register_p): Likewise. (windows_add_thread): Adapt for WOW64 processes. (windows_fetch_one_register): Likewise. (windows_nat_target::fetch_registers): Likewise. (windows_store_one_register): Likewise. (display_selector): Likewise. (display_selectors): Likewise. (handle_exception): Likewise. (windows_continue): Likewise. (windows_nat_target::resume): Likewise. (windows_add_all_dlls): Likewise. (do_initial_windows_stuff): Likewise. (windows_nat_target::attach): Likewise. (windows_get_exec_module_filename): Likewise. (windows_nat_target::create_inferior): Likewise. (windows_xfer_siginfo): Likewise. (_initialize_loadable): Initialize Wow64SuspendThread, Wow64GetThreadContext, Wow64SetThreadContext, Wow64GetThreadSelectorEntry and EnumProcessModulesEx. * windows-nat.h (windows_set_context_register_offsets): Remove declaration. (windows_set_segment_register_p): Likewise. (i386_windows_segment_register_p): Add declaration. (amd64_windows_segment_register_p): Likewise.
Diffstat (limited to 'gdb/i386-windows-nat.c')
-rw-r--r--gdb/i386-windows-nat.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/gdb/i386-windows-nat.c b/gdb/i386-windows-nat.c
index 958c83e..3091fc3 100644
--- a/gdb/i386-windows-nat.c
+++ b/gdb/i386-windows-nat.c
@@ -22,8 +22,11 @@
#include <windows.h>
-#define context_offset(x) ((int)&(((CONTEXT *)NULL)->x))
-static const int mappings[] =
+#ifdef __x86_64__
+#define CONTEXT WOW64_CONTEXT
+#endif
+#define context_offset(x) ((int)(size_t)&(((CONTEXT *)NULL)->x))
+const int i386_mappings[] =
{
context_offset (Eax),
context_offset (Ecx),
@@ -70,10 +73,11 @@ static const int mappings[] =
context_offset (ExtendedRegisters[24])
};
#undef context_offset
+#undef CONTEXT
/* segment_register_p_ftype implementation for x86. */
-static int
+int
i386_windows_segment_register_p (int regnum)
{
return regnum >= I386_CS_REGNUM && regnum <= I386_GS_REGNUM;
@@ -83,7 +87,7 @@ void _initialize_i386_windows_nat ();
void
_initialize_i386_windows_nat ()
{
- windows_set_context_register_offsets (mappings);
- windows_set_segment_register_p (i386_windows_segment_register_p);
+#ifndef __x86_64__
x86_set_debug_register_length (4);
+#endif
}