msvcr80: Add _CreateFrameInfo implementation.
Signed-off-by: Piotr Caban <piotr@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
f08896aa73
commit
0204517401
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue