Module: wine Branch: master Commit: 8348d4b40eb21fb21a314c6c2ca230c3d02b0102 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8348d4b40eb21fb21a314c6c2c... Author: Piotr Caban <piotr(a)codeweavers.com> Date: Wed Mar 16 21:02:45 2016 +0100 msvcrt: Add __CxxUnregisterExceptionObject partial implementation. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- .../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 ee32388..4061485 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 73b8688..390ccfb 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 9659942..67edb5a 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 c9f49a3..8417443 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 a8165c9..c58d8f7 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 d7fe789..f236db5 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 944b437..5414dc6 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 84f0f58..0fb6f19 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 db99449..7f81b74 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 f950707..903daa5 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 3093cd4..d485a0e 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 e85ae8a..d66148c 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 f0b11fd..574ce15 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