Skip to content
Snippets Groups Projects
Commit 46a8d39e authored by Martin Storsjö's avatar Martin Storsjö Committed by Michael Stefaniuc
Browse files

ntdll: Properly return errors when failing to unwind.


If libunwind is unavailable, make libunwind_virtual_unwind return an
error. Likewise if there was no PE exception info and we didn't try
unwinding using libunwind, we need to return an error when realizing
we were unable to unwind, instead of just warning and returning
success.

This fixes hangs/infinite loops on crashes when unwinding fails.

Signed-off-by: default avatarMartin Storsjo <martin@martin.st>
Signed-off-by: default avatarAndré Hentschel <nerv@dawncrow.de>
Signed-off-by: Alexandre Julliard's avatarAlexandre Julliard <julliard@winehq.org>
(cherry picked from commit ea9f47a7)
Signed-off-by: default avatarMichael Stefaniuc <mstefani@winehq.org>
parent 1992dcb5
No related branches found
No related tags found
No related merge requests found
......@@ -597,8 +597,10 @@ static NTSTATUS libunwind_virtual_unwind( ULONG_PTR ip, ULONG_PTR *frame, CONTEX
context->u.s.X24, context->u.s.X25, context->u.s.X26, context->u.s.X27 );
TRACE(" x28=%016lx fp=%016lx lr=%016lx sp=%016lx\n",
context->u.s.X28, context->u.s.Fp, context->u.s.Lr, context->Sp );
#endif
return STATUS_SUCCESS;
#else
return STATUS_INVALID_DISPOSITION;
#endif
}
......@@ -645,7 +647,11 @@ static NTSTATUS virtual_unwind( ULONG type, DISPATCHER_CONTEXT *dispatch, CONTEX
return STATUS_SUCCESS;
}
}
else WARN( "exception data not found in %s\n", debugstr_w(module->BaseDllName.Buffer) );
else
{
WARN( "exception data not found in %s\n", debugstr_w(module->BaseDllName.Buffer) );
return STATUS_INVALID_DISPOSITION;
}
dispatch->EstablisherFrame = context->u.s.Fp;
dispatch->LanguageHandler = NULL;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment