about summary refs log tree commit diff stats
path: root/src/tools
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-03-17 15:52:45 +0100
committerptitSeb <sebastien.chev@gmail.com>2025-03-17 15:52:45 +0100
commit77141304f66df448a82a88455c9eaf3f72f7fcff (patch)
tree15547c537308ef4437ce30b2f228b535f6ac179d /src/tools
parent3336cb6248193ff93b25c2a2ef932e2ecb0a4ddf (diff)
downloadbox64-77141304f66df448a82a88455c9eaf3f72f7fcff.tar.gz
box64-77141304f66df448a82a88455c9eaf3f72f7fcff.zip
[BOX32] Change to get all created bricks to be conitgus on 32bits, as address space is pretty small
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/bridge.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/tools/bridge.c b/src/tools/bridge.c
index c6dd885d..7c697b22 100644
--- a/src/tools/bridge.c
+++ b/src/tools/bridge.c
@@ -40,8 +40,13 @@ typedef struct bridge_s {
 brick_t* NewBrick(void* old)
 {
     brick_t* ret = (brick_t*)box_calloc(1, sizeof(brick_t));
-    if(old)
-        old = old + NBRICK * sizeof(onebridge_t);
+    static void* load_addr_32bits = NULL;
+    if(box64_is32bits)
+        old = load_addr_32bits;
+    else {
+        if(old)
+            old = old + NBRICK * sizeof(onebridge_t);
+    }
     void* ptr = box_mmap(old, NBRICK * sizeof(onebridge_t), PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | ((!box64_is32bits && box64_wine)?0:0x40) | MAP_ANONYMOUS, -1, 0); // 0x40 is MAP_32BIT
     if(ptr == MAP_FAILED)
         ptr = box_mmap(NULL, NBRICK * sizeof(onebridge_t), PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | ((!box64_is32bits && box64_wine)?0:0x40) | MAP_ANONYMOUS, -1, 0);
@@ -50,6 +55,7 @@ brick_t* NewBrick(void* old)
     }
     setProtection((uintptr_t)ptr, NBRICK * sizeof(onebridge_t), PROT_READ | PROT_WRITE | PROT_EXEC | PROT_NOPROT);
     dynarec_log(LOG_INFO, "New Bridge brick at %p (size 0x%zx)\n", ptr, NBRICK*sizeof(onebridge_t));
+    if(box64_is32bits) load_addr_32bits = ptr + NBRICK*sizeof(onebridge_t);
     ret->b = ptr;
     return ret;
 }