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
|
#ifdef RUAPU_IMPLEMENTATION
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
typedef void (*ruapu_some_inst)();
|
||||||
|
|
||||||
#if defined _WIN32
|
#if defined _WIN32
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <setjmp.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
|
#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;
|
int g_ruapu_sigill_caught = 0;
|
||||||
|
|
||||||
__try
|
__try
|
||||||
{
|
{
|
||||||
((void (*)())some_inst)();
|
some_inst();
|
||||||
}
|
}
|
||||||
__except (GetExceptionCode() == EXCEPTION_ILLEGAL_INSTRUCTION ?
|
__except (GetExceptionCode() == EXCEPTION_ILLEGAL_INSTRUCTION ?
|
||||||
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
|
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
|
||||||
@ -71,7 +60,7 @@ static LONG CALLBACK ruapu_catch_sigill(struct _EXCEPTION_POINTERS* ExceptionInf
|
|||||||
return EXCEPTION_CONTINUE_SEARCH;
|
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;
|
g_ruapu_sigill_caught = 0;
|
||||||
|
|
||||||
@ -79,26 +68,22 @@ static int ruapu_detect_isa(const void* some_inst)
|
|||||||
|
|
||||||
if (setjmp(g_ruapu_jmpbuf) == 0)
|
if (setjmp(g_ruapu_jmpbuf) == 0)
|
||||||
{
|
{
|
||||||
((void (*)())some_inst)();
|
some_inst();
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoveVectoredExceptionHandler(eh);
|
RemoveVectoredExceptionHandler(eh);
|
||||||
|
|
||||||
return g_ruapu_sigill_caught ? 0 : 1;
|
return g_ruapu_sigill_caught ? 0 : 1;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#endif // WINAPI_FAMILY == WINAPI_FAMILY_APP
|
#endif // WINAPI_FAMILY == WINAPI_FAMILY_APP
|
||||||
|
|
||||||
#elif defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined __DragonFly__ || defined __sun__
|
#elif defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined __DragonFly__ || defined __sun__
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
static int g_ruapu_sigill_caught = 0;
|
static int g_ruapu_sigill_caught = 0;
|
||||||
static sigjmp_buf g_ruapu_jmpbuf;
|
static sigjmp_buf g_ruapu_jmpbuf;
|
||||||
|
|
||||||
typedef void (*ruapu_some_inst)();
|
|
||||||
|
|
||||||
static void ruapu_catch_sigill(int signo, siginfo_t* si, void* data)
|
static void ruapu_catch_sigill(int signo, siginfo_t* si, void* data)
|
||||||
{
|
{
|
||||||
(void)signo;
|
(void)signo;
|
||||||
@ -131,7 +116,6 @@ static int ruapu_detect_isa(ruapu_some_inst some_inst)
|
|||||||
|
|
||||||
#elif defined __SYTERKIT__
|
#elif defined __SYTERKIT__
|
||||||
|
|
||||||
typedef void (*ruapu_some_inst)();
|
|
||||||
#include <mmu.h>
|
#include <mmu.h>
|
||||||
|
|
||||||
static int g_ruapu_sigill_caught = 0;
|
static int g_ruapu_sigill_caught = 0;
|
||||||
@ -358,7 +342,7 @@ struct ruapu_isa_entry
|
|||||||
ruapu_some_inst inst;
|
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[] = {
|
struct ruapu_isa_entry g_ruapu_isa_map[] = {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user