From 8348d4b40eb21fb21a314c6c2ca230c3d02b0102 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Wed, 16 Mar 2016 21:02:45 +0100 Subject: [PATCH] msvcrt: Add __CxxUnregisterExceptionObject partial implementation. Signed-off-by: Piotr Caban Signed-off-by: Alexandre Julliard --- .../api-ms-win-crt-private-l1-1-0.spec | 2 +- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr120_app/msvcr120_app.spec | 2 +- dlls/msvcr70/msvcr70.spec | 2 +- dlls/msvcr71/msvcr71.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/except.c | 18 ++++++++++++++++++ dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 2 +- dlls/vcruntime140/vcruntime140.spec | 2 +- 13 files changed, 30 insertions(+), 12 deletions(-) diff --git a/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec b/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec index ee323885478..4061485b562 100644 --- a/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec +++ b/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec @@ -23,7 +23,7 @@ @ stdcall -arch=i386 __CxxLongjmpUnwind(ptr) ucrtbase.__CxxLongjmpUnwind @ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() ucrtbase.__CxxQueryExceptionSize @ cdecl __CxxRegisterExceptionObject(ptr ptr) ucrtbase.__CxxRegisterExceptionObject -@ stub __CxxUnregisterExceptionObject +@ cdecl __CxxUnregisterExceptionObject(ptr long) ucrtbase.__CxxUnregisterExceptionObject @ cdecl __DestructExceptionObject(ptr) ucrtbase.__DestructExceptionObject @ stub __FrameUnwindFilter @ stub __GetPlatformExceptionInfo diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 73b86884fb5..390ccfbbddf 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -555,7 +555,7 @@ @ stdcall -arch=i386 __CxxLongjmpUnwind(ptr) @ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() @ cdecl __CxxRegisterExceptionObject(ptr ptr) -@ stub __CxxUnregisterExceptionObject +@ cdecl __CxxUnregisterExceptionObject(ptr long) @ cdecl __DestructExceptionObject(ptr) @ stub __FrameUnwindFilter @ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 9659942b1f8..67edb5ab724 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -882,7 +882,7 @@ @ stdcall -arch=i386 __CxxLongjmpUnwind(ptr) @ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() @ cdecl __CxxRegisterExceptionObject(ptr ptr) -@ stub __CxxUnregisterExceptionObject +@ cdecl __CxxUnregisterExceptionObject(ptr long) @ cdecl __DestructExceptionObject(ptr) @ stub __FrameUnwindFilter @ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index c9f49a327b2..8417443f0f3 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -866,7 +866,7 @@ @ stdcall -arch=i386 __CxxLongjmpUnwind(ptr) @ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() @ cdecl __CxxRegisterExceptionObject(ptr ptr) -@ stub __CxxUnregisterExceptionObject +@ cdecl __CxxUnregisterExceptionObject(ptr long) @ cdecl __DestructExceptionObject(ptr) @ stub __FrameUnwindFilter @ stub __GetPlatformExceptionInfo diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index a8165c9f366..c58d8f773a4 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -860,7 +860,7 @@ @ stdcall -arch=i386 __CxxLongjmpUnwind(ptr) msvcr120.__CxxLongjmpUnwind @ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() msvcr120.__CxxQueryExceptionSize @ cdecl __CxxRegisterExceptionObject(ptr ptr) msvcr120.__CxxRegisterExceptionObject -@ stub __CxxUnregisterExceptionObject +@ cdecl __CxxUnregisterExceptionObject(ptr long) msvcr120.__CxxUnregisterExceptionObject @ cdecl __DestructExceptionObject(ptr) msvcr120.__DestructExceptionObject @ stub __FrameUnwindFilter @ stub __GetPlatformExceptionInfo diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec index d7fe7896201..f236db5c4a8 100644 --- a/dlls/msvcr70/msvcr70.spec +++ b/dlls/msvcr70/msvcr70.spec @@ -124,7 +124,7 @@ @ stdcall -arch=i386 __CxxLongjmpUnwind(ptr) @ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() @ cdecl __CxxRegisterExceptionObject(ptr ptr) -@ stub __CxxUnregisterExceptionObject +@ cdecl __CxxUnregisterExceptionObject(ptr long) @ cdecl __DestructExceptionObject(ptr) @ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid @ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec index 944b43741f3..5414dc6b523 100644 --- a/dlls/msvcr71/msvcr71.spec +++ b/dlls/msvcr71/msvcr71.spec @@ -119,7 +119,7 @@ @ stdcall -arch=i386 __CxxLongjmpUnwind(ptr) @ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() @ cdecl __CxxRegisterExceptionObject(ptr ptr) -@ stub __CxxUnregisterExceptionObject +@ cdecl __CxxUnregisterExceptionObject(ptr long) @ cdecl __DestructExceptionObject(ptr) @ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid @ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 84f0f58d72a..0fb6f198089 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -189,7 +189,7 @@ @ stdcall -arch=i386 __CxxLongjmpUnwind(ptr) @ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() @ cdecl __CxxRegisterExceptionObject(ptr ptr) -@ stub __CxxUnregisterExceptionObject +@ cdecl __CxxUnregisterExceptionObject(ptr long) @ cdecl __DestructExceptionObject(ptr) @ stub __FrameUnwindFilter @ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index db99449673d..7f81b741bf7 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -180,7 +180,7 @@ @ stdcall -arch=i386 __CxxLongjmpUnwind(ptr) @ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() @ cdecl __CxxRegisterExceptionObject(ptr ptr) -@ stub __CxxUnregisterExceptionObject +@ cdecl __CxxUnregisterExceptionObject(ptr long) @ cdecl __DestructExceptionObject(ptr) @ stub __FrameUnwindFilter @ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid diff --git a/dlls/msvcrt/except.c b/dlls/msvcrt/except.c index f950707befa..903daa58e05 100644 --- a/dlls/msvcrt/except.c +++ b/dlls/msvcrt/except.c @@ -416,3 +416,21 @@ BOOL CDECL __CxxRegisterExceptionObject(EXCEPTION_RECORD **rec, cxx_frame_info * _CreateFrameInfo(&frame_info->frame_info, (void*)(*rec)->ExceptionInformation[1]); return TRUE; } + +/********************************************************************* + * __CxxUnregisterExceptionObject (MSVCRT.@) + */ +void CDECL __CxxUnregisterExceptionObject(cxx_frame_info *frame_info, BOOL in_use) +{ + thread_data_t *data = msvcrt_get_thread_data(); + + FIXME("(%p) semi-stub\n", frame_info); + + if(frame_info->rec == (void*)-1) + return; + + _FindAndUnlinkFrame(&frame_info->frame_info); + if(data->exc_record->ExceptionCode == CXX_EXCEPTION && !in_use) /* FIXME: use _IsExceptionObjectToBeDestroyed here */ + __DestructExceptionObject(data->exc_record); + data->exc_record = frame_info->rec; +} diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 3093cd4ad2e..d485a0ed742 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -185,7 +185,7 @@ @ stdcall -arch=i386 __CxxLongjmpUnwind(ptr) @ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() @ cdecl __CxxRegisterExceptionObject(ptr ptr) -# stub __CxxUnregisterExceptionObject +@ cdecl __CxxUnregisterExceptionObject(ptr long) @ cdecl __DestructExceptionObject(ptr) @ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid @ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index e85ae8afe2e..d66148cc6ae 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -57,7 +57,7 @@ @ stdcall -arch=i386 __CxxLongjmpUnwind(ptr) @ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() @ cdecl __CxxRegisterExceptionObject(ptr ptr) -@ stub __CxxUnregisterExceptionObject +@ cdecl __CxxUnregisterExceptionObject(ptr long) @ cdecl __DestructExceptionObject(ptr) @ stub __FrameUnwindFilter @ stub __GetPlatformExceptionInfo diff --git a/dlls/vcruntime140/vcruntime140.spec b/dlls/vcruntime140/vcruntime140.spec index f0b11fdc003..574ce15356b 100644 --- a/dlls/vcruntime140/vcruntime140.spec +++ b/dlls/vcruntime140/vcruntime140.spec @@ -20,7 +20,7 @@ @ stdcall -arch=i386 __CxxLongjmpUnwind(ptr) ucrtbase.__CxxLongjmpUnwind @ cdecl -arch=i386,x86_64,arm __CxxQueryExceptionSize() ucrtbase.__CxxQueryExceptionSize @ cdecl __CxxRegisterExceptionObject(ptr ptr) ucrtbase.__CxxRegisterExceptionObject -@ stub __CxxUnregisterExceptionObject +@ cdecl __CxxUnregisterExceptionObject(ptr long) ucrtbase.__CxxUnregisterExceptionObject @ cdecl __DestructExceptionObject(ptr) ucrtbase.__DestructExceptionObject @ stub __FrameUnwindFilter @ stub __GetPlatformExceptionInfo