Piotr Caban : msvcr80: Add _CreateFrameInfo implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Mar 17 10:02:13 CDT 2016
Module: wine
Branch: master
Commit: 020451740158aa6bdb8e8f3b4f9af899ca615d9b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=020451740158aa6bdb8e8f3b4f9af899ca615d9b
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Mar 16 21:01:50 2016 +0100
msvcr80: Add _CreateFrameInfo implementation.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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
More information about the wine-cvs
mailing list