From 2008665a133481cbe6acb303e00d7e4294babc63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=9A=E6=9C=A8=20=E9=89=89?= Date: Fri, 1 Mar 2024 20:41:44 +0800 Subject: [PATCH] ruapu SyterKit v0.2.6.1 support (#56) --- README.md | 2 +- ruapu.h | 31 ++++++++++++++++++++++++++----- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4ad5a52..55b4643 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ int main() ``` -OS✅ Windows
✅ Linux
✅ macOS
✅ Android
✅ iOS
✅ FreeBSD
✅ NetBSD
✅ OpenBSD +OS✅ Windows
✅ Linux
✅ macOS
✅ Android
✅ iOS
✅ FreeBSD
✅ NetBSD
✅ OpenBSD
✅ SyterKit Compiler✅ GCC
✅ Clang
✅ MSVC
✅ MinGW diff --git a/ruapu.h b/ruapu.h index 340d287..ee7132a 100644 --- a/ruapu.h +++ b/ruapu.h @@ -19,12 +19,11 @@ const char* const* ruapu_rua(); #ifdef RUAPU_IMPLEMENTATION -#include -#include - #if defined _WIN32 #include +#include +#include #if WINAPI_FAMILY == WINAPI_FAMILY_APP // uwp does not support veh :( @@ -74,6 +73,8 @@ static int ruapu_detect_isa(const void* some_inst) #elif defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ #include +#include +#include static int g_ruapu_sigill_caught = 0; static sigjmp_buf g_ruapu_jmpbuf; @@ -110,7 +111,27 @@ static int ruapu_detect_isa(ruapu_some_inst some_inst) return g_ruapu_sigill_caught ? 0 : 1; } -#endif // defined _WIN32 || defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ +#elif defined __SYTERKIT__ + +typedef void (*ruapu_some_inst)(); +#include + +static int g_ruapu_sigill_caught = 0; + +void arm32_do_undefined_instruction(struct arm_regs_t *regs) +{ + g_ruapu_sigill_caught = 1; + regs->pc += 4; +} + +static int ruapu_detect_isa(ruapu_some_inst some_inst) +{ + g_ruapu_sigill_caught = 0; + some_inst(); + return g_ruapu_sigill_caught ? 0 : 1; +} + +#endif // defined _WIN32 || defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined __SYTERKIT__ #if defined _WIN32 @@ -395,7 +416,7 @@ static void ruapu_detect_openrisc_isa() void ruapu_init() { -#if defined _WIN32 || defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ +#if defined _WIN32 || defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined __SYTERKIT__ size_t j = 0; for (size_t i = 0; i < sizeof(g_ruapu_isa_map) / sizeof(g_ruapu_isa_map[0]); i++) {