From 29f65bb6beff6457db6f00315c1395f944ec93ed Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 4 Apr 2021 10:19:47 +0200 Subject: More work on mmap and the MAP_32BIT flag --- src/wrapped/wrappedlibc.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src/wrapped') diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index 2490dcb0..9c437226 100755 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -1896,10 +1896,13 @@ EXPORT void* my_mmap64(x64emu_t* emu, void *addr, unsigned long length, int prot prot|=PROT_READ; // PROT_READ is implicit with PROT_WRITE on i386 if(box64_log", addr, length, prot, flags, fd, offset);} #ifndef NOALIGN - if(!addr && (flags&0x40)) { + if(flags&0x40) { // 0x40 is MAP_32BIT, wich only exist on x86_64! //flags &= ~0x40; // let the flags in? - addr = find32bitBlock(length); + if(!addr) + addr = find32bitBlock(length); + else + addr = findBlockNearHint(addr, length); } #endif void* ret = mmap64(addr, length, prot, flags, fd, offset); @@ -1931,7 +1934,7 @@ EXPORT void* my_mremap(x64emu_t* emu, void* old_addr, size_t old_size, size_t ne dynarec_log(LOG_DEBUG, "%p\n", ret); if(ret==(void*)-1) return ret; // failed... - uint32_t prot = getProtection((uintptr_t)old_addr)&~PROT_DYNAREC; + uint32_t prot = getProtection((uintptr_t)old_addr)&~PROT_CUSTOM; if(ret==old_addr) { if(old_size && old_size