about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-01-22 17:29:21 +0800
committerGitHub <noreply@github.com>2025-01-22 10:29:21 +0100
commit89dcd2566bfa1ef93e740b568cbc3aa5c5409aa4 (patch)
treeaf3e95e694fb620ccb2d955a74a0aab0ad14c29e /src
parent314edea645acacf03930af17aa01783ca735306a (diff)
downloadbox64-89dcd2566bfa1ef93e740b568cbc3aa5c5409aa4.tar.gz
box64-89dcd2566bfa1ef93e740b568cbc3aa5c5409aa4.zip
Fixed various issues introduced in the env infra refactor (#2281)
* Open trace file again after apply env files

* dynrec_df=1 by default

* more fixes

* more fixes

* more
Diffstat (limited to 'src')
-rw-r--r--src/core.c29
-rw-r--r--src/elfs/elfloader.c24
-rw-r--r--src/include/elfloader.h3
-rw-r--r--src/include/env.h185
-rw-r--r--src/tools/env.c29
5 files changed, 121 insertions, 149 deletions
diff --git a/src/core.c b/src/core.c
index 08343c66..313cac88 100644
--- a/src/core.c
+++ b/src/core.c
@@ -117,9 +117,9 @@ FILE* ftrace = NULL;
 char* ftrace_name = NULL;
 int ftrace_has_pid = 0;
 
-void openFTrace(const char* newtrace, int reopen)
+void openFTrace(int reopen)
 {
-    const char* p = newtrace?newtrace:BOX64ENV(trace_file);
+    const char* p = BOX64ENV(trace_file);
     #ifndef MAX_PATH
     #define MAX_PATH 4096
     #endif
@@ -217,7 +217,7 @@ void my_prepare_fork()
 void my_parent_fork()
 {
     if (ftrace_has_pid) {
-        openFTrace(NULL, 1);
+        openFTrace(1);
         printf_log(LOG_INFO, "%04d|Reopened trace file of %s at parent\n", GetTID(), GetLastApplyEntryName());
     }
 }
@@ -225,7 +225,7 @@ void my_parent_fork()
 void my_child_fork()
 {
     if (ftrace_has_pid) {
-        openFTrace(NULL, 0);
+        openFTrace(0);
         printf_log(LOG_INFO, "%04d|Created trace file of %s at child\n", GetTID(), GetLastApplyEntryName());
     }
 }
@@ -435,8 +435,7 @@ void computeRDTSC()
 
 static void displayMiscInfo()
 {
-    // grab BOX64ENV(trace_file), and change %pid to actual pid is present in the name
-    openFTrace(NULL, 0);
+    openFTrace(0);
 
     if ((BOX64ENV(nobanner) || BOX64ENV(log)) && ftrace==stdout)
         box64_stdout_no_w = 1;
@@ -538,23 +537,6 @@ void PrintHelp() {
     printf("    '-h'|'--help' to print this and quit\n");
 }
 
-void addNewEnvVar(const char* s)
-{
-    if(!s)
-        return;
-    char* p = box_strdup(s);
-    char* e = strchr(p, '=');
-    if(!e) {
-        printf_log(LOG_INFO, "Invalid specific env. var. '%s'\n", s);
-        box_free(p);
-        return;
-    }
-    *e='\0';
-    ++e;
-    setenv(p, e, 1);
-    box_free(p);
-}
-
 static void addLibPaths(box64context_t* context)
 {
     if(BOX64ENV(emulated_libs)) {
@@ -1155,6 +1137,7 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf
         ApplyEnvFileEntry(wine_prog);
         wine_prog = NULL;
     }
+    openFTrace(0);
     PrintEnvVariables();
 
     for(int i=1; i<my_context->argc; ++i) {
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c
index 11943c1a..eff1ef69 100644
--- a/src/elfs/elfloader.c
+++ b/src/elfs/elfloader.c
@@ -1451,30 +1451,6 @@ void* GetDynamicSection(elfheader_t* h)
     return box64_is32bits?((void*)h->Dynamic._32):((void*)h->Dynamic._64);
 }
 
-#ifdef DYNAREC
-dynablock_t* GetDynablocksFromAddress(box64context_t *context, uintptr_t addr)
-{
-    (void)context;
-    // if we are here, the there is not block in standard "space"
-    /*dynablocklist_t* ret = getDBFromAddress(addr);
-    if(ret) {
-        return ret;
-    }*/
-    if(BOX64ENV(dynarec_forced)) {
-        addDBFromAddressRange(addr, 1);
-        return getDB(addr);
-    }
-    //check if address is in an elf... if yes, grant a block (should I warn)
-    Dl_info info;
-    if(dladdr((void*)addr, &info)) {
-        dynarec_log(LOG_INFO, "Address %p is in a native Elf memory space (function \"%s\" in %s)\n", (void*)addr, info.dli_sname, info.dli_fname);
-        return NULL;
-    }
-    dynarec_log(LOG_INFO, "Address %p not found in Elf memory and is not a native call wrapper\n", (void*)addr);
-    return NULL;
-}
-#endif
-
 typedef struct my_dl_phdr_info_s {
     void*           dlpi_addr;
     const char*     dlpi_name;
diff --git a/src/include/elfloader.h b/src/include/elfloader.h
index cec7195d..969cb95b 100644
--- a/src/include/elfloader.h
+++ b/src/include/elfloader.h
@@ -69,9 +69,6 @@ int32_t GetTLSBase(elfheader_t* h);
 uint32_t GetTLSSize(elfheader_t* h);
 void* GetTLSPointer(box64context_t* context, elfheader_t* h);
 void* GetDTatOffset(box64context_t* context, unsigned long int index, unsigned long int offset);
-#ifdef DYNAREC
-dynablock_t* GetDynablocksFromAddress(box64context_t *context, uintptr_t addr);
-#endif
 void ResetSpecialCaseMainElf(elfheader_t* h);
 void CreateMemorymapFile(box64context_t* context, int fd);
 void* GetDynamicSection(elfheader_t* h);
diff --git a/src/include/env.h b/src/include/env.h
index 0b808dd5..598cb1db 100644
--- a/src/include/env.h
+++ b/src/include/env.h
@@ -23,99 +23,98 @@
 extern char* ftrace_name;
 #define DEFAULT_LOG_LEVEL (ftrace_name ? LOG_INFO : (isatty(fileno(stdout)) ? LOG_INFO : LOG_NONE))
 
-#define ENVSUPER1()                                                          \
-    STRING(BOX64_ADDLIBS, addlibs)                                           \
-    BOOLEAN(BOX64_ALLOWMISSINGLIBS, allow_missing_libs, 0)                   \
-    STRING(BOX64_ARGS, args)                                                 \
-    STRING(BOX64_BASH, bash)                                                 \
-    BOOLEAN(BOX64_CEFDISABLEGPU, cefdisablegpu, 0)                           \
-    BOOLEAN(BOX64_CEFDISABLEGPUCOMPOSITOR, cefdisablegpucompositor, 0)       \
-    INTEGER(BOX64_CPUTYPE, cputype, 0, 0, 1)                                 \
-    BOOLEAN(BOX64_CRASHHANDLER, dummy_crashhandler, 1)                       \
-    BOOLEAN(BOX64_DLSYM_ERROR, dlsym_error, 0)                               \
-    INTEGER(BOX64_DUMP, dump, 0, 0, 2)                                       \
-    BOOLEAN(BOX64_DYNAREC_ALIGNED_ATOMICS, dynarec_aligned_atomics, 0)       \
-    INTEGER(BOX64_DYNAREC_BIGBLOCK, dynarec_bigblock, 1, 0, 3)               \
-    BOOLEAN(BOX64_DYNAREC_BLEEDING_EDGE, dynarec_bleeding_edge, 1)           \
-    BOOLEAN(BOX64_DYNAREC_CALLRET, dynarec_callret, 0)                       \
-    BOOLEAN(BOX64_DYNAREC_DF, dynarec_df, 0)                                 \
-    BOOLEAN(BOX64_DYNAREC_DIRTY, dynarec_dirty, 0)                           \
-    BOOLEAN(BOX64_DYNAREC_DIV0, dynarec_div0, 0)                             \
-    INTEGER(BOX64_DYNAREC_DUMP, dynarec_dump, 0, 0, 2)                       \
-    BOOLEAN(BOX64_DYNAREC_FASTNAN, dynarec_fastnan, 1)                       \
-    BOOLEAN(BOX64_DYNAREC_FASTROUND, dynarec_fastround, 1)                   \
-    BOOLEAN(BOX64_DYNAREC_FORCED, dynarec_forced, 0)                         \
-    INTEGER(BOX64_DYNAREC_FORWARD, dynarec_forward, 128, 0, 1024)            \
-    BOOLEAN(BOX64_DYNAREC_GDBJIT, dynarec_gdbjit, 0)                         \
-    INTEGER(BOX64_DYNAREC_LOG, dynarec_log, 0, 0, 3)                         \
-    BOOLEAN(BOX64_DYNAREC_MISSING, dynarec_missing, 0)                       \
-    BOOLEAN(BOX64_DYNAREC_NATIVEFLAGS, dynarec_nativeflags, 1)               \
-    INTEGER(BOX64_DYNAREC_PAUSE, dynarec_pause, 0, 0, 3)                     \
-    BOOLEAN(BOX64_DYNAREC_PERFMAP, dynarec_perf_map, 0)                      \
-    INTEGER(BOX64_DYNAREC_SAFEFLAGS, dynarec_safeflags, 1, 0, 2)             \
-    BOOLEAN(BOX64_DYNAREC_STRONGMEM, dynarec_strongmem, 0)                   \
-    BOOLEAN(BOX64_DYNAREC_TBB, dynarec_tbb, 1)                               \
-    STRING(BOX64_DYNAREC_TEST, dynarec_test_str)                             \
-    BOOLEAN(BOX64_DYNAREC_TRACE, dynarec_trace, 0)                           \
-    BOOLEAN(BOX64_DYNAREC_WAIT, dynarec_wait, 1)                             \
-    BOOLEAN(BOX64_DYNAREC_WEAKBARRIER, dynarec_weakbarrier, 1)               \
-    BOOLEAN(BOX64_DYNAREC_X87DOUBLE, dynarec_x87double, 0)                   \
-    STRING(BOX64_EMULATED_LIBS, emulated_libs)                               \
-    STRING(BOX64_ENV, env)                                                   \
-    STRING(BOX64_ENV1, env1)                                                 \
-    STRING(BOX64_ENV2, env2)                                                 \
-    STRING(BOX64_ENV3, env3)                                                 \
-    STRING(BOX64_ENV4, env4)                                                 \
-    STRING(BOX64_ENV5, env5)                                                 \
-    BOOLEAN(BOX64_EXIT, exit, 0)                                             \
-    BOOLEAN(BOX64_FIX_64BIT_INODES, fix_64bit_inodes, 0)                     \
-    BOOLEAN(BOX64_IGNOREINT3, ignoreint3, 0)                                 \
-    STRING(BOX64_INSERT_ARGS, insert_args)                                   \
-    BOOLEAN(BOX64_INPROCESSGPU, inprocessgpu, 0)                             \
-    BOOLEAN(BOX64_JITGDB, jitgdb, 0)                                         \
-    BOOLEAN(BOX64_JVM, jvm, 1)                                               \
-    STRING(BOX64_LD_LIBRARY_PATH, ld_library_path)                           \
-    BOOLEAN(BOX64_LIBCEF, libcef, 1)                                         \
-    STRING(BOX64_LIBGL, libgl)                                               \
-    ADDRESS(BOX64_LOAD_ADDR, load_addr)                                      \
-    INTEGER(BOX64_LOG, log, DEFAULT_LOG_LEVEL, 0, 3)                         \
-    BOOLEAN(BOX64_MALLOC_HACK, malloc_hack, 0)                               \
-    INTEGER(BOX64_MAXCPU, new_maxcpu, 0, 0, 100)                             \
-    BOOLEAN(BOX64_NOBANNER, nobanner, (isatty(fileno(stdout)) ? 0 : 1))      \
-    STRING(BOX64_NODYNAREC, nodynarec)                                       \
-    BOOLEAN(BOX64_NOGTK, nogtk, 0)                                           \
-    BOOLEAN(BOX64_NOPULSE, nopulse, 0)                                       \
-    BOOLEAN(BOX64_NORCFILES, noenvfiles, 0)                                  \
-    BOOLEAN(BOX64_NOSANDBOX, nosandbox, 0)                                   \
-    BOOLEAN(BOX64_NOSIGSEGV, nosigsegv, 0)                                   \
-    BOOLEAN(BOX64_NOSIGILL, nosigill, 0)                                     \
-    BOOLEAN(BOX64_NOVULKAN, novulkan, 0)                                     \
-    STRING(BOX64_PATH, path)                                                 \
-    BOOLEAN(BOX64_PREFER_EMULATED, prefer_emulated, 0)                       \
-    BOOLEAN(BOX64_PREFER_WRAPPED, prefer_wrapped, 0)                         \
-    STRING(BOX64_RCFILE, envfile)                                            \
-    BOOLEAN(BOX64_RDTSC_1GHZ, rdtsc_1ghz, 0)                                 \
-    BOOLEAN(BOX64_RESERVE_HIGH, reserve_high, 0)                             \
-    BOOLEAN(BOX64_ROLLING_LOG, rolling_log, 0)                               \
-    BOOLEAN(BOX64_SDL2_JGUID, sdl2_jguid, 0)                                 \
-    BOOLEAN(BOX64_SHAEXT, shaext, 1)                                         \
-    BOOLEAN(BOX64_SHOWBT, showbt, 0)                                         \
-    BOOLEAN(BOX64_SHOWSEGV, showsegv, 0)                                     \
-    BOOLEAN(BOX64_SSE_FLUSHTO0, sse_flushto0, 0)                             \
-    BOOLEAN(BOX64_SSE42, sse42, 1)                                           \
-    BOOLEAN(BOX64_SYNC_ROUNDING, sync_rounding, 0)                           \
-    BOOLEAN(BOX64_TRACE_COLOR, trace_regsdiff, 0)                            \
-    BOOLEAN(BOX64_TRACE_EMM, trace_emm, 0)                                   \
-    STRING(BOX64_TRACE_FILE, trace_file)                                     \
-    STRING(BOX64_TRACE_INIT, trace_init)                                     \
-    INTEGER64(BOX64_TRACE_START, start_cnt, 0)                               \
-    BOOLEAN(BOX64_TRACE_XMM, trace_xmm, 0)                                   \
-    STRING(BOX64_TRACE, trace)                                               \
-    BOOLEAN(BOX64_UNITYPLAYER, unityplayer, 1)                               \
-    BOOLEAN(BOX64_WRAP_EGL, wrap_egl, 0)                                     \
-    BOOLEAN(BOX64_X11GLX, x11glx, 1)                                         \
-    BOOLEAN(BOX64_X11SYNC, x11sync, 0)                                       \
-    BOOLEAN(BOX64_X11THREADS, x11threads, 0)                                 \
+#define ENVSUPER1()                                                     \
+    STRING(BOX64_ADDLIBS, addlibs)                                      \
+    BOOLEAN(BOX64_ALLOWMISSINGLIBS, allow_missing_libs, 0)              \
+    STRING(BOX64_ARGS, args)                                            \
+    STRING(BOX64_BASH, bash)                                            \
+    BOOLEAN(BOX64_CEFDISABLEGPU, cefdisablegpu, 0)                      \
+    BOOLEAN(BOX64_CEFDISABLEGPUCOMPOSITOR, cefdisablegpucompositor, 0)  \
+    INTEGER(BOX64_CPUTYPE, cputype, 0, 0, 1)                            \
+    BOOLEAN(BOX64_CRASHHANDLER, dummy_crashhandler, 1)                  \
+    BOOLEAN(BOX64_DLSYM_ERROR, dlsym_error, 0)                          \
+    INTEGER(BOX64_DUMP, dump, 0, 0, 2)                                  \
+    BOOLEAN(BOX64_DYNAREC_ALIGNED_ATOMICS, dynarec_aligned_atomics, 0)  \
+    INTEGER(BOX64_DYNAREC_BIGBLOCK, dynarec_bigblock, 1, 0, 3)          \
+    BOOLEAN(BOX64_DYNAREC_BLEEDING_EDGE, dynarec_bleeding_edge, 1)      \
+    BOOLEAN(BOX64_DYNAREC_CALLRET, dynarec_callret, 0)                  \
+    BOOLEAN(BOX64_DYNAREC_DF, dynarec_df, 1)                            \
+    BOOLEAN(BOX64_DYNAREC_DIRTY, dynarec_dirty, 0)                      \
+    BOOLEAN(BOX64_DYNAREC_DIV0, dynarec_div0, 0)                        \
+    INTEGER(BOX64_DYNAREC_DUMP, dynarec_dump, 0, 0, 2)                  \
+    BOOLEAN(BOX64_DYNAREC_FASTNAN, dynarec_fastnan, 1)                  \
+    INTEGER(BOX64_DYNAREC_FASTROUND, dynarec_fastround, 1, 0, 2)        \
+    INTEGER(BOX64_DYNAREC_FORWARD, dynarec_forward, 128, 0, 1024)       \
+    INTEGER(BOX64_DYNAREC_GDBJIT, dynarec_gdbjit, 0, 0, 2)              \
+    INTEGER(BOX64_DYNAREC_LOG, dynarec_log, 0, 0, 3)                    \
+    INTEGER(BOX64_DYNAREC_MISSING, dynarec_missing, 0, 0, 2)            \
+    BOOLEAN(BOX64_DYNAREC_NATIVEFLAGS, dynarec_nativeflags, 1)          \
+    INTEGER(BOX64_DYNAREC_PAUSE, dynarec_pause, 0, 0, 3)                \
+    BOOLEAN(BOX64_DYNAREC_PERFMAP, dynarec_perf_map, 0)                 \
+    INTEGER(BOX64_DYNAREC_SAFEFLAGS, dynarec_safeflags, 1, 0, 2)        \
+    BOOLEAN(BOX64_DYNAREC_STRONGMEM, dynarec_strongmem, 0)              \
+    BOOLEAN(BOX64_DYNAREC_TBB, dynarec_tbb, 1)                          \
+    STRING(BOX64_DYNAREC_TEST, dynarec_test_str)                        \
+    BOOLEAN(BOX64_DYNAREC_TRACE, dynarec_trace, 0)                      \
+    BOOLEAN(BOX64_DYNAREC_WAIT, dynarec_wait, 1)                        \
+    BOOLEAN(BOX64_DYNAREC_WEAKBARRIER, dynarec_weakbarrier, 1)          \
+    BOOLEAN(BOX64_DYNAREC_X87DOUBLE, dynarec_x87double, 0)              \
+    STRING(BOX64_EMULATED_LIBS, emulated_libs)                          \
+    STRING(BOX64_ENV, env)                                              \
+    STRING(BOX64_ENV1, env1)                                            \
+    STRING(BOX64_ENV2, env2)                                            \
+    STRING(BOX64_ENV3, env3)                                            \
+    STRING(BOX64_ENV4, env4)                                            \
+    STRING(BOX64_ENV5, env5)                                            \
+    BOOLEAN(BOX64_EXIT, exit, 0)                                        \
+    BOOLEAN(BOX64_FIX_64BIT_INODES, fix_64bit_inodes, 0)                \
+    BOOLEAN(BOX64_IGNOREINT3, ignoreint3, 0)                            \
+    STRING(BOX64_INSERT_ARGS, insert_args)                              \
+    BOOLEAN(BOX64_INPROCESSGPU, inprocessgpu, 0)                        \
+    BOOLEAN(BOX64_JITGDB, jitgdb, 0)                                    \
+    BOOLEAN(BOX64_JVM, jvm, 1)                                          \
+    STRING(BOX64_LD_LIBRARY_PATH, ld_library_path)                      \
+    BOOLEAN(BOX64_LIBCEF, libcef, 1)                                    \
+    STRING(BOX64_LIBGL, libgl)                                          \
+    ADDRESS(BOX64_LOAD_ADDR, load_addr)                                 \
+    INTEGER(BOX64_LOG, log, DEFAULT_LOG_LEVEL, 0, 3)                    \
+    BOOLEAN(BOX64_MALLOC_HACK, malloc_hack, 0)                          \
+    INTEGER(BOX64_MAXCPU, new_maxcpu, 0, 0, 100)                        \
+    BOOLEAN(BOX64_NOBANNER, nobanner, (isatty(fileno(stdout)) ? 0 : 1)) \
+    STRING(BOX64_NODYNAREC, nodynarec)                                  \
+    BOOLEAN(BOX64_NOGTK, nogtk, 0)                                      \
+    BOOLEAN(BOX64_NOPULSE, nopulse, 0)                                  \
+    BOOLEAN(BOX64_NORCFILES, noenvfiles, 0)                             \
+    BOOLEAN(BOX64_NOSANDBOX, nosandbox, 0)                              \
+    BOOLEAN(BOX64_NOSIGSEGV, nosigsegv, 0)                              \
+    BOOLEAN(BOX64_NOSIGILL, nosigill, 0)                                \
+    BOOLEAN(BOX64_NOVULKAN, novulkan, 0)                                \
+    STRING(BOX64_PATH, path)                                            \
+    BOOLEAN(BOX64_PREFER_EMULATED, prefer_emulated, 0)                  \
+    BOOLEAN(BOX64_PREFER_WRAPPED, prefer_wrapped, 0)                    \
+    STRING(BOX64_RCFILE, envfile)                                       \
+    BOOLEAN(BOX64_RDTSC_1GHZ, rdtsc_1ghz, 0)                            \
+    BOOLEAN(BOX64_RESERVE_HIGH, reserve_high, 0)                        \
+    BOOLEAN(BOX64_ROLLING_LOG, rolling_log, 0)                          \
+    BOOLEAN(BOX64_SDL2_JGUID, sdl2_jguid, 0)                            \
+    BOOLEAN(BOX64_SHAEXT, shaext, 1)                                    \
+    BOOLEAN(BOX64_SHOWBT, showbt, 0)                                    \
+    BOOLEAN(BOX64_SHOWSEGV, showsegv, 0)                                \
+    BOOLEAN(BOX64_SSE_FLUSHTO0, sse_flushto0, 0)                        \
+    BOOLEAN(BOX64_SSE42, sse42, 1)                                      \
+    BOOLEAN(BOX64_SYNC_ROUNDING, sync_rounding, 0)                      \
+    BOOLEAN(BOX64_TRACE_COLOR, trace_regsdiff, 0)                       \
+    BOOLEAN(BOX64_TRACE_EMM, trace_emm, 0)                              \
+    STRING(BOX64_TRACE_FILE, trace_file)                                \
+    STRING(BOX64_TRACE_INIT, trace_init)                                \
+    INTEGER64(BOX64_TRACE_START, start_cnt, 0)                          \
+    BOOLEAN(BOX64_TRACE_XMM, trace_xmm, 0)                              \
+    STRING(BOX64_TRACE, trace)                                          \
+    BOOLEAN(BOX64_UNITYPLAYER, unityplayer, 1)                          \
+    BOOLEAN(BOX64_WRAP_EGL, wrap_egl, 0)                                \
+    BOOLEAN(BOX64_X11GLX, x11glx, 1)                                    \
+    BOOLEAN(BOX64_X11SYNC, x11sync, 0)                                  \
+    BOOLEAN(BOX64_X11THREADS, x11threads, 0)                            \
     BOOLEAN(BOX64_X87_NO80BITS, x87_no80bits, 0)
 
 #ifdef ARM64
diff --git a/src/tools/env.c b/src/tools/env.c
index ae19c8ad..4f61083a 100644
--- a/src/tools/env.c
+++ b/src/tools/env.c
@@ -66,6 +66,23 @@ static const char default_rcfile[] =
 "BOX64_EXIT=1\n"
 ;
 
+
+static void addNewEnvVar(const char* s)
+{
+    if (!s) return;
+    char* p = box_strdup(s);
+    char* e = strchr(p, '=');
+    if (!e) {
+        printf_log(LOG_INFO, "Invalid specific env. var. '%s'\n", s);
+        box_free(p);
+        return;
+    }
+    *e = '\0';
+    ++e;
+    setenv(p, e, 1);
+    box_free(p);
+}
+
 static void applyCustomRules()
 {
     if (BOX64ENV(log) == LOG_NEVER) {
@@ -142,12 +159,12 @@ static void applyCustomRules()
 
     if (box64env.exit) exit(0);
 
-    if (box64env.env) setenv("BOX64_ENV", "1", 1);
-    if (box64env.env1) setenv("BOX64_ENV1", "1", 1);
-    if (box64env.env2) setenv("BOX64_ENV2", "1", 1);
-    if (box64env.env3) setenv("BOX64_ENV3", "1", 1);
-    if (box64env.env4) setenv("BOX64_ENV4", "1", 1);
-    if (box64env.env5) setenv("BOX64_ENV5", "1", 1);
+    if (box64env.env) addNewEnvVar(box64env.env);
+    if (box64env.env1) addNewEnvVar(box64env.env1);
+    if (box64env.env2) addNewEnvVar(box64env.env2);
+    if (box64env.env3) addNewEnvVar(box64env.env3);
+    if (box64env.env4) addNewEnvVar(box64env.env4);
+    if (box64env.env5) addNewEnvVar(box64env.env5);
 }
 
 static void trimStringInplace(char* s)