about summary refs log tree commit diff stats
path: root/src/tools
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-09-04 15:21:32 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-09-04 15:21:32 +0200
commita3f63a12f9102794ce1d94c972064f10a25e944b (patch)
tree03d227251c87b5edd9019a616783e27f21587c88 /src/tools
parentb2dfe64ceaeffcec02c98f5c332f8f8e31180dbd (diff)
downloadbox64-a3f63a12f9102794ce1d94c972064f10a25e944b.tar.gz
box64-a3f63a12f9102794ce1d94c972064f10a25e944b.zip
[DYNAREC] Improve memory protection tracking (help #361)
Diffstat (limited to 'src/tools')
-rwxr-xr-xsrc/tools/bridge.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/tools/bridge.c b/src/tools/bridge.c
index 8f9c7dad..8c9070eb 100755
--- a/src/tools/bridge.c
+++ b/src/tools/bridge.c
@@ -68,8 +68,8 @@ void FreeBridge(bridge_t** bridge)
     while(b) {
         brick_t *n = b->next;
         #ifdef DYNAREC
-        if(getProtection((uintptr_t)b->b)&PROT_DYNAREC)
-            unprotectDB((uintptr_t)b->b, NBRICK*sizeof(onebridge_t));
+        if(getProtection((uintptr_t)b->b)&(PROT_DYNAREC|PROT_DYNAREC_R))
+            unprotectDB((uintptr_t)b->b, NBRICK*sizeof(onebridge_t), 1);
         #endif
         my_munmap(emu, b->b, NBRICK*sizeof(onebridge_t));
         box_free(b);
@@ -103,9 +103,9 @@ uintptr_t AddBridge(bridge_t* bridge, wrapper_t w, void* fnc, int N, const char*
         #ifdef DYNAREC
         pthread_mutex_unlock(&my_context->mutex_bridge);
         if(box64_dynarec) {
-            prot=(getProtection((uintptr_t)b->b)&PROT_DYNAREC)?1:0;
+            prot=(getProtection((uintptr_t)b->b)&(PROT_DYNAREC|PROT_DYNAREC_R))?1:0;
             if(prot)
-                unprotectDB((uintptr_t)b->b, NBRICK*sizeof(onebridge_t));
+                unprotectDB((uintptr_t)b->b, NBRICK*sizeof(onebridge_t), 0);
             else    // only add DB if there is no protection
                 addDBFromAddressRange((uintptr_t)&b->b[b->sz].CC, sizeof(onebridge_t));
         }
@@ -234,9 +234,9 @@ uintptr_t AddVSyscall(bridge_t* bridge, int num)
         #ifdef DYNAREC
         pthread_mutex_unlock(&my_context->mutex_bridge);
         if(box64_dynarec) {
-            prot=(getProtection((uintptr_t)b->b)&PROT_DYNAREC)?1:0;
+            prot=(getProtection((uintptr_t)b->b)&(PROT_DYNAREC|PROT_DYNAREC_R))?1:0;
             if(prot)
-                unprotectDB((uintptr_t)b->b, NBRICK*sizeof(onebridge_t));
+                unprotectDB((uintptr_t)b->b, NBRICK*sizeof(onebridge_t), 0);
             else    // only add DB if there is no protection
                 addDBFromAddressRange((uintptr_t)&b->b[b->sz].CC, sizeof(onebridge_t));
         }