diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/custommem.c | 26 | ||||
| -rw-r--r-- | src/tools/rcfile.c | 5 |
2 files changed, 23 insertions, 8 deletions
diff --git a/src/custommem.c b/src/custommem.c index e5cf2e46..28a0fdee 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -1499,15 +1499,12 @@ static void atfork_child_custommem(void) init_mutexes(); } -void reserveHighMem() +void my_reserveHighMem() { - char* p = getenv("BOX64_RESERVE_HIGH"); - #if 0//def ADLINK - if(p && p[0]=='0') - #else - if(!p || p[0]=='0') - #endif - return; // don't reserve by default + static int reserved = 0; + if(reserved || !have48bits) + return; + reserved = 1; uintptr_t cur = 1ULL<<47; uintptr_t bend = 0; uint32_t prot; @@ -1522,6 +1519,19 @@ void reserveHighMem() } cur = bend; } + +} + +void reserveHighMem() +{ + char* p = getenv("BOX64_RESERVE_HIGH"); + #if 0//def ADLINK + if(p && p[0]=='0') + #else + if(!p || p[0]=='0') + #endif + return; // don't reserve by default + my_reserveHighMem(); } void init_custommem_helper(box64context_t* ctx) diff --git a/src/tools/rcfile.c b/src/tools/rcfile.c index cd1316f4..61ea607f 100644 --- a/src/tools/rcfile.c +++ b/src/tools/rcfile.c @@ -121,6 +121,7 @@ ENTRYSTRING_(BOX64_ENV1, new_env1) \ ENTRYSTRING_(BOX64_ENV2, new_env2) \ ENTRYSTRING_(BOX64_ENV3, new_env3) \ ENTRYSTRING_(BOX64_ENV4, new_env4) \ +ENTRYBOOL(BOX64_RESERVE_HIGH, new_reserve_high) \ #ifdef HAVE_TRACE #define SUPER2() \ @@ -491,6 +492,7 @@ void openFTrace(const char* newtrace); void addNewEnvVar(const char* s); void AddNewLibs(const char* libs); void computeRDTSC(); +void my_reserveHighMem(); #ifdef DYNAREC void GatherDynarecExtensions(); #endif @@ -511,6 +513,7 @@ void ApplyParams(const char* name) int new_maxcpu = box64_maxcpu; int new_avx = box64_avx2?2:box64_avx; int box64_dynarec_jvm = box64_jvm; + int new_reserve_high = 0; if(!strcmp(name, old_name)) { return; } @@ -558,6 +561,8 @@ void ApplyParams(const char* name) cycle_log = new_cycle_log; initCycleLog(my_context); } + if(new_reserve_high) + my_reserveHighMem(); if(param->is_new_avx_present) { if(!new_avx) { printf_log(LOG_INFO, "Hidding AVX extension"); |