msvcp140: Add __uncaught_exceptions implementation.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
oldstable
Piotr Caban 2018-03-20 15:37:00 +01:00 committed by Alexandre Julliard
parent 36a88ac2e1
commit c07ade82ed
4 changed files with 17 additions and 1 deletions

View File

@ -3513,7 +3513,7 @@
@ thiscall -arch=i386 ?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ(ptr) basic_streambuf_wchar_uflow
@ cdecl -arch=win64 ?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ(ptr) basic_streambuf_wchar_uflow
@ cdecl ?uncaught_exception@std@@YA_NXZ() MSVCP__uncaught_exception
@ stub ?uncaught_exceptions@std@@YAHXZ
@ cdecl ?uncaught_exceptions@std@@YAHXZ() __uncaught_exceptions
@ cdecl -arch=arm ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAAHXZ(ptr) basic_streambuf_char_underflow
@ thiscall -arch=i386 ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ(ptr) basic_streambuf_char_underflow
@ cdecl -arch=win64 ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ(ptr) basic_streambuf_char_underflow

View File

@ -944,6 +944,13 @@ MSVCP_bool __cdecl MSVCP__uncaught_exception(void)
return __uncaught_exception();
}
#if _MSVCP_VER >= 140
int __cdecl __uncaught_exceptions(void)
{
return *UCRTBASE___processing_throw();
}
#endif
#if _MSVCP_VER >= 70 || defined(_MSVCIRT)
#define EXCEPTION_VTABLE(name,funcs) __ASM_VTABLE(name,funcs)
#else

View File

@ -47,6 +47,10 @@ extern void* (__cdecl *MSVCRT_operator_new)(MSVCP_size_t);
extern void (__cdecl *MSVCRT_operator_delete)(void*);
extern void* (__cdecl *MSVCRT_set_new_handler)(void*);
#if _MSVCP_VER >= 140
extern int* (__cdecl *UCRTBASE___processing_throw)(void);
#endif
#if _MSVCP_VER >= 110
/* keep in sync with msvcrt/lock.c */
typedef struct cs_queue

View File

@ -60,6 +60,10 @@ void* (__cdecl *MSVCRT_operator_new)(MSVCP_size_t);
void (__cdecl *MSVCRT_operator_delete)(void*);
void* (__cdecl *MSVCRT_set_new_handler)(void*);
#if _MSVCP_VER >= 140
int* (__cdecl *UCRTBASE___processing_throw)(void);
#endif
#if _MSVCP_VER >= 110
critical_section* (__thiscall *critical_section_ctor)(critical_section*);
void (__thiscall *critical_section_dtor)(critical_section*);
@ -147,6 +151,7 @@ static void init_cxx_funcs(void)
MSVCRT_operator_new = operator_new;
MSVCRT_operator_delete = operator_delete;
MSVCRT_set_new_handler = (void*)GetProcAddress(hmod, "_set_new_handler");
UCRTBASE___processing_throw = (void*)GetProcAddress(hmod, "__processing_throw");
hcon = LoadLibraryA( CONCRT_NAME(_MSVCP_VER) );
if (!hcon) FIXME( "%s not loaded\n", CONCRT_NAME(_MSVCP_VER) );