Module: wine Branch: master Commit: 020451740158aa6bdb8e8f3b4f9af899ca615d9b URL: http://source.winehq.org/git/wine.git/?a=commit;h=020451740158aa6bdb8e8f3b4f...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Mar 16 21:01:50 2016 +0100
msvcr80: Add _CreateFrameInfo implementation.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/except.c | 15 +++++++++++++++ dlls/msvcrt/except_i386.c | 7 +++++++ dlls/msvcrt/msvcrt.h | 8 +++++++- dlls/ucrtbase/ucrtbase.spec | 2 +- dlls/vcruntime140/vcruntime140.spec | 2 +- 12 files changed, 38 insertions(+), 10 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 8674f44..619425f 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 @@ -1,4 +1,4 @@ -@ stub _CreateFrameInfo +@ cdecl _CreateFrameInfo(ptr ptr) ucrtbase._CreateFrameInfo @ stdcall _CxxThrowException(long long) ucrtbase._CxxThrowException @ cdecl -arch=i386 -norelay _EH_prolog() ucrtbase._EH_prolog @ stub _FindAndUnlinkFrame diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 15a446f..7d6886a 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -522,7 +522,7 @@ @ cdecl -arch=i386 _CItanh() @ cdecl _CRT_RTC_INIT(ptr ptr long long long) @ cdecl _CRT_RTC_INITW(ptr ptr long long long) -@ stub _CreateFrameInfo +@ cdecl _CreateFrameInfo(ptr ptr) @ stdcall _CxxThrowException(long long) @ cdecl -arch=i386 -norelay _EH_prolog() @ stub _FindAndUnlinkFrame diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index ccc659f..73b84e7 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -842,7 +842,7 @@ @ cdecl -arch=i386 _CItanh() @ cdecl _CRT_RTC_INIT(ptr ptr long long long) @ cdecl _CRT_RTC_INITW(ptr ptr long long long) -@ stub _CreateFrameInfo +@ cdecl _CreateFrameInfo(ptr ptr) @ stdcall _CxxThrowException(long long) @ cdecl -arch=i386 -norelay _EH_prolog() @ stub -arch=arm _FPE_Raise diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 5f17e06..7b274c9 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -825,7 +825,7 @@ @ cdecl _CRT_RTC_INIT(ptr ptr long long long) @ cdecl _CRT_RTC_INITW(ptr ptr long long long) @ stub _Cbuild -@ stub _CreateFrameInfo +@ cdecl _CreateFrameInfo(ptr ptr) @ stdcall _CxxThrowException(long long) @ cdecl -arch=i386 -norelay _EH_prolog() @ stub -arch=arm _FPE_Raise diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index e978d20..dffe875 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -819,7 +819,7 @@ @ cdecl -arch=i386 _CItan() msvcr120._CItan @ cdecl -arch=i386 _CItanh() msvcr120._CItanh @ stub _Cbuild -@ stub _CreateFrameInfo +@ cdecl _CreateFrameInfo(ptr ptr) msvcr120._CreateFrameInfo @ stdcall _CxxThrowException(long long) msvcr120._CxxThrowException @ cdecl -arch=i386 -norelay _EH_prolog() msvcr120._EH_prolog @ stub -arch=arm _FPE_Raise diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 4df2215..1035b62 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -152,7 +152,7 @@ @ cdecl -arch=i386 _CItanh() @ cdecl _CRT_RTC_INIT(ptr ptr long long long) @ cdecl _CRT_RTC_INITW(ptr ptr long long long) -@ stub _CreateFrameInfo +@ cdecl _CreateFrameInfo(ptr ptr) @ stdcall _CxxThrowException(long long) @ cdecl -arch=i386 -norelay _EH_prolog() @ stub _FindAndUnlinkFrame diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 4bb2adb..cac6775 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -149,7 +149,7 @@ @ cdecl -arch=i386 _CItanh() @ cdecl _CRT_RTC_INIT(ptr ptr long long long) @ cdecl _CRT_RTC_INITW(ptr ptr long long long) -@ stub _CreateFrameInfo +@ cdecl _CreateFrameInfo(ptr ptr) @ stdcall _CxxThrowException(long long) @ cdecl -arch=i386 -norelay _EH_prolog() @ stub _FindAndUnlinkFrame diff --git a/dlls/msvcrt/except.c b/dlls/msvcrt/except.c index f5c8b03..a204d62 100644 --- a/dlls/msvcrt/except.c +++ b/dlls/msvcrt/except.c @@ -326,3 +326,18 @@ LPTOP_LEVEL_EXCEPTION_FILTER CDECL MSVCR110__crtSetUnhandledExceptionFilter(LPTO { return SetUnhandledExceptionFilter(filter); } + +/********************************************************************* + * _CreateFrameInfo (MSVCR80.@) + */ +frame_info* CDECL _CreateFrameInfo(frame_info *fi, void *obj) +{ + thread_data_t *data = msvcrt_get_thread_data(); + + TRACE("(%p, %p)\n", fi, obj); + + fi->next = data->frame_info_head; + data->frame_info_head = fi; + fi->object = obj; + return fi; +} diff --git a/dlls/msvcrt/except_i386.c b/dlls/msvcrt/except_i386.c index 78ce488..4569572 100644 --- a/dlls/msvcrt/except_i386.c +++ b/dlls/msvcrt/except_i386.c @@ -414,6 +414,7 @@ static DWORD catch_function_nested_handler( EXCEPTION_RECORD *rec, EXCEPTION_REG BOOL __cdecl _IsExceptionObjectToBeDestroyed(const void *obj) { EXCEPTION_REGISTRATION_RECORD *reg = NtCurrentTeb()->Tib.ExceptionList; + frame_info *cur;
TRACE( "%p\n", obj );
@@ -432,6 +433,12 @@ BOOL __cdecl _IsExceptionObjectToBeDestroyed(const void *obj) reg = reg->Prev; }
+ for (cur = msvcrt_get_thread_data()->frame_info_head; cur; cur = cur->next) + { + if (cur->object == obj) + return FALSE; + } + return TRUE; }
diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index aff1741..64a7ab9 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -204,6 +204,11 @@ typedef struct MSVCRT_localeinfo_struct MSVCRT_pthreadmbcinfo mbcinfo; } MSVCRT__locale_tstruct, *MSVCRT__locale_t;
+typedef struct _frame_info +{ + void *object; + struct _frame_info *next; +} frame_info;
/* TLS data */ extern DWORD msvcrt_tls_index DECLSPEC_HIDDEN; @@ -242,7 +247,8 @@ struct __thread_data { void *unk6[3]; int unk7; EXCEPTION_RECORD *exc_record; - void *unk8[7]; + frame_info *frame_info_head; + void *unk8[6]; LCID cached_lcid; int unk9[3]; DWORD cached_cp; diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 16540a5..df7c02e 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -17,7 +17,7 @@ @ stub _Cbuild @ stub _Cmulcc @ stub _Cmulcr -@ stub _CreateFrameInfo +@ cdecl _CreateFrameInfo(ptr ptr) @ stdcall _CxxThrowException(long long) @ cdecl -arch=i386 -norelay _EH_prolog() @ stub _Exit diff --git a/dlls/vcruntime140/vcruntime140.spec b/dlls/vcruntime140/vcruntime140.spec index c518b15..c5e0c4f 100644 --- a/dlls/vcruntime140/vcruntime140.spec +++ b/dlls/vcruntime140/vcruntime140.spec @@ -1,4 +1,4 @@ -@ stub _CreateFrameInfo +@ cdecl _CreateFrameInfo(ptr ptr) ucrtbase._CreateFrameInfo @ stdcall _CxxThrowException(long long) ucrtbase._CxxThrowException @ cdecl -arch=i386 -norelay _EH_prolog() ucrtbase._EH_prolog @ stub _FindAndUnlinkFrame