From d2cb088918b139ece64d3d7eab670a560e236d80 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 6 Mar 2022 15:23:15 +0100 Subject: Change on mmap to help some stagging version of wine --- src/wrapped/wrappedlibc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/wrapped') 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 -- cgit 1.4.1