diff --git a/dlls/ntdll/unix/signal_arm.c b/dlls/ntdll/unix/signal_arm.c index fc37f917219..2017cf150db 100644 --- a/dlls/ntdll/unix/signal_arm.c +++ b/dlls/ntdll/unix/signal_arm.c @@ -255,13 +255,16 @@ NTSTATUS CDECL unwind_builtin_dll( ULONG type, struct _DISPATCHER_CONTEXT *dispa } if (rc == -UNW_ENOINFO || ip < info.start_ip || ip > info.end_ip) { - TRACE( "no info found for %x ip %x-%x, assuming leaf function\n", - ip, info.start_ip, info.end_ip ); + NTSTATUS status = context->Pc != context->Lr ? + STATUS_SUCCESS : STATUS_INVALID_DISPOSITION; + TRACE( "no info found for %x ip %x-%x, %s\n", + ip, info.start_ip, info.end_ip, status == STATUS_SUCCESS ? + "assuming leaf function" : "error, stuck" ); dispatch->LanguageHandler = NULL; dispatch->EstablisherFrame = context->Sp; context->Pc = context->Lr; context->ContextFlags |= CONTEXT_UNWOUND_TO_CALL; - return STATUS_SUCCESS; + return status; } TRACE( "ip %#x function %#lx-%#lx personality %#lx lsda %#lx fde %#lx\n",