Commit 02045174 authored by Piotr Caban's avatar Piotr Caban Committed by Alexandre Julliard

msvcr80: Add _CreateFrameInfo implementation.

parent f08896aa
@ 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
......
@ 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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment