diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-03-17 15:52:45 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-03-17 15:52:45 +0100 |
| commit | 77141304f66df448a82a88455c9eaf3f72f7fcff (patch) | |
| tree | 15547c537308ef4437ce30b2f228b535f6ac179d /src/tools | |
| parent | 3336cb6248193ff93b25c2a2ef932e2ecb0a4ddf (diff) | |
| download | box64-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.c | 10 |
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; } |