about summary refs log tree commit diff stats
path: root/src/dynarec
diff options
context:
space:
mode:
Diffstat (limited to 'src/dynarec')
-rw-r--r--src/dynarec/dynablock.c3
-rw-r--r--src/dynarec/dynarec_native_functions.c2
2 files changed, 4 insertions, 1 deletions
diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c
index 4c703167..bfe10758 100644
--- a/src/dynarec/dynablock.c
+++ b/src/dynarec/dynablock.c
@@ -19,6 +19,7 @@
 #include "dynarec_private.h"
 #include "elfloader.h"
 #include "bridge.h"
+#include "signals.h"
 
 #include "dynarec_native.h"
 #include "native_lock.h"
@@ -198,6 +199,8 @@ static dynablock_t* internalDBGetBlock(x64emu_t* emu, uintptr_t addr, uintptr_t
 {
     if(hasAlternate((void*)addr))
         return NULL;
+    if((getProtection(addr)&(PROT_EXEC|PROT_READ))!=(PROT_EXEC|PROT_READ))  // cannot be run, get out of the Dynarec
+        return NULL;
     dynablock_t* block = getDB(addr);
     if(block || !create)
         return block;
diff --git a/src/dynarec/dynarec_native_functions.c b/src/dynarec/dynarec_native_functions.c
index 5a086018..c6ea65b0 100644
--- a/src/dynarec/dynarec_native_functions.c
+++ b/src/dynarec/dynarec_native_functions.c
@@ -172,7 +172,7 @@ void native_ud(x64emu_t* emu)
 void native_priv(x64emu_t* emu)
 {
     emu->test.test = 0;
-    emit_signal(emu, SIGSEGV, (void*)R_RIP, 0);
+    emit_signal(emu, SIGSEGV, (void*)R_RIP, 0xbad0);
 }
 
 void native_int(x64emu_t* emu, int num)