+2020-09-23 Hannes Domani <ssbssa@yahoo.de>
+
+ * nat/windows-nat.c (handle_exception): Handle 64bit breakpoints
+ in WOW64 processes as SIGINT.
+ * nat/windows-nat.h: Make wow64_process a shared variable.
+ * windows-nat.c: Remove static wow64_process variable.
+
2020-09-23 Tom Tromey <tom@tromey.com>
PR symtab/25470:
EXCEPTION_RECORD siginfo_er;
#ifdef __x86_64__
+bool wow64_process = false;
bool ignore_first_breakpoint = false;
#endif
ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
ignore_first_breakpoint = false;
}
+ else if (wow64_process)
+ {
+ /* This breakpoint exception is triggered for WOW64 processes when
+ reaching an int3 instruction in 64bit code.
+ gdb checks for int3 in case of SIGTRAP, this fails because
+ Wow64GetThreadContext can only report the pc of 32bit code, and
+ gdb lets the target process continue.
+ So handle it as SIGINT instead, then the target is stopped
+ unconditionally. */
+ DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_BREAKPOINT");
+ rec->ExceptionCode = DBG_CONTROL_C;
+ ourstatus->value.sig = GDB_SIGNAL_INT;
+ break;
+ }
#endif
/* FALLTHROUGH */
case STATUS_WX86_BREAKPOINT:
extern EXCEPTION_RECORD siginfo_er;
#ifdef __x86_64__
+/* The target is a WOW64 process */
+extern bool wow64_process;
/* Ignore first breakpoint exception of WOW64 process */
extern bool ignore_first_breakpoint;
#endif
static int saw_create;
static int open_process_used = 0;
#ifdef __x86_64__
-static bool wow64_process = false;
static void *wow64_dbgbreak;
#endif
+2020-09-23 Hannes Domani <ssbssa@yahoo.de>
+
+ * win32-low.cc: Remove local wow64_process variable.
+ * win32-low.h: Remove local wow64_process variable.
+
2020-09-18 Tom Tromey <tromey@adacore.com>
* netbsd-low.h (class netbsd_process_target) <wait>: Update.
/* True if current_process_handle needs to be closed. */
static bool open_process_used = false;
-#ifdef __x86_64__
-bool wow64_process = false;
-#endif
-
const struct target_desc *win32_tdesc;
#ifdef __x86_64__
const struct target_desc *wow64_win32_tdesc;
#ifdef __x86_64__
extern const struct target_desc *wow64_win32_tdesc;
-extern bool wow64_process;
-
typedef BOOL (WINAPI *winapi_Wow64GetThreadContext) (HANDLE, PWOW64_CONTEXT);
extern winapi_Wow64GetThreadContext win32_Wow64GetThreadContext;
#endif