diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-03-18 17:04:06 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-03-18 17:04:06 +0100 |
| commit | c519556962efc341119839f6b642331ef6e9bdee (patch) | |
| tree | edfea9c28b9a0c860316ca9dc4d0b1e29a410b47 /src | |
| parent | c7280d93129b94fae9fc12bd3f1f746541b9aaa2 (diff) | |
| download | box64-c519556962efc341119839f6b642331ef6e9bdee.tar.gz box64-c519556962efc341119839f6b642331ef6e9bdee.zip | |
[BOX32] Small change on memory managment again
Diffstat (limited to 'src')
| -rw-r--r-- | src/custommem.c | 40 | ||||
| -rwxr-xr-x | src/libtools/threads32.c | 9 |
2 files changed, 13 insertions, 36 deletions
diff --git a/src/custommem.c b/src/custommem.c index b686e091..523b9ed9 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -858,7 +858,8 @@ void* box32_dynarec_mmap(size_t size) cur = bend; } #endif - return MAP_FAILED; + //printf_log(LOG_INFO, "BOX32: Error allocating Dynarec memory: %s\n", "fallback to internal mmap"); + return internal_mmap((void*)0x100000000LL, size, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);; } #ifdef DYNAREC @@ -1971,50 +1972,21 @@ void reverveHigMem32(void) cur = internal_mmap(NULL, cur_size, 0, MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); if((cur==MAP_FAILED) || (cur<(void*)0x100000000LL)) { if(cur!=MAP_FAILED) { - //printf_log(LOG_DEBUG, " Failed to reserve high %p (%zx)\n", cur, cur_size); + //printf_log(LOG_INFO, " Failed to reserve high %p (%zx)\n", cur, cur_size); internal_munmap(cur, cur_size); } //else - // printf_log(LOG_DEBUG, " Failed to reserve %zx sized block\n", cur_size); + //printf_log(LOG_INFO, " Failed to reserve %zx sized block\n", cur_size); cur_size>>=1; } else { rb_set(mapallmem, (uintptr_t)cur, (uintptr_t)cur+cur_size, 2); - //printf_log(LOG_DEBUG, "Reserved high %p (%zx)\n", cur, cur_size); - } - } - // try again, but specifying a high address, just in case - if(0) - { - uintptr_t cur = 0xffff00000000LL; - uintptr_t bend = 0; - uint32_t prot; - while (bend!=0xffffffffffffffffLL) { - if(!rb_get_end(mapallmem, cur, &prot, &bend)) { - // create a border at 48bits - if(cur<(1ULL<<48) && bend>(1ULL<<48)) - bend = 1ULL<<48; - cur = (cur+0xffffLL)&~0xffffLL; // round to 64K page size - if(bend>cur) { - void* p = internal_mmap((void*)cur, bend-cur, 0, MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); - if((p==MAP_FAILED) || (p<(void*)0x100000000LL)) { - if(p!=MAP_FAILED) { - printf_log(LOG_DEBUG, " Failed to reserve high %p (%zx) => %p\n", (void*)cur, bend-cur, p); - internal_munmap(p, bend-cur); - } else - printf_log(LOG_DEBUG, " Failed to reserve %zx sized block (%s)\n", bend-cur, strerror(errno)); - } else { - rb_set(mapallmem, (uintptr_t)cur, (uintptr_t)bend, 2); - printf_log(LOG_DEBUG, "Reserved high %p (%zx)\n", cur, bend-cur); - } - } - } - cur = bend; + //printf_log(LOG_INFO, "Reserved high %p (%zx)\n", cur, cur_size); } } printf_log(LOG_INFO, "Memory higher than 32bits reserved\n"); if (BOX64ENV(log)>=LOG_DEBUG) { uintptr_t start=0x100000000LL; int prot; - uintptr_t bend; + uintptr_t bend = start; while (bend!=0xffffffffffffffffLL) { if(rb_get_end(mapallmem, start, &prot, &bend)) { printf_log(LOG_NONE, " Reserved: %p - %p (%d)\n", (void*)start, (void*)bend, prot); diff --git a/src/libtools/threads32.c b/src/libtools/threads32.c index ac75e4c3..3f43d8db 100755 --- a/src/libtools/threads32.c +++ b/src/libtools/threads32.c @@ -186,10 +186,15 @@ EXPORT int my32_pthread_create(x64emu_t *emu, void* t, void* attr, void* start_r if(attr) { size_t stsize; + static size_t minsize = 0; + if(!minsize) { + minsize = PTHREAD_STACK_MIN; + if(minsize<512*1024) minsize = 512*1024; + } if(pthread_attr_getstacksize(get_attr(attr), &stsize)==0) stacksize = stsize; - if(stacksize<512*1024) // emu and all needs some stack space, don't go too low - pthread_attr_setstacksize(get_attr(attr), 512*1024); + if(stacksize<minsize) // emu and all needs some stack space, don't go too low + pthread_attr_setstacksize(get_attr(attr), minsize); } if(GetStackSize((uintptr_t)attr, &attr_stack, &attr_stacksize)) { |