Martin Storsjö : ntdll: Subtract an offset from pc if dispatch->ControlPcIsUnwound on arm.
Module: wine Branch: master Commit: 1fb4ce83f409539da74d994f5a37ed839ef6e9c0 URL: https://source.winehq.org/git/wine.git/?a=commit;h=1fb4ce83f409539da74d994f5... Author: Martin Storsjö <martin(a)martin.st> Date: Mon Nov 15 16:02:09 2021 +0200 ntdll: Subtract an offset from pc if dispatch->ControlPcIsUnwound on arm. This fixes unwinding from functions ending with a call to a function that won't return. This matches what is done on the PE side in the call to lookup_function_info. Signed-off-by: Martin Storsjö <martin(a)martin.st> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntdll/unix/signal_arm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/ntdll/unix/signal_arm.c b/dlls/ntdll/unix/signal_arm.c index 2017cf150db..ebc08984adf 100644 --- a/dlls/ntdll/unix/signal_arm.c +++ b/dlls/ntdll/unix/signal_arm.c @@ -229,7 +229,7 @@ extern void raise_func_trampoline( EXCEPTION_RECORD *rec, CONTEXT *context, void NTSTATUS CDECL unwind_builtin_dll( ULONG type, struct _DISPATCHER_CONTEXT *dispatch, CONTEXT *context ) { #ifdef HAVE_LIBUNWIND - DWORD ip = context->Pc; + DWORD ip = context->Pc - (dispatch->ControlPcIsUnwound ? 2 : 0); unw_context_t unw_context; unw_cursor_t cursor; unw_proc_info_t info;
participants (1)
-
Alexandre Julliard