Commit 324150c0 authored by Martin Storsjö's avatar Martin Storsjö Committed by Alexandre Julliard

ntdll: Fix arm call_user_exception_dispatcher with kernel stack for syscalls.

This does the same as 23b44e8d, but for arm: Don't call KiUserExceptionDispatcher directly on the stack pointer stored in the CONTEXT, but use the one stored in syscall_frame (which includes the stack allocation in e.g. RtlRaiseException). Signed-off-by: 's avatarMartin Storsjö <martin@martin.st> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent aa256dee
...@@ -563,12 +563,16 @@ void call_raise_user_exception_dispatcher(void) ...@@ -563,12 +563,16 @@ void call_raise_user_exception_dispatcher(void)
NTSTATUS call_user_exception_dispatcher( EXCEPTION_RECORD *rec, CONTEXT *context ) NTSTATUS call_user_exception_dispatcher( EXCEPTION_RECORD *rec, CONTEXT *context )
{ {
struct syscall_frame *frame = arm_thread_data()->syscall_frame; struct syscall_frame *frame = arm_thread_data()->syscall_frame;
DWORD lr = frame->lr;
DWORD sp = frame->sp;
NTSTATUS status = NtSetContextThread( GetCurrentThread(), context ); NTSTATUS status = NtSetContextThread( GetCurrentThread(), context );
if (status) return status; if (status) return status;
frame->r0 = (DWORD)rec; frame->r0 = (DWORD)rec;
frame->r1 = (DWORD)context; frame->r1 = (DWORD)context;
frame->pc = (DWORD)pKiUserExceptionDispatcher; frame->pc = (DWORD)pKiUserExceptionDispatcher;
frame->lr = lr;
frame->sp = sp;
frame->restore_flags |= CONTEXT_INTEGER | CONTEXT_CONTROL; frame->restore_flags |= CONTEXT_INTEGER | CONTEXT_CONTROL;
return status; return status;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment