Module: wine Branch: master Commit: 47d77025227c3bd71d2f7896e0453d96081df018 URL: http://source.winehq.org/git/wine.git/?a=commit;h=47d77025227c3bd71d2f7896e0...
Author: Alexandre Julliard julliard@winehq.org Date: Fri May 15 20:18:33 2009 +0200
ntdll: Added a stub for RtlUnwindEx on x86_64.
---
dlls/ntdll/ntdll.spec | 1 + dlls/ntdll/signal_x86_64.c | 25 +++++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 82c3f02..4b5dfec 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -888,6 +888,7 @@ @ stdcall RtlUnlockHeap(long) # @ stub RtlUnlockMemoryStreamRegion @ stdcall -register RtlUnwind(ptr ptr ptr ptr) +@ stdcall -arch=x86_64 RtlUnwindEx(long long ptr long ptr) @ stdcall RtlUpcaseUnicodeChar(long) @ stdcall RtlUpcaseUnicodeString(ptr ptr long) @ stdcall RtlUpcaseUnicodeStringToAnsiString(ptr ptr long) diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index 15785e5..dd8dad9 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -897,30 +897,39 @@ PVOID WINAPI RtlVirtualUnwind ( ULONG type, ULONG64 base, ULONG64 pc,
/******************************************************************* - * RtlUnwind (NTDLL.@) + * RtlUnwindEx (NTDLL.@) */ -void WINAPI __regs_RtlUnwind( EXCEPTION_REGISTRATION_RECORD* pEndFrame, PVOID targetIp, - PEXCEPTION_RECORD pRecord, PVOID retval, CONTEXT *context ) +void WINAPI RtlUnwindEx( ULONG64 frame, ULONG64 target_ip, EXCEPTION_RECORD *rec, + ULONG64 retval, CONTEXT *context, UNWIND_HISTORY_TABLE *table ) { EXCEPTION_RECORD record;
/* build an exception record, if we do not have one */ - if (!pRecord) + if (!rec) { record.ExceptionCode = STATUS_UNWIND; record.ExceptionFlags = 0; record.ExceptionRecord = NULL; record.ExceptionAddress = (void *)context->Rip; record.NumberParameters = 0; - pRecord = &record; + rec = &record; }
- pRecord->ExceptionFlags |= EH_UNWINDING | (pEndFrame ? 0 : EH_EXIT_UNWIND); + rec->ExceptionFlags |= EH_UNWINDING | (frame ? 0 : EH_EXIT_UNWIND);
- FIXME( "code=%x flags=%x not implemented on x86_64\n", - pRecord->ExceptionCode, pRecord->ExceptionFlags ); + FIXME( "code=%x flags=%x not implemented on x86_64\n", rec->ExceptionCode, rec->ExceptionFlags ); NtTerminateProcess( GetCurrentProcess(), 1 ); } + + +/******************************************************************* + * RtlUnwind (NTDLL.@) + */ +void WINAPI __regs_RtlUnwind( ULONG64 frame, ULONG64 target_ip, EXCEPTION_RECORD *rec, + ULONG64 retval, CONTEXT *context ) +{ + RtlUnwindEx( frame, target_ip, rec, retval, context, NULL ); +} DEFINE_REGS_ENTRYPOINT( RtlUnwind, 4 )