summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValery Ushakov <uwe@stderr.spb.ru>2021-01-04 03:00:19 +0300
committerValery Ushakov <uwe@stderr.spb.ru>2021-01-04 03:00:19 +0300
commite273317811820976dda632b0893960646d6e1119 (patch)
tree49fcdb1823fca336a6bb6d96b675d85fb867ca6e
parent8adc601ba8dfd68676fc702cd30075643967f2fd (diff)
NetBSD/arm: segflush - use mprotect to add PROT_EXEC
ARM has separate read and execute protection bits so after writing out JIT code we need to make it executable.
-rw-r--r--emu/NetBSD/segflush-arm.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/emu/NetBSD/segflush-arm.c b/emu/NetBSD/segflush-arm.c
index f4529633..a03b438b 100644
--- a/emu/NetBSD/segflush-arm.c
+++ b/emu/NetBSD/segflush-arm.c
@@ -1,4 +1,5 @@
#include <sys/types.h>
+#include <sys/mman.h>
#include <machine/sysarch.h>
#include "dat.h"
@@ -9,6 +10,8 @@ segflush(void *a, ulong n)
{
struct arm_sync_icache_args args;
+ mprotect(a, (size_t)n, PROT_READ | PROT_WRITE | PROT_EXEC);
+
args.addr = (uintptr_t)a;
args.len = (size_t)n;
sysarch(ARM_SYNC_ICACHE, (void *)&args);