msvcr80: Add _CreateFrameInfo implementation.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
oldstable
Piotr Caban 2016-03-16 21:01:50 +01:00 committed by Alexandre Julliard
parent f08896aa73
commit 0204517401
12 changed files with 38 additions and 10 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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