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
; void __stdcall `eh vector destructor iterator'(void *,unsigned int,int,void (__thiscall*)(void *))
DEFINE_ALIAS ??_M@YGXPAXIHP6EX0@Z@Z, ?MSVCRTEX_eh_vector_destructor_iterator@@YGXPAXIHP6EX0@Z@Z
-; These are the same
-DEFINE_ALIAS ___CxxFrameHandler3, ___CxxFrameHandler
-
END
--- /dev/null
+/*
+ * 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);
+}