msvcrt: Add __DestructExceptionObject implementation.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
oldstable
Piotr Caban 2016-03-16 21:02:08 +01:00 committed by Alexandre Julliard
parent 11ccffea08
commit 76411c8dc5
13 changed files with 36 additions and 12 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;
@ -370,6 +372,28 @@ void CDECL _FindAndUnlinkFrame(frame_info *fi)
ERR("frame not found, native crashes in this case\n");
}
/*********************************************************************
* __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.@)
*/

View File

@ -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

View File

@ -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

View File

@ -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