about summary refs log tree commit diff stats
path: root/src/wrapped
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-03-06 15:23:15 +0100
committerptitSeb <sebastien.chev@gmail.com>2022-03-06 15:23:15 +0100
commitd2cb088918b139ece64d3d7eab670a560e236d80 (patch)
tree23c9ba7c14a721c2ce65fcf0410662616961cba1 /src/wrapped
parent6ca94b9f3fb369187af66425f33c8c6d498a3b8f (diff)
downloadbox64-d2cb088918b139ece64d3d7eab670a560e236d80.tar.gz
box64-d2cb088918b139ece64d3d7eab670a560e236d80.zip
Change on mmap to help some stagging version of wine
Diffstat (limited to 'src/wrapped')
-rwxr-xr-xsrc/wrapped/wrappedlibc.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index e73e32cf..d53b1ced 100755
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -2198,14 +2198,16 @@ EXPORT void* my_mmap64(x64emu_t* emu, void *addr, unsigned long length, int prot
     #endif
     void* ret = mmap64(addr, length, prot, flags, fd, offset);
     #ifndef NOALIGN
-    if((ret!=(void*)-1) && (flags&0x40) && ((uintptr_t)ret>0xffffffff)) {
+    if((ret!=(void*)-1) && (flags&0x40) && 
+      (((uintptr_t)ret>0xffffffff) || (box64_wine && ((uintptr_t)ret&~0xffff!=(uintptr_t)ret)))) {
         printf_log(LOG_DEBUG, "Warning, mmap on 32bits didn't worked, ask %p, got %p ", addr, ret);
         munmap(ret, length);
         loadProtectionFromMap();    // reload map, because something went wrong previously
         addr = findBlockNearHint(addr, length); // is this the best way?
         ret = mmap64(addr, length, prot, flags, fd, offset);
         printf_log(LOG_DEBUG, " tried again with %p, got %p\n", addr, ret);
-    } else if((ret!=(void*)-1) && ((flags&MAP_FIXED)==0) && (box64_wine) && ((uintptr_t)ret>0x7fffffffffffLL)) {
+    } else if((ret!=(void*)-1) && ((flags&MAP_FIXED)==0) && (box64_wine) && 
+             (((uintptr_t)ret>0x7fffffffffffLL) || ((uintptr_t)ret&~0xffff!=(uintptr_t)ret))) {
         printf_log(LOG_DEBUG, "Warning, mmap on 47bits didn't worked, ask %p, got %p ", addr, ret);
         munmap(ret, length);
         loadProtectionFromMap();    // reload map, because something went wrong previously