From bc852aebeb9852801329f9576b4d5e3fa7df2efa Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Tue, 23 Jan 2024 15:56:11 +0100 Subject: Added a new option BOX64_MMAP32 to use 32bits mapping on external MMAP (help Snapdragon device running Vulkan with Wine/Wow64, active by default on SD845/SD888/SD8G2 profiles) --- src/custommem.c | 47 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 5 deletions(-) (limited to 'src/custommem.c') diff --git a/src/custommem.c b/src/custommem.c index c1eca7e0..b039c291 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -6,6 +6,7 @@ #include #include #include +#include #include "box64context.h" #include "elfloader.h" @@ -374,7 +375,7 @@ void* customMalloc(size_t size) } size_t allocsize = (fullsize>MMAPSIZE)?fullsize:MMAPSIZE; #ifdef USE_MMAP - void* p = mmap(NULL, allocsize, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); + void* p = internal_mmap(NULL, allocsize, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); memset(p, 0, allocsize); #else void* p = box_calloc(1, allocsize); @@ -571,7 +572,7 @@ uintptr_t AllocDynarecMap(size_t size) } mprotect(p, allocsize, PROT_READ | PROT_WRITE | PROT_EXEC); #else - void* p = mmap(NULL, allocsize, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); + void* p = internal_mmap(NULL, allocsize, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); if(p==(void*)-1) { dynarec_log(LOG_INFO, "Cannot create dynamic map of %zu bytes\n", allocsize); return 0; @@ -1390,7 +1391,7 @@ void reserveHighMem() int prot; while (bend!=0xffffffffffffffffLL) { if(!rb_get_end(mapallmem, cur, &prot, &bend)) { - void* ret = mmap64((void*)cur, bend-cur, 0, MAP_ANONYMOUS|MAP_FIXED|MAP_PRIVATE|MAP_NORESERVE, -1, 0); + void* ret = internal_mmap((void*)cur, bend-cur, 0, MAP_ANONYMOUS|MAP_FIXED|MAP_PRIVATE|MAP_NORESERVE, -1, 0); printf_log(LOG_DEBUG, "Reserve %p-%p => %p (%s)\n", (void*)cur, bend, ret, strerror(errno)); printf_log(LOG_DEBUG, "mmap %p-%p\n", cur, bend); if(ret!=(void*)-1) { @@ -1485,7 +1486,7 @@ void fini_custommem_helper(box64context_t *ctx) for (int i=0; ichunks[i].block) #ifdef USE_MMAP - munmap(head->chunks[i].block, head->chunks[i].size); + internal_munmap(head->chunks[i].block, head->chunks[i].size); #else box_free(head->chunks[i].block); #endif @@ -1531,7 +1532,7 @@ void fini_custommem_helper(box64context_t *ctx) for(int i=0; i