diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-09-04 15:21:32 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-09-04 15:21:32 +0200 |
| commit | a3f63a12f9102794ce1d94c972064f10a25e944b (patch) | |
| tree | 03d227251c87b5edd9019a616783e27f21587c88 /src/tools | |
| parent | b2dfe64ceaeffcec02c98f5c332f8f8e31180dbd (diff) | |
| download | box64-a3f63a12f9102794ce1d94c972064f10a25e944b.tar.gz box64-a3f63a12f9102794ce1d94c972064f10a25e944b.zip | |
[DYNAREC] Improve memory protection tracking (help #361)
Diffstat (limited to 'src/tools')
| -rwxr-xr-x | src/tools/bridge.c | 12 |
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)); } |