about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/custommem.c26
-rw-r--r--src/tools/rcfile.c5
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");