ntdll: Assume leaf function when we can't find exception information for an ELF module.

This commit is contained in:
Alexandre Julliard 2009-10-16 13:39:15 +02:00
parent 9dd78e13d5
commit 905609b73b
1 changed files with 8 additions and 6 deletions

View File

@ -1849,9 +1849,10 @@ static NTSTATUS call_stack_handlers( EXCEPTION_RECORD *rec, CONTEXT *orig_contex
const struct dwarf_fde *fde = _Unwind_Find_FDE( (void *)(context.Rip - 1), &bases );
if (!fde)
{
ERR( "no exception data found in %s for function %lx\n",
module ? debugstr_w(module->BaseDllName.Buffer) : "system library", context.Rip );
break;
/* assume leaf function */
context.Rip = *(ULONG64 *)context.Rsp;
context.Rsp += sizeof(ULONG64);
continue;
}
status = dwarf_virtual_unwind( context.Rip, &dispatch.EstablisherFrame, &new_context,
fde, &bases, &dispatch.LanguageHandler, &dispatch.HandlerData );
@ -2712,9 +2713,10 @@ void WINAPI RtlUnwindEx( ULONG64 end_frame, ULONG64 target_ip, EXCEPTION_RECORD
const struct dwarf_fde *fde = _Unwind_Find_FDE( (void *)(context.Rip - 1), &bases );
if (!fde)
{
ERR( "no exception data found in %s for function %lx\n",
module ? debugstr_w(module->BaseDllName.Buffer) : "system library", context.Rip );
raise_status( STATUS_BAD_FUNCTION_TABLE, rec );
/* assume leaf function */
context.Rip = *(ULONG64 *)context.Rsp;
context.Rsp += sizeof(ULONG64);
continue;
}
dispatch.FunctionEntry = NULL;
status = dwarf_virtual_unwind( context.Rip, &dispatch.EstablisherFrame, &new_context, fde,