Module: wine Branch: master Commit: 905609b73bfdedf9b409a3ff86ac9767d9a00af4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=905609b73bfdedf9b409a3ff86...
Author: Alexandre Julliard julliard@winehq.org Date: Fri Oct 16 13:39:15 2009 +0200
ntdll: Assume leaf function when we can't find exception information for an ELF module.
---
dlls/ntdll/signal_x86_64.c | 14 ++++++++------ 1 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index b5ff237..94b3d3c 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -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,