Commit 76411c8d authored by Piotr Caban's avatar Piotr Caban Committed by Alexandre Julliard

msvcrt: Add __DestructExceptionObject implementation.

parent 11ccffea
......@@ -24,7 +24,7 @@
@ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() ucrtbase.__CxxQueryExceptionSize
@ cdecl __CxxRegisterExceptionObject(ptr ptr) ucrtbase.__CxxRegisterExceptionObject
@ stub __CxxUnregisterExceptionObject
@ stub __DestructExceptionObject
@ cdecl __DestructExceptionObject(ptr) ucrtbase.__DestructExceptionObject
@ stub __FrameUnwindFilter
@ stub __GetPlatformExceptionInfo
@ stub __NLG_Dispatch2
......
......@@ -556,7 +556,7 @@
@ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize()
@ cdecl __CxxRegisterExceptionObject(ptr ptr)
@ stub __CxxUnregisterExceptionObject
@ stub __DestructExceptionObject
@ cdecl __DestructExceptionObject(ptr)
@ stub __FrameUnwindFilter
@ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid
@ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast
......
......@@ -883,7 +883,7 @@
@ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize()
@ cdecl __CxxRegisterExceptionObject(ptr ptr)
@ stub __CxxUnregisterExceptionObject
@ stub __DestructExceptionObject
@ cdecl __DestructExceptionObject(ptr)
@ stub __FrameUnwindFilter
@ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid
@ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast
......
......@@ -867,7 +867,7 @@
@ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize()
@ cdecl __CxxRegisterExceptionObject(ptr ptr)
@ stub __CxxUnregisterExceptionObject
@ stub __DestructExceptionObject
@ cdecl __DestructExceptionObject(ptr)
@ stub __FrameUnwindFilter
@ stub __GetPlatformExceptionInfo
@ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid
......
......@@ -861,7 +861,7 @@
@ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() msvcr120.__CxxQueryExceptionSize
@ cdecl __CxxRegisterExceptionObject(ptr ptr) msvcr120.__CxxRegisterExceptionObject
@ stub __CxxUnregisterExceptionObject
@ stub __DestructExceptionObject
@ cdecl __DestructExceptionObject(ptr) msvcr120.__DestructExceptionObject
@ stub __FrameUnwindFilter
@ stub __GetPlatformExceptionInfo
@ cdecl __RTCastToVoid(ptr) msvcr120.__RTCastToVoid
......
......@@ -125,7 +125,7 @@
@ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize()
@ cdecl __CxxRegisterExceptionObject(ptr ptr)
@ stub __CxxUnregisterExceptionObject
@ stub __DestructExceptionObject
@ cdecl __DestructExceptionObject(ptr)
@ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid
@ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast
@ cdecl __RTtypeid(ptr) MSVCRT___RTtypeid
......
......@@ -120,7 +120,7 @@
@ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize()
@ cdecl __CxxRegisterExceptionObject(ptr ptr)
@ stub __CxxUnregisterExceptionObject
@ stub __DestructExceptionObject
@ cdecl __DestructExceptionObject(ptr)
@ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid
@ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast
@ cdecl __RTtypeid(ptr) MSVCRT___RTtypeid
......
......@@ -190,7 +190,7 @@
@ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize()
@ cdecl __CxxRegisterExceptionObject(ptr ptr)
@ stub __CxxUnregisterExceptionObject
@ stub __DestructExceptionObject
@ cdecl __DestructExceptionObject(ptr)
@ stub __FrameUnwindFilter
@ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid
@ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast
......
......@@ -181,7 +181,7 @@
@ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize()
@ cdecl __CxxRegisterExceptionObject(ptr ptr)
@ stub __CxxUnregisterExceptionObject
@ stub __DestructExceptionObject
@ cdecl __DestructExceptionObject(ptr)
@ stub __FrameUnwindFilter
@ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid
@ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast
......
......@@ -37,6 +37,8 @@
#include "wincon.h"
#include "wine/debug.h"
#include "cppexcept.h"
WINE_DEFAULT_DEBUG_CHANNEL(seh);
static MSVCRT_security_error_handler security_error_handler;
......@@ -371,6 +373,28 @@ void CDECL _FindAndUnlinkFrame(frame_info *fi)
}
/*********************************************************************
* __DestructExceptionObject (MSVCRT.@)
*/
void CDECL __DestructExceptionObject(EXCEPTION_RECORD *rec)
{
cxx_exception_type *info = (cxx_exception_type*) rec->ExceptionInformation[2];
void *object = (void*)rec->ExceptionInformation[1];
TRACE("(%p)\n", rec);
if (!info || !info->destructor)
return;
#if defined(__i386__)
__asm__ __volatile__("call *%0" : : "r" (info->destructor), "c" (object) : "eax", "edx", "memory" );
#elif defined(__x86_64__)
((void (__cdecl*)(void*))(info->destructor+rec->ExceptionInformation[3]))(object);
#else
((void (__cdecl*)(void*))info->destructor)(object);
#endif
}
/*********************************************************************
* __CxxRegisterExceptionObject (MSVCRT.@)
*/
BOOL CDECL __CxxRegisterExceptionObject(EXCEPTION_RECORD **rec, cxx_frame_info *frame_info)
......
......@@ -186,7 +186,7 @@
@ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize()
@ cdecl __CxxRegisterExceptionObject(ptr ptr)
# stub __CxxUnregisterExceptionObject
# stub __DestructExceptionObject
@ cdecl __DestructExceptionObject(ptr)
@ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid
@ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast
@ cdecl __RTtypeid(ptr) MSVCRT___RTtypeid
......
......@@ -58,7 +58,7 @@
@ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize()
@ cdecl __CxxRegisterExceptionObject(ptr ptr)
@ stub __CxxUnregisterExceptionObject
@ stub __DestructExceptionObject
@ cdecl __DestructExceptionObject(ptr)
@ stub __FrameUnwindFilter
@ stub __GetPlatformExceptionInfo
@ stub __NLG_Dispatch2
......
......@@ -21,7 +21,7 @@
@ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() ucrtbase.__CxxQueryExceptionSize
@ cdecl __CxxRegisterExceptionObject(ptr ptr) ucrtbase.__CxxRegisterExceptionObject
@ stub __CxxUnregisterExceptionObject
@ stub __DestructExceptionObject
@ cdecl __DestructExceptionObject(ptr) ucrtbase.__DestructExceptionObject
@ stub __FrameUnwindFilter
@ stub __GetPlatformExceptionInfo
@ stub __NLG_Dispatch2
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment