about summary refs log tree commit diff stats
path: root/src/custommem.c
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/custommem.c
parent6ca94b9f3fb369187af66425f33c8c6d498a3b8f (diff)
downloadbox64-d2cb088918b139ece64d3d7eab670a560e236d80.tar.gz
box64-d2cb088918b139ece64d3d7eab670a560e236d80.zip
Change on mmap to help some stagging version of wine
Diffstat (limited to 'src/custommem.c')
-rw-r--r--src/custommem.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/custommem.c b/src/custommem.c
index 5b399344..359725ea 100644
--- a/src/custommem.c
+++ b/src/custommem.c
@@ -1016,7 +1016,7 @@ uint32_t getProtection(uintptr_t addr)
 }
 
 #define LOWEST (void*)0x20000
-static uintptr_t nextFree(uintptr_t addr)
+static uintptr_t nextFree(uintptr_t addr, uintptr_t increment)
 {
     if(addr>=(1LL<<48))
         return 0;
@@ -1029,7 +1029,7 @@ static uintptr_t nextFree(uintptr_t addr)
             if(!memprot[idx>>16][i]) {
                 return ((idx>>16)<<(16+12))+(i<<MEMPROT_SHIFT);
             }
-        addr += (1LL<<(16+12));
+        addr += increment?increment:(1LL<<(16+12));
         addr &= ~((1LL<<(16+12)-1LL));
     } while(1);
 }
@@ -1065,7 +1065,7 @@ void* find47bitBlock(size_t size)
     // slow iterative search... Would need something better one day
     uintptr_t addr = 0x100000000LL;
     do {
-        addr = nextFree(addr);
+        addr = nextFree(addr, 0x10000);
         uintptr_t sz = maxFree(addr, size);
         if(sz>=size) {
             return (void*)addr;
@@ -1075,7 +1075,7 @@ void* find47bitBlock(size_t size)
     // search in 32bits as a backup
     addr = (uintptr_t)LOWEST;
     do {
-        addr = nextFree(addr);
+        addr = nextFree(addr, 0x10000);
         uintptr_t sz = maxFree(addr, size);
         if(sz>=size) {
             return (void*)addr;
@@ -1090,7 +1090,7 @@ void* find47bitBlockNearHint(void* hint, size_t size)
     // slow iterative search... Would need something better one day
     uintptr_t addr = (uintptr_t)hint;
     do {
-        addr = nextFree(addr);
+        addr = nextFree(addr, 0x10000);
         uintptr_t sz = maxFree(addr, size);
         if(sz>=size) {
             return (void*)addr;
@@ -1105,7 +1105,7 @@ void* findBlockNearHint(void* hint, size_t size)
     // slow iterative search... Would need something better one day
     uintptr_t addr = (uintptr_t)hint;
     do {
-        addr = nextFree(addr);
+        addr = nextFree(addr, 0x10000);
         uintptr_t sz = maxFree(addr, size);
         if(sz>=size) {
             return (void*)addr;