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 @ stdcall _CxxThrowException(long long) ucrtbase._CxxThrowException
@ cdecl -arch=i386 -norelay _EH_prolog() ucrtbase._EH_prolog @ cdecl -arch=i386 -norelay _EH_prolog() ucrtbase._EH_prolog
@ stub _FindAndUnlinkFrame @ stub _FindAndUnlinkFrame
......
...@@ -522,7 +522,7 @@ ...@@ -522,7 +522,7 @@
@ cdecl -arch=i386 _CItanh() @ cdecl -arch=i386 _CItanh()
@ cdecl _CRT_RTC_INIT(ptr ptr long long long) @ cdecl _CRT_RTC_INIT(ptr ptr long long long)
@ cdecl _CRT_RTC_INITW(ptr ptr long long long) @ cdecl _CRT_RTC_INITW(ptr ptr long long long)
@ stub _CreateFrameInfo @ cdecl _CreateFrameInfo(ptr ptr)
@ stdcall _CxxThrowException(long long) @ stdcall _CxxThrowException(long long)
@ cdecl -arch=i386 -norelay _EH_prolog() @ cdecl -arch=i386 -norelay _EH_prolog()
@ stub _FindAndUnlinkFrame @ stub _FindAndUnlinkFrame
......
...@@ -842,7 +842,7 @@ ...@@ -842,7 +842,7 @@
@ cdecl -arch=i386 _CItanh() @ cdecl -arch=i386 _CItanh()
@ cdecl _CRT_RTC_INIT(ptr ptr long long long) @ cdecl _CRT_RTC_INIT(ptr ptr long long long)
@ cdecl _CRT_RTC_INITW(ptr ptr long long long) @ cdecl _CRT_RTC_INITW(ptr ptr long long long)
@ stub _CreateFrameInfo @ cdecl _CreateFrameInfo(ptr ptr)
@ stdcall _CxxThrowException(long long) @ stdcall _CxxThrowException(long long)
@ cdecl -arch=i386 -norelay _EH_prolog() @ cdecl -arch=i386 -norelay _EH_prolog()
@ stub -arch=arm _FPE_Raise @ stub -arch=arm _FPE_Raise
......
...@@ -825,7 +825,7 @@ ...@@ -825,7 +825,7 @@
@ cdecl _CRT_RTC_INIT(ptr ptr long long long) @ cdecl _CRT_RTC_INIT(ptr ptr long long long)
@ cdecl _CRT_RTC_INITW(ptr ptr long long long) @ cdecl _CRT_RTC_INITW(ptr ptr long long long)
@ stub _Cbuild @ stub _Cbuild
@ stub _CreateFrameInfo @ cdecl _CreateFrameInfo(ptr ptr)
@ stdcall _CxxThrowException(long long) @ stdcall _CxxThrowException(long long)
@ cdecl -arch=i386 -norelay _EH_prolog() @ cdecl -arch=i386 -norelay _EH_prolog()
@ stub -arch=arm _FPE_Raise @ stub -arch=arm _FPE_Raise
......
...@@ -819,7 +819,7 @@ ...@@ -819,7 +819,7 @@
@ cdecl -arch=i386 _CItan() msvcr120._CItan @ cdecl -arch=i386 _CItan() msvcr120._CItan
@ cdecl -arch=i386 _CItanh() msvcr120._CItanh @ cdecl -arch=i386 _CItanh() msvcr120._CItanh
@ stub _Cbuild @ stub _Cbuild
@ stub _CreateFrameInfo @ cdecl _CreateFrameInfo(ptr ptr) msvcr120._CreateFrameInfo
@ stdcall _CxxThrowException(long long) msvcr120._CxxThrowException @ stdcall _CxxThrowException(long long) msvcr120._CxxThrowException
@ cdecl -arch=i386 -norelay _EH_prolog() msvcr120._EH_prolog @ cdecl -arch=i386 -norelay _EH_prolog() msvcr120._EH_prolog
@ stub -arch=arm _FPE_Raise @ stub -arch=arm _FPE_Raise
......
...@@ -152,7 +152,7 @@ ...@@ -152,7 +152,7 @@
@ cdecl -arch=i386 _CItanh() @ cdecl -arch=i386 _CItanh()
@ cdecl _CRT_RTC_INIT(ptr ptr long long long) @ cdecl _CRT_RTC_INIT(ptr ptr long long long)
@ cdecl _CRT_RTC_INITW(ptr ptr long long long) @ cdecl _CRT_RTC_INITW(ptr ptr long long long)
@ stub _CreateFrameInfo @ cdecl _CreateFrameInfo(ptr ptr)
@ stdcall _CxxThrowException(long long) @ stdcall _CxxThrowException(long long)
@ cdecl -arch=i386 -norelay _EH_prolog() @ cdecl -arch=i386 -norelay _EH_prolog()
@ stub _FindAndUnlinkFrame @ stub _FindAndUnlinkFrame
......
...@@ -149,7 +149,7 @@ ...@@ -149,7 +149,7 @@
@ cdecl -arch=i386 _CItanh() @ cdecl -arch=i386 _CItanh()
@ cdecl _CRT_RTC_INIT(ptr ptr long long long) @ cdecl _CRT_RTC_INIT(ptr ptr long long long)
@ cdecl _CRT_RTC_INITW(ptr ptr long long long) @ cdecl _CRT_RTC_INITW(ptr ptr long long long)
@ stub _CreateFrameInfo @ cdecl _CreateFrameInfo(ptr ptr)
@ stdcall _CxxThrowException(long long) @ stdcall _CxxThrowException(long long)
@ cdecl -arch=i386 -norelay _EH_prolog() @ cdecl -arch=i386 -norelay _EH_prolog()
@ stub _FindAndUnlinkFrame @ stub _FindAndUnlinkFrame
......
...@@ -326,3 +326,18 @@ LPTOP_LEVEL_EXCEPTION_FILTER CDECL MSVCR110__crtSetUnhandledExceptionFilter(LPTO ...@@ -326,3 +326,18 @@ LPTOP_LEVEL_EXCEPTION_FILTER CDECL MSVCR110__crtSetUnhandledExceptionFilter(LPTO
{ {
return SetUnhandledExceptionFilter(filter); 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 ...@@ -414,6 +414,7 @@ static DWORD catch_function_nested_handler( EXCEPTION_RECORD *rec, EXCEPTION_REG
BOOL __cdecl _IsExceptionObjectToBeDestroyed(const void *obj) BOOL __cdecl _IsExceptionObjectToBeDestroyed(const void *obj)
{ {
EXCEPTION_REGISTRATION_RECORD *reg = NtCurrentTeb()->Tib.ExceptionList; EXCEPTION_REGISTRATION_RECORD *reg = NtCurrentTeb()->Tib.ExceptionList;
frame_info *cur;
TRACE( "%p\n", obj ); TRACE( "%p\n", obj );
...@@ -432,6 +433,12 @@ BOOL __cdecl _IsExceptionObjectToBeDestroyed(const void *obj) ...@@ -432,6 +433,12 @@ BOOL __cdecl _IsExceptionObjectToBeDestroyed(const void *obj)
reg = reg->Prev; reg = reg->Prev;
} }
for (cur = msvcrt_get_thread_data()->frame_info_head; cur; cur = cur->next)
{
if (cur->object == obj)
return FALSE;
}
return TRUE; return TRUE;
} }
......
...@@ -204,6 +204,11 @@ typedef struct MSVCRT_localeinfo_struct ...@@ -204,6 +204,11 @@ typedef struct MSVCRT_localeinfo_struct
MSVCRT_pthreadmbcinfo mbcinfo; MSVCRT_pthreadmbcinfo mbcinfo;
} MSVCRT__locale_tstruct, *MSVCRT__locale_t; } MSVCRT__locale_tstruct, *MSVCRT__locale_t;
typedef struct _frame_info
{
void *object;
struct _frame_info *next;
} frame_info;
/* TLS data */ /* TLS data */
extern DWORD msvcrt_tls_index DECLSPEC_HIDDEN; extern DWORD msvcrt_tls_index DECLSPEC_HIDDEN;
...@@ -242,7 +247,8 @@ struct __thread_data { ...@@ -242,7 +247,8 @@ struct __thread_data {
void *unk6[3]; void *unk6[3];
int unk7; int unk7;
EXCEPTION_RECORD *exc_record; EXCEPTION_RECORD *exc_record;
void *unk8[7]; frame_info *frame_info_head;
void *unk8[6];
LCID cached_lcid; LCID cached_lcid;
int unk9[3]; int unk9[3];
DWORD cached_cp; DWORD cached_cp;
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
@ stub _Cbuild @ stub _Cbuild
@ stub _Cmulcc @ stub _Cmulcc
@ stub _Cmulcr @ stub _Cmulcr
@ stub _CreateFrameInfo @ cdecl _CreateFrameInfo(ptr ptr)
@ stdcall _CxxThrowException(long long) @ stdcall _CxxThrowException(long long)
@ cdecl -arch=i386 -norelay _EH_prolog() @ cdecl -arch=i386 -norelay _EH_prolog()
@ stub _Exit @ stub _Exit
......
@ stub _CreateFrameInfo @ cdecl _CreateFrameInfo(ptr ptr) ucrtbase._CreateFrameInfo
@ stdcall _CxxThrowException(long long) ucrtbase._CxxThrowException @ stdcall _CxxThrowException(long long) ucrtbase._CxxThrowException
@ cdecl -arch=i386 -norelay _EH_prolog() ucrtbase._EH_prolog @ cdecl -arch=i386 -norelay _EH_prolog() ucrtbase._EH_prolog
@ stub _FindAndUnlinkFrame @ 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