[CPPRT][CRT][MSVCRT] Move __CxxFrameHandler3 to crt and export it on NT6

Previously it was in cpprt, which is a support library for C++, containing functions that are not exported by msvcrt. But since Vista __CxxFrameHandler3 is exported by msvcrt. Therefore move it to crt, and to satisfy pre-Vista configurations, also add it to msvcrtex.
This commit is contained in:
Timo Kreuzer 2020-09-24 07:49:16 +02:00
parent 310563aece
commit ce848e5c11
9 changed files with 58 additions and 22 deletions

View file

@ -7,23 +7,6 @@ EXTERN &orig : PROC
ALIAS <&alias> = <&orig>
ENDM
EXTERN _CxxHandleV8Frame@20 : PROC
PUBLIC ___CxxFrameHandler3
___CxxFrameHandler3:
push eax
push dword ptr [esp + 20]
push dword ptr [esp + 20]
push dword ptr [esp + 20]
push dword ptr [esp + 20]
call _CxxHandleV8Frame@20
ret
EXTERN ___CxxFrameHandler : PROC
PUBLIC _CallCxxFrameHandler
_CallCxxFrameHandler:
mov eax, dword ptr [esp + 20]
jmp ___CxxFrameHandler
; void __stdcall `eh vector constructor iterator'(void *,unsigned int,int,void (__thiscall*)(void *),void (__thiscall*)(void *))
DEFINE_ALIAS ??_L@YGXPAXIHP6EX0@Z1@Z, ?MSVCRTEX_eh_vector_constructor_iterator@@YGXPAXIHP6EX0@Z1@Z

View file

@ -1,46 +0,0 @@
/*
* PROJECT: ReactOS C++ runtime library
* LICENSE: GPLv2+ - See COPYING in the top level directory
* PURPOSE: __CxxFrameHandler3 to __CxxFrameHandler wrapper
* PROGRAMMER: Thomas Faber (thomas.faber@reactos.org)
*/
#define WIN32_NO_STATUS
#include <windef.h>
#include <winbase.h>
#include <ndk/rtltypes.h>
#define WINE_NO_TRACE_MSGS
#include <wine/debug.h>
#include <wine/exception.h>
#include <internal/wine/msvcrt.h>
#include <internal/wine/cppexcept.h>
extern DWORD CDECL CallCxxFrameHandler(PEXCEPTION_RECORD rec, EXCEPTION_REGISTRATION_RECORD *frame,
PCONTEXT context, EXCEPTION_REGISTRATION_RECORD **dispatch,
const cxx_function_descr *descr);
DWORD
__stdcall
CxxHandleV8Frame(
_In_ PEXCEPTION_RECORD rec,
_In_ EXCEPTION_REGISTRATION_RECORD *frame,
_In_ PCONTEXT context,
_In_ EXCEPTION_REGISTRATION_RECORD **dispatch,
_In_ const cxx_function_descr *descr)
{
cxx_function_descr stub_descr;
if (descr->magic != CXX_FRAME_MAGIC_VC8)
return CallCxxFrameHandler(rec, frame, context, dispatch, descr);
if ((descr->flags & FUNC_DESCR_SYNCHRONOUS) &&
(rec->ExceptionCode != CXX_EXCEPTION))
{
return ExceptionContinueSearch; /* handle only c++ exceptions */
}
stub_descr = *descr;
stub_descr.magic = CXX_FRAME_MAGIC_VC7;
return CallCxxFrameHandler(rec, frame, context, dispatch, &stub_descr);
}