Fix compilation errors on unsupported platforms, make it work on UWP (#103)
This commit is contained in:
parent
5eab634ac2
commit
4299ac842a
34
ruapu.h
34
ruapu.h
@ -19,34 +19,23 @@ const char* const* ruapu_rua();
|
||||
|
||||
#ifdef RUAPU_IMPLEMENTATION
|
||||
|
||||
#include <string.h>
|
||||
|
||||
typedef void (*ruapu_some_inst)();
|
||||
|
||||
#if defined _WIN32
|
||||
|
||||
#include <windows.h>
|
||||
#include <setjmp.h>
|
||||
#include <string.h>
|
||||
|
||||
#if WINAPI_FAMILY == WINAPI_FAMILY_APP
|
||||
// uwp does not support veh :(
|
||||
#if defined (_MSC_VER)
|
||||
#pragma message("warning: ruapu does not support UWP yet.")
|
||||
#else
|
||||
#warning ruapu does not support UWP yet.
|
||||
#endif
|
||||
static int ruapu_detect_isa(const void* some_inst)
|
||||
{
|
||||
(void)some_inst;
|
||||
return 0;
|
||||
}
|
||||
#else // WINAPI_FAMILY == WINAPI_FAMILY_APP
|
||||
typedef const void* ruapu_some_inst;
|
||||
#if defined (_MSC_VER) // MSVC
|
||||
static int ruapu_detect_isa(const void* some_inst)
|
||||
static int ruapu_detect_isa(ruapu_some_inst some_inst)
|
||||
{
|
||||
int g_ruapu_sigill_caught = 0;
|
||||
|
||||
__try
|
||||
{
|
||||
((void (*)())some_inst)();
|
||||
some_inst();
|
||||
}
|
||||
__except (GetExceptionCode() == EXCEPTION_ILLEGAL_INSTRUCTION ?
|
||||
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
|
||||
@ -71,7 +60,7 @@ static LONG CALLBACK ruapu_catch_sigill(struct _EXCEPTION_POINTERS* ExceptionInf
|
||||
return EXCEPTION_CONTINUE_SEARCH;
|
||||
}
|
||||
|
||||
static int ruapu_detect_isa(const void* some_inst)
|
||||
static int ruapu_detect_isa(ruapu_some_inst some_inst)
|
||||
{
|
||||
g_ruapu_sigill_caught = 0;
|
||||
|
||||
@ -79,26 +68,22 @@ static int ruapu_detect_isa(const void* some_inst)
|
||||
|
||||
if (setjmp(g_ruapu_jmpbuf) == 0)
|
||||
{
|
||||
((void (*)())some_inst)();
|
||||
some_inst();
|
||||
}
|
||||
|
||||
RemoveVectoredExceptionHandler(eh);
|
||||
|
||||
return g_ruapu_sigill_caught ? 0 : 1;
|
||||
}
|
||||
#endif
|
||||
#endif // WINAPI_FAMILY == WINAPI_FAMILY_APP
|
||||
|
||||
#elif defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined __DragonFly__ || defined __sun__
|
||||
#include <signal.h>
|
||||
#include <setjmp.h>
|
||||
#include <string.h>
|
||||
|
||||
static int g_ruapu_sigill_caught = 0;
|
||||
static sigjmp_buf g_ruapu_jmpbuf;
|
||||
|
||||
typedef void (*ruapu_some_inst)();
|
||||
|
||||
static void ruapu_catch_sigill(int signo, siginfo_t* si, void* data)
|
||||
{
|
||||
(void)signo;
|
||||
@ -131,7 +116,6 @@ static int ruapu_detect_isa(ruapu_some_inst some_inst)
|
||||
|
||||
#elif defined __SYTERKIT__
|
||||
|
||||
typedef void (*ruapu_some_inst)();
|
||||
#include <mmu.h>
|
||||
|
||||
static int g_ruapu_sigill_caught = 0;
|
||||
@ -358,7 +342,7 @@ struct ruapu_isa_entry
|
||||
ruapu_some_inst inst;
|
||||
};
|
||||
|
||||
#define RUAPU_ISAENTRY(isa) { #isa, (ruapu_some_inst)ruapu_some_##isa },
|
||||
#define RUAPU_ISAENTRY(isa) { #isa, (ruapu_some_inst)(void*)ruapu_some_##isa },
|
||||
|
||||
struct ruapu_isa_entry g_ruapu_isa_map[] = {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user