Alexandre Julliard : ntdll: Added a stub for RtlUnwindEx on x86_64.

Alexandre Julliard julliard at winehq.org
Mon May 18 08:13:12 CDT 2009


Module: wine
Branch: master
Commit: 47d77025227c3bd71d2f7896e0453d96081df018
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=47d77025227c3bd71d2f7896e0453d96081df018

Author: Alexandre Julliard <julliard at 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 )
 
 




More information about the wine-cvs mailing list