From: Martin Storsjö martin@martin.st
This is the same modification as the previous patch, applied on arm64. It doesn't change the outcome for any of my tests though.
Signed-off-by: Martin Storsjö martin@martin.st --- dlls/ntdll/signal_arm64.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c index 034c78f6b4d..fba0da48a16 100644 --- a/dlls/ntdll/signal_arm64.c +++ b/dlls/ntdll/signal_arm64.c @@ -165,6 +165,7 @@ static NTSTATUS virtual_unwind( ULONG type, DISPATCHER_CONTEXT *dispatch, CONTEX { LDR_DATA_TABLE_ENTRY *module; NTSTATUS status; + DWORD64 pc;
dispatch->ImageBase = 0; dispatch->ScopeIndex = 0; @@ -175,14 +176,14 @@ static NTSTATUS virtual_unwind( ULONG type, DISPATCHER_CONTEXT *dispatch, CONTEX * signal frame. */ dispatch->ControlPcIsUnwound = (context->ContextFlags & CONTEXT_UNWOUND_TO_CALL) != 0; + pc = context->Pc - (dispatch->ControlPcIsUnwound ? 4 : 0);
/* first look for PE exception information */
- if ((dispatch->FunctionEntry = lookup_function_info( - context->Pc - (dispatch->ControlPcIsUnwound ? 4 : 0), + if ((dispatch->FunctionEntry = lookup_function_info(pc, &dispatch->ImageBase, &module ))) { - dispatch->LanguageHandler = RtlVirtualUnwind( type, dispatch->ImageBase, context->Pc, + dispatch->LanguageHandler = RtlVirtualUnwind( type, dispatch->ImageBase, pc, dispatch->FunctionEntry, context, &dispatch->HandlerData, &dispatch->EstablisherFrame, NULL );