ruapu SyterKit v0.2.6.1 support ()

This commit is contained in:
柚木 鉉 2024-03-01 20:41:44 +08:00 committed by GitHub
parent fc24366512
commit 2008665a13
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 6 deletions

View File

@ -33,7 +33,7 @@ int main()
```
</td></tr>
<tr><td>OS</td><td>&#9989; Windows<br/>&#9989; Linux<br/>&#9989; macOS<br/>&#9989; Android<br/>&#9989; iOS<br/>&#9989; FreeBSD<br/>&#9989; NetBSD<br/>&#9989; OpenBSD</td></tr>
<tr><td>OS</td><td>&#9989; Windows<br/>&#9989; Linux<br/>&#9989; macOS<br/>&#9989; Android<br/>&#9989; iOS<br/>&#9989; FreeBSD<br/>&#9989; NetBSD<br/>&#9989; OpenBSD<br/>&#9989; SyterKit</td></tr>
<tr><td>Compiler</td><td>&#9989; GCC<br/>&#9989; Clang<br/>&#9989; MSVC<br/>&#9989; MinGW</td></tr>
</table>

31
ruapu.h
View File

@ -19,12 +19,11 @@ const char* const* ruapu_rua();
#ifdef RUAPU_IMPLEMENTATION
#include <setjmp.h>
#include <string.h>
#if defined _WIN32
#include <windows.h>
#include <setjmp.h>
#include <string.h>
#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 <signal.h>
#include <setjmp.h>
#include <string.h>
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 <mmu.h>
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++)
{