aboutsummaryrefslogtreecommitdiff
path: root/src/ARMJIT_A64
diff options
context:
space:
mode:
authorRSDuck <rsduck@users.noreply.github.com>2020-02-04 18:33:05 +0100
committerRSDuck <rsduck@users.noreply.github.com>2020-04-26 13:05:10 +0200
commit899cf97c51578e5c9ea83d3e81b3c7a54595666a (patch)
treef19d22542be33df85eac7b0a4553036e3d83a53e /src/ARMJIT_A64
parentd6cc7de6c4b571b24809a0d9665ec6160fe5ff6d (diff)
apply fixes for aarch64 linux by @nadiaholmquist
Diffstat (limited to 'src/ARMJIT_A64')
-rw-r--r--src/ARMJIT_A64/ARMJIT_Compiler.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/ARMJIT_A64/ARMJIT_Compiler.cpp b/src/ARMJIT_A64/ARMJIT_Compiler.cpp
index 89d0029..b598ac8 100644
--- a/src/ARMJIT_A64/ARMJIT_Compiler.cpp
+++ b/src/ARMJIT_A64/ARMJIT_Compiler.cpp
@@ -8,6 +8,9 @@
#include "../switch/compat_switch.h"
extern char __start__;
+#else
+#include <sys/mman.h>
+#include <unistd.h>
#endif
#include <malloc.h>
@@ -34,6 +37,9 @@ template <>
const int RegisterCache<Compiler, ARM64Reg>::NativeRegsAvailable = 8;
const int JitMemSize = 16 * 1024 * 1024;
+#ifndef __SWITCH__
+u8 JitMem[JitMemSize];
+#endif
void Compiler::MovePC()
{
@@ -76,6 +82,16 @@ Compiler::Compiler()
SetCodeBase((u8*)JitRWStart, (u8*)JitRXStart);
JitMemUseableSize = JitMemSize;
Reset();
+#else
+ #else
+ u64 pageSize = sysconf(_SC_PAGE_SIZE);
+ u8* pageAligned = (u8*)(((u64)JitMem & ~(pageSize - 1)) + pageSize);
+ u64 alignedSize = (((u64)JitMem + sizeof(JitMem)) & ~(pageSize - 1)) - (u64)pageAligned;
+ mprotect(pageAligned, alignedSize, PROT_EXEC | PROT_READ | PROT_WRITE);
+
+ SetCodeBase(pageAligned, pageAligned);
+ JitMemUseableSize = alignedSize;
+ Reset();
#endif
for (int i = 0; i < 3; i++)