ntdll: Try to handle write watches while we're on the signal stack (x86_64).

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Piotr Caban 2019-10-03 20:54:26 +02:00 committed by Alexandre Julliard
parent aade0bf7e3
commit fd60406e91
1 changed files with 9 additions and 0 deletions

View File

@ -2876,6 +2876,15 @@ static void segv_handler( int signal, siginfo_t *siginfo, void *sigcontext )
struct stack_layout *stack;
ucontext_t *ucontext = sigcontext;
stack = (struct stack_layout *)(RSP_sig(ucontext) & ~15);
/* check for exceptions on the signal stack caused by write watches */
if (TRAP_sig(ucontext) == TRAP_x86_PAGEFLT && is_inside_signal_stack( stack ) &&
!virtual_handle_fault( siginfo->si_addr, (ERROR_sig(ucontext) >> 1) & 0x09, TRUE ))
{
return;
}
/* check for page fault inside the thread stack */
if (TRAP_sig(ucontext) == TRAP_x86_PAGEFLT)
{