]> granicus.if.org Git - gc/commit
Fix GetThreadContext stale register values use if WoW64 (Win32)
authorHamayama <hamay1010@gmail.com>
Thu, 7 Feb 2019 21:51:25 +0000 (00:51 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Sat, 16 Feb 2019 21:10:35 +0000 (00:10 +0300)
commitc28d79fb58c4a4d99c41cf0369917a6bbe67e101
treee0ff885b97e2fe6f5ec3df921b20a53abec8b83c
parent9b00f6d65d6b6b352bb16f838131242e7415236b
Fix GetThreadContext stale register values use if WoW64 (Win32)
(a cherry-pick of commit 8bba28b6 from 'release-7_6')

Issue #262 (bdwgc).

* win32_threads.c [I386] (isWow64): New static variable.
* win32_threads.c [I386] (GC_push_stack_for): If isWow64 then set also
CONTEXT_EXCEPTION_REQUEST and CONTEXT_SEGMENTS bits in ContextFlags;
if isWow64, and CONTEXT_EXCEPTION_REPORTING and
CONTEXT_EXCEPTION_ACTIVE are set on return from GetThreadContext then
call GetThreadSelectorEntry and use StackLimit of FS selector to set
sp local variable (instead of context.Esp); add comment.
* win32_threads.c [I386 && DEBUG_THREADS] (GC_push_stack_for): Call
GC_log_printf() to report TIB stack limit/base and the case when
CONTEXT_EXCEPTION_REQUEST is not supported.
* win32_threads.c [I386] (GC_thr_init): Set isWow64 by IsWow64Process()
if the later is available.
win32_threads.c