diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-05-28 09:39:26 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-05-28 09:39:26 +0200 |
| commit | 0b67bba12111bad3bdc7abc83d82e7016efb97ec (patch) | |
| tree | afae06a6dd18028d3f523c8c8a0acc41e2f38992 /src/wrapped | |
| parent | a791677534315fb4c7708db907605ed61cb8b239 (diff) | |
| download | box64-0b67bba12111bad3bdc7abc83d82e7016efb97ec.tar.gz box64-0b67bba12111bad3bdc7abc83d82e7016efb97ec.zip | |
[DYNAREC] Do not track memory that is not accessible (should save some memory)
Diffstat (limited to 'src/wrapped')
| -rwxr-xr-x | src/wrapped/wrappedlibc.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index 6052d964..d0792d3c 100755 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -2595,7 +2595,7 @@ EXPORT void* my_mremap(x64emu_t* emu, void* old_addr, size_t old_size, size_t ne uint32_t prot = getProtection((uintptr_t)old_addr)&~PROT_CUSTOM; if(ret==old_addr) { if(old_size && old_size<new_size) { - setProtection((uintptr_t)ret+old_size, new_size-old_size, prot); + setProtection_mmap((uintptr_t)ret+old_size, new_size-old_size, prot); #ifdef DYNAREC if(box64_dynarec) addDBFromAddressRange((uintptr_t)ret+old_size, new_size-old_size); @@ -2607,7 +2607,7 @@ EXPORT void* my_mremap(x64emu_t* emu, void* old_addr, size_t old_size, size_t ne cleanDBFromAddressRange((uintptr_t)ret+new_size, old_size-new_size, 1); #endif } else if(!old_size) { - setProtection((uintptr_t)ret, new_size, prot); + setProtection_mmap((uintptr_t)ret, new_size, prot); #ifdef DYNAREC if(box64_dynarec) addDBFromAddressRange((uintptr_t)ret, new_size); @@ -2665,8 +2665,15 @@ EXPORT int my_mprotect(x64emu_t* emu, void *addr, unsigned long len, int prot) cleanDBFromAddressRange((uintptr_t)addr, len, 1); } #endif - if(!ret && len) - updateProtection((uintptr_t)addr, len, prot); + if(!ret && len) { + if(prot) + updateProtection((uintptr_t)addr, len, prot); + else { + // avoid allocating detailled protection for a no prot 0 + freeProtection((uintptr_t)addr, len); + setProtection_mmap((uintptr_t)addr, len, prot); + } + } return ret; } |