diff --git a/src/core.c b/src/core.c index 5b91cf3cfc..8ac360551e 100644 --- a/src/core.c +++ b/src/core.c @@ -836,14 +836,14 @@ int initialize(int argc, const char **argv, char** env, x64emu_t** emulator, elf DynaCacheClean(); exit(0); } - if(!strcmp(prog, "--dynacache-list")) { + if(!strcmp(prog, "-dl") || !strcmp(prog, "--dynacache-list")) { #ifdef DYNAREC DetectHostCpuFeatures(); #endif DynaCacheList(argv[nextarg+1]); exit(0); } - if(!strcmp(prog, "--dynacache-clean")) { + if(!strcmp(prog, "-dc") || !strcmp(prog, "--dynacache-clean")) { #ifdef DYNAREC DetectHostCpuFeatures(); #endif diff --git a/src/include/env.h b/src/include/env.h index 881ac15661..1bb53b4f1f 100644 --- a/src/include/env.h +++ b/src/include/env.h @@ -20,11 +20,11 @@ } while (0) /* - INTEGER(NAME, name, default, min, max, wine) - INTEGER64(NAME, name, default, wine) - BOOLEAN(NAME, name, default, wine) - ADDRESS(NAME, name, wine) - STRING(NAME, name, wine) + INTEGER(NAME, name, default, min, max, wine, dynacache) + INTEGER64(NAME, name, default, wine, dynacache) + BOOLEAN(NAME, name, default, wine, dynacache) + ADDRESS(NAME, name, wine, dynacache) + STRING(NAME, name, wine, dynacache) */ #ifdef _WIN32 @@ -37,140 +37,140 @@ extern char* ftrace_name; #endif #define ENVSUPER1() \ - STRING(BOX64_ADDLIBS, addlibs, 0) \ - BOOLEAN(BOX64_AES, aes, 1, 1) \ - BOOLEAN(BOX64_ALLOWMISSINGLIBS, allow_missing_libs, 0, 0) \ - STRING(BOX64_ARCH, arch, 0) \ - STRING(BOX64_ARGS, args, 0) \ - STRING(BOX64_BASH, bash, 0) \ - STRING(BOX64_PYTHON3, python3, 0) \ - INTEGER(BOX64_CPUTYPE, cputype, 0, 0, 1, 1) \ - BOOLEAN(BOX64_CRASHHANDLER, dummy_crashhandler, 1, 0) \ - BOOLEAN(BOX64_DLSYM_ERROR, dlsym_error, 0, 0) \ - BOOLEAN(BOX64_DUMP, dump, 0, 1) \ - BOOLEAN(BOX64_DYNAREC_ALIGNED_ATOMICS, dynarec_aligned_atomics, 0, 1) \ - INTEGER(BOX64_DYNAREC_BIGBLOCK, dynarec_bigblock, 2, 0, 3, 1) \ - BOOLEAN(BOX64_DYNAREC_BLEEDING_EDGE, dynarec_bleeding_edge, 1, 0) \ - INTEGER(BOX64_DYNAREC_CALLRET, dynarec_callret, 0, 0, 2, 1) \ - INTEGER(BOX64_DYNAREC_SEP, dynarec_sep, 1, 0, 2, 1) \ - BOOLEAN(BOX64_DYNAREC_DF, dynarec_df, 1, 1) \ - INTEGER(BOX64_DYNAREC_DIRTY, dynarec_dirty, 0, 0, 2, 0) \ - BOOLEAN(BOX64_DYNAREC_NOHOTPAGE, dynarec_nohotpage, 0, 0) \ - BOOLEAN(BOX64_DYNAREC_DIV0, dynarec_div0, 0, 1) \ - INTEGER(BOX64_DYNAREC_DUMP, dynarec_dump, 0, 0, 2, 1) \ - STRING(BOX64_DYNAREC_DUMP_RANGE, dynarec_dump_range, 1) \ - BOOLEAN(BOX64_DYNAREC_FASTNAN, dynarec_fastnan, 1, 1) \ - INTEGER(BOX64_DYNAREC_FASTROUND, dynarec_fastround, 1, 0, 2, 1) \ - INTEGER(BOX64_DYNAREC_FORWARD, dynarec_forward, 128, 0, 1024, 1) \ - STRING(BOX64_DYNAREC_GDBJIT, dynarec_gdbjit_str, 0) \ - INTEGER(BOX64_DYNAREC_LOG, dynarec_log, 0, 0, 3, 1) \ - INTEGER(BOX64_DYNAREC_MISSING, dynarec_missing, 0, 0, 2, 1) \ - BOOLEAN(BOX64_DYNAREC_NATIVEFLAGS, dynarec_nativeflags, 1, 1) \ - STRING(BOX64_DYNAREC_NOHOSTEXT, dynarec_nohostext, 0) \ - INTEGER(BOX64_DYNAREC_PAUSE, dynarec_pause, 0, 0, 3, 1) \ - BOOLEAN(BOX64_DYNAREC_PERFMAP, dynarec_perf_map, 0, 0) \ - INTEGER(BOX64_DYNAREC_SAFEFLAGS, dynarec_safeflags, 1, 0, 2, 1) \ - INTEGER(BOX64_DYNAREC_STRONGMEM, dynarec_strongmem, 0, 0, 4, 1) \ - BOOLEAN(BOX64_DYNAREC_TBB, dynarec_tbb, 1, 0) \ - STRING(BOX64_DYNAREC_TEST, dynarec_test_str, 1) \ - BOOLEAN(BOX64_DYNAREC_TEST_NODUP, dynarec_test_nodup, 0, 1) \ - BOOLEAN(BOX64_DYNAREC_TEST_NODUMP, dynarec_test_nodump, 1, 1) \ - BOOLEAN(BOX64_DYNAREC_TRACE, dynarec_trace, 0, 0) \ - BOOLEAN(BOX64_DYNAREC_VOLATILE_METADATA, dynarec_volatile_metadata, 1, 0) \ - BOOLEAN(BOX64_DYNAREC_WAIT, dynarec_wait, 1, 1) \ - INTEGER(BOX64_DYNAREC_WEAKBARRIER, dynarec_weakbarrier, 1, 0, 2, 1) \ - INTEGER(BOX64_DYNAREC_X87DOUBLE, dynarec_x87double, 0, 0, 2, 1) \ - BOOLEAN(BOX64_DYNAREC_INTERP_SIGNAL, dynarec_interp_signal, 0, 0) \ - BOOLEAN(BOX64_DYNAREC_PURGE, dynarec_purge, 0, 0) \ - INTEGER(BOX64_DYNAREC_PURGE_AGE, dynarec_purge_age, 4096, 10, 65536, 0) \ - BOOLEAN(BOX64_NODYNAREC_DELAY, nodynarec_delay, 0, 1) \ - STRING(BOX64_EMULATED_LIBS, emulated_libs, 0) \ - INTEGER(BOX64_DYNAREC_NOARCH, dynarec_noarch, 0, 0, 2, 1) \ - STRING(BOX64_ENV, env, 0) \ - STRING(BOX64_ENV1, env1, 0) \ - STRING(BOX64_ENV2, env2, 0) \ - STRING(BOX64_ENV3, env3, 0) \ - STRING(BOX64_ENV4, env4, 0) \ - STRING(BOX64_ENV5, env5, 0) \ - BOOLEAN(BOX64_EXIT, exit, 0, 0) \ - BOOLEAN(BOX64_FIX_64BIT_INODES, fix_64bit_inodes, 0, 0) \ - BOOLEAN(BOX64_FORCE_LD_PRELOAD, force_ld_preload, 0, 0) \ - BOOLEAN(BOX64_IGNOREINT3, ignoreint3, 0, 0) \ - STRING(BOX64_INSERT_ARGS, insert_args, 0) \ - BOOLEAN(BOX64_INPROCESSGPU, inprocessgpu, 0, 0) \ - INTEGER(BOX64_JITGDB, jitgdb, 0, 0, 3, 0) \ - BOOLEAN(BOX64_JVM, jvm, 1, 0) \ - STRING(BOX64_LD_LIBRARY_PATH, ld_library_path, 0) \ - BOOLEAN(BOX64_LIBCEF, libcef, 0, 0) \ - STRING(BOX64_LIBGL, libgl, 0) \ - ADDRESS(BOX64_LOAD_ADDR, load_addr, 0) \ - INTEGER(BOX64_LOG, log, DEFAULT_LOG_LEVEL, 0, 3, 1) \ - INTEGER(BOX64_MALLOC_HACK, malloc_hack, 0, 0, 2, 0) \ - INTEGER(BOX64_MAXCPU, new_maxcpu, 0, 0, 100, 1) \ - BOOLEAN(BOX64_MMAP32, mmap32, 1, 0) \ - BOOLEAN(BOX64_NOBANNER, nobanner, BOX64_NOBANNER_DEFAULT, 1) \ - STRING(BOX64_NODYNAREC, nodynarec, 1) \ - BOOLEAN(BOX64_NOGTK, nogtk, 0, 0) \ - BOOLEAN(BOX64_NOPULSE, nopulse, 0, 0) \ - BOOLEAN(BOX64_NORCFILES, noenvfiles, 0, 0) \ - BOOLEAN(BOX64_NOSANDBOX, nosandbox, 0, 0) \ - BOOLEAN(BOX64_NOSIGSEGV, nosigsegv, 0, 0) \ - BOOLEAN(BOX64_NOSIGILL, nosigill, 0, 0) \ - BOOLEAN(BOX64_NOVULKAN, novulkan, 0, 0) \ - STRING(BOX64_PATH, path, 0) \ - BOOLEAN(BOX64_PCLMULQDQ, pclmulqdq, 1, 1) \ - BOOLEAN(BOX64_PREFER_EMULATED, prefer_emulated, 0, 0) \ - BOOLEAN(BOX64_PREFER_WRAPPED, prefer_wrapped, 0, 0) \ - STRING(BOX64_PROFILE, profile, 1) \ - STRING(BOX64_RCFILE, envfile, 0) \ - BOOLEAN(BOX64_RDTSC_1GHZ, rdtsc_1ghz, 0, 0) \ - BOOLEAN(BOX64_RDTSC_INV, rdtsc_inv, 0, 1) \ - BOOLEAN(BOX64_RESERVE_HIGH, reserve_high, 0, 0) \ - INTEGER(BOX64_ROLLING_LOG, cycle_log, 0, 0, 2048, 0) \ - BOOLEAN(BOX64_SDL2_JGUID, sdl2_jguid, 0, 0) \ - BOOLEAN(BOX64_SHAEXT, shaext, 1, 1) \ - BOOLEAN(BOX64_SHOWBT, showbt, 0, 0) \ - BOOLEAN(BOX64_SHOWSEGV, showsegv, 0, 0) \ - BOOLEAN(BOX64_SSE_FLUSHTO0, sse_flushto0, 0, 1) \ - BOOLEAN(BOX64_SSE42, sse42, 1, 1) \ - BOOLEAN(BOX64_STEAM_VULKAN, steam_vulkan, 0, 0) \ - BOOLEAN(BOX64_SYNC_ROUNDING, sync_rounding, 0, 0) \ - BOOLEAN(BOX64_TRACE_COLOR, trace_regsdiff, 0, 0) \ - BOOLEAN(BOX64_TRACE_EMM, trace_emm, 0, 0) \ - STRING(BOX64_TRACE_FILE, trace_file, 0) \ - STRING(BOX64_TRACE_INIT, trace_init, 0) \ - INTEGER64(BOX64_TRACE_START, start_cnt, 0, 0) \ - BOOLEAN(BOX64_TRACE_XMM, trace_xmm, 0, 0) \ - STRING(BOX64_TRACE, trace, 0) \ - BOOLEAN(BOX64_UNITY, unity, 0, 0) \ - BOOLEAN(BOX64_UNITYPLAYER, unityplayer, 1, 0) \ - BOOLEAN(BOX64_WRAP_EGL, wrap_egl, 0, 0) \ - BOOLEAN(BOX64_X11GLX, x11glx, 1, 0) \ - BOOLEAN(BOX64_X11SYNC, x11sync, 0, 0) \ - BOOLEAN(BOX64_X11THREADS, x11threads, 0, 0) \ - BOOLEAN(BOX64_X87_NO80BITS, x87_no80bits, 0, 1) \ - BOOLEAN(BOX64_NOPERSONA32BITS, nopersona32bits, 0, 0) \ - BOOLEAN(BOX64_NOVULKANOVERLAY, novulkanoverlay, 0, 0) \ - INTEGER(BOX64_DYNACACHE, dynacache, 1, 0, 2, 0) \ - STRING(BOX64_DYNACACHE_FOLDER, dynacache_folder, 0) \ - INTEGER(BOX64_DYNACACHE_COMPRESS, dynacache_compress, 1, 0, 2, 0) \ - INTEGER(BOX64_DYNACACHE_LIMIT, dynacache_limit, 2048, 0, 1048576, 0) \ - INTEGER(BOX64_DYNACACHE_MIN, dynacache_min, 30, 0, 10240, 0) + STRING(BOX64_ADDLIBS, addlibs, 0, 0) \ + BOOLEAN(BOX64_AES, aes, 1, 1, 1) \ + BOOLEAN(BOX64_ALLOWMISSINGLIBS, allow_missing_libs, 0, 0, 0) \ + STRING(BOX64_ARCH, arch, 0, 0) \ + STRING(BOX64_ARGS, args, 0, 0) \ + STRING(BOX64_BASH, bash, 0, 0) \ + STRING(BOX64_PYTHON3, python3, 0, 0) \ + INTEGER(BOX64_CPUTYPE, cputype, 0, 0, 1, 1, 1) \ + BOOLEAN(BOX64_CRASHHANDLER, dummy_crashhandler, 1, 0, 0) \ + BOOLEAN(BOX64_DLSYM_ERROR, dlsym_error, 0, 0, 0) \ + BOOLEAN(BOX64_DUMP, dump, 0, 1, 0) \ + BOOLEAN(BOX64_DYNAREC_ALIGNED_ATOMICS, dynarec_aligned_atomics, 0, 1, 1) \ + INTEGER(BOX64_DYNAREC_BIGBLOCK, dynarec_bigblock, 2, 0, 3, 1, 2) \ + BOOLEAN(BOX64_DYNAREC_BLEEDING_EDGE, dynarec_bleeding_edge, 1, 0, 0) \ + INTEGER(BOX64_DYNAREC_CALLRET, dynarec_callret, 0, 0, 2, 1, 2) \ + INTEGER(BOX64_DYNAREC_SEP, dynarec_sep, 1, 0, 2, 1, 2) \ + BOOLEAN(BOX64_DYNAREC_DF, dynarec_df, 1, 1, 1) \ + INTEGER(BOX64_DYNAREC_DIRTY, dynarec_dirty, 0, 0, 2, 0, 2) \ + BOOLEAN(BOX64_DYNAREC_NOHOTPAGE, dynarec_nohotpage, 0, 0, 1) \ + BOOLEAN(BOX64_DYNAREC_DIV0, dynarec_div0, 0, 1, 1) \ + INTEGER(BOX64_DYNAREC_DUMP, dynarec_dump, 0, 0, 2, 1, 0) \ + STRING(BOX64_DYNAREC_DUMP_RANGE, dynarec_dump_range, 1, 0) \ + BOOLEAN(BOX64_DYNAREC_FASTNAN, dynarec_fastnan, 1, 1, 1) \ + INTEGER(BOX64_DYNAREC_FASTROUND, dynarec_fastround, 1, 0, 2, 1, 2) \ + INTEGER(BOX64_DYNAREC_FORWARD, dynarec_forward, 128, 0, 1024, 1, 0) \ + STRING(BOX64_DYNAREC_GDBJIT, dynarec_gdbjit_str, 0, 0) \ + INTEGER(BOX64_DYNAREC_LOG, dynarec_log, 0, 0, 3, 1, 0) \ + INTEGER(BOX64_DYNAREC_MISSING, dynarec_missing, 0, 0, 2, 1, 0) \ + BOOLEAN(BOX64_DYNAREC_NATIVEFLAGS, dynarec_nativeflags, 1, 1, 1) \ + STRING(BOX64_DYNAREC_NOHOSTEXT, dynarec_nohostext, 0, 0) \ + INTEGER(BOX64_DYNAREC_PAUSE, dynarec_pause, 0, 0, 3, 1, 0) \ + BOOLEAN(BOX64_DYNAREC_PERFMAP, dynarec_perf_map, 0, 0, 0) \ + INTEGER(BOX64_DYNAREC_SAFEFLAGS, dynarec_safeflags, 1, 0, 2, 1, 2) \ + INTEGER(BOX64_DYNAREC_STRONGMEM, dynarec_strongmem, 0, 0, 4, 1, 3) \ + BOOLEAN(BOX64_DYNAREC_TBB, dynarec_tbb, 1, 0, 0) \ + STRING(BOX64_DYNAREC_TEST, dynarec_test_str, 1, 0) \ + BOOLEAN(BOX64_DYNAREC_TEST_NODUP, dynarec_test_nodup, 0, 1, 0) \ + BOOLEAN(BOX64_DYNAREC_TEST_NODUMP, dynarec_test_nodump, 1, 1, 0) \ + BOOLEAN(BOX64_DYNAREC_TRACE, dynarec_trace, 0, 0, 0) \ + BOOLEAN(BOX64_DYNAREC_VOLATILE_METADATA, dynarec_volatile_metadata, 1, 0, 1) \ + BOOLEAN(BOX64_DYNAREC_WAIT, dynarec_wait, 1, 1, 0) \ + INTEGER(BOX64_DYNAREC_WEAKBARRIER, dynarec_weakbarrier, 1, 0, 2, 1, 2) \ + INTEGER(BOX64_DYNAREC_X87DOUBLE, dynarec_x87double, 0, 0, 2, 1, 2) \ + BOOLEAN(BOX64_DYNAREC_INTERP_SIGNAL, dynarec_interp_signal, 0, 0, 0) \ + BOOLEAN(BOX64_DYNAREC_PURGE, dynarec_purge, 0, 0, 0) \ + INTEGER(BOX64_DYNAREC_PURGE_AGE, dynarec_purge_age, 4096, 10, 65536, 0, 0) \ + BOOLEAN(BOX64_NODYNAREC_DELAY, nodynarec_delay, 0, 1, 0) \ + STRING(BOX64_EMULATED_LIBS, emulated_libs, 0, 0) \ + INTEGER(BOX64_DYNAREC_NOARCH, dynarec_noarch, 0, 0, 2, 1, 2) \ + STRING(BOX64_ENV, env, 0, 0) \ + STRING(BOX64_ENV1, env1, 0, 0) \ + STRING(BOX64_ENV2, env2, 0, 0) \ + STRING(BOX64_ENV3, env3, 0, 0) \ + STRING(BOX64_ENV4, env4, 0, 0) \ + STRING(BOX64_ENV5, env5, 0, 0) \ + BOOLEAN(BOX64_EXIT, exit, 0, 0, 0) \ + BOOLEAN(BOX64_FIX_64BIT_INODES, fix_64bit_inodes, 0, 0, 0) \ + BOOLEAN(BOX64_FORCE_LD_PRELOAD, force_ld_preload, 0, 0, 0) \ + BOOLEAN(BOX64_IGNOREINT3, ignoreint3, 0, 0, 1) \ + STRING(BOX64_INSERT_ARGS, insert_args, 0, 0) \ + BOOLEAN(BOX64_INPROCESSGPU, inprocessgpu, 0, 0, 0) \ + INTEGER(BOX64_JITGDB, jitgdb, 0, 0, 3, 0, 0) \ + BOOLEAN(BOX64_JVM, jvm, 1, 0, 0) \ + STRING(BOX64_LD_LIBRARY_PATH, ld_library_path, 0, 0) \ + BOOLEAN(BOX64_LIBCEF, libcef, 0, 0, 0) \ + STRING(BOX64_LIBGL, libgl, 0, 0) \ + ADDRESS(BOX64_LOAD_ADDR, load_addr, 0, 0) \ + INTEGER(BOX64_LOG, log, DEFAULT_LOG_LEVEL, 0, 3, 1, 0) \ + INTEGER(BOX64_MALLOC_HACK, malloc_hack, 0, 0, 2, 0, 0) \ + INTEGER(BOX64_MAXCPU, new_maxcpu, 0, 0, 100, 1, 0) \ + BOOLEAN(BOX64_MMAP32, mmap32, 1, 0, 0) \ + BOOLEAN(BOX64_NOBANNER, nobanner, BOX64_NOBANNER_DEFAULT, 1, 0) \ + STRING(BOX64_NODYNAREC, nodynarec, 1, 0) \ + BOOLEAN(BOX64_NOGTK, nogtk, 0, 0, 0) \ + BOOLEAN(BOX64_NOPULSE, nopulse, 0, 0, 0) \ + BOOLEAN(BOX64_NORCFILES, noenvfiles, 0, 0, 0) \ + BOOLEAN(BOX64_NOSANDBOX, nosandbox, 0, 0, 0) \ + BOOLEAN(BOX64_NOSIGSEGV, nosigsegv, 0, 0, 0) \ + BOOLEAN(BOX64_NOSIGILL, nosigill, 0, 0, 0) \ + BOOLEAN(BOX64_NOVULKAN, novulkan, 0, 0, 0) \ + STRING(BOX64_PATH, path, 0, 0) \ + BOOLEAN(BOX64_PCLMULQDQ, pclmulqdq, 1, 1, 1) \ + BOOLEAN(BOX64_PREFER_EMULATED, prefer_emulated, 0, 0, 0) \ + BOOLEAN(BOX64_PREFER_WRAPPED, prefer_wrapped, 0, 0, 0) \ + STRING(BOX64_PROFILE, profile, 1, 0) \ + STRING(BOX64_RCFILE, envfile, 0, 0) \ + BOOLEAN(BOX64_RDTSC_1GHZ, rdtsc_1ghz, 0, 0, 1) \ + BOOLEAN(BOX64_RDTSC_INV, rdtsc_inv, 0, 1, 1) \ + BOOLEAN(BOX64_RESERVE_HIGH, reserve_high, 0, 0, 0) \ + INTEGER(BOX64_ROLLING_LOG, cycle_log, 0, 0, 2048, 0, 0) \ + BOOLEAN(BOX64_SDL2_JGUID, sdl2_jguid, 0, 0, 0) \ + BOOLEAN(BOX64_SHAEXT, shaext, 1, 1, 1) \ + BOOLEAN(BOX64_SHOWBT, showbt, 0, 0, 0) \ + BOOLEAN(BOX64_SHOWSEGV, showsegv, 0, 0, 0) \ + BOOLEAN(BOX64_SSE_FLUSHTO0, sse_flushto0, 0, 1, 1) \ + BOOLEAN(BOX64_SSE42, sse42, 1, 1, 1) \ + BOOLEAN(BOX64_STEAM_VULKAN, steam_vulkan, 0, 0, 0) \ + BOOLEAN(BOX64_SYNC_ROUNDING, sync_rounding, 0, 0, 0) \ + BOOLEAN(BOX64_TRACE_COLOR, trace_regsdiff, 0, 0, 0) \ + BOOLEAN(BOX64_TRACE_EMM, trace_emm, 0, 0, 0) \ + STRING(BOX64_TRACE_FILE, trace_file, 0, 0) \ + STRING(BOX64_TRACE_INIT, trace_init, 0, 0) \ + INTEGER64(BOX64_TRACE_START, start_cnt, 0, 0, 0) \ + BOOLEAN(BOX64_TRACE_XMM, trace_xmm, 0, 0, 0) \ + STRING(BOX64_TRACE, trace, 0, 0) \ + BOOLEAN(BOX64_UNITY, unity, 0, 0, 0) \ + BOOLEAN(BOX64_UNITYPLAYER, unityplayer, 1, 0, 0) \ + BOOLEAN(BOX64_WRAP_EGL, wrap_egl, 0, 0, 0) \ + BOOLEAN(BOX64_X11GLX, x11glx, 1, 0, 0) \ + BOOLEAN(BOX64_X11SYNC, x11sync, 0, 0, 0) \ + BOOLEAN(BOX64_X11THREADS, x11threads, 0, 0, 0) \ + BOOLEAN(BOX64_X87_NO80BITS, x87_no80bits, 0, 1, 1) \ + BOOLEAN(BOX64_NOPERSONA32BITS, nopersona32bits, 0, 0, 0) \ + BOOLEAN(BOX64_NOVULKANOVERLAY, novulkanoverlay, 0, 0, 0) \ + INTEGER(BOX64_DYNACACHE, dynacache, 1, 0, 2, 0, 0) \ + STRING(BOX64_DYNACACHE_FOLDER, dynacache_folder, 0, 0) \ + INTEGER(BOX64_DYNACACHE_COMPRESS, dynacache_compress, 1, 0, 2, 0, 0) \ + INTEGER(BOX64_DYNACACHE_LIMIT, dynacache_limit, 2048, 0, 1048576, 0, 0) \ + INTEGER(BOX64_DYNACACHE_MIN, dynacache_min, 30, 0, 10240, 0, 0) #if defined(ARM64) || defined (LA64) #define ENVSUPER2() \ - INTEGER(BOX64_AVX, avx, 2, 0, 2, 1) + INTEGER(BOX64_AVX, avx, 2, 0, 2, 1, 2) #else #define ENVSUPER2() \ - INTEGER(BOX64_AVX, avx, 0, 0, 2, 1) + INTEGER(BOX64_AVX, avx, 0, 0, 2, 1, 2) #endif #ifdef DYNAREC #define ENVSUPER3() \ - BOOLEAN(BOX64_DYNAREC, dynarec, 1, 1) + BOOLEAN(BOX64_DYNAREC, dynarec, 1, 1, 0) #else #define ENVSUPER3() \ - BOOLEAN(BOX64_DYNAREC, dynarec, 0, 1) + BOOLEAN(BOX64_DYNAREC, dynarec, 0, 1, 0) #endif #define ENVSUPER() \ @@ -179,11 +179,11 @@ extern char* ftrace_name; ENVSUPER3() typedef struct box64env_s { -#define INTEGER(NAME, name, default, min, max, wine) int name; -#define INTEGER64(NAME, name, default, wine) int64_t name; -#define BOOLEAN(NAME, name, default, wine) int name; -#define ADDRESS(NAME, name, wine) uintptr_t name; -#define STRING(NAME, name, wine) char* name; +#define INTEGER(NAME, name, default, min, max, wine, dynacache) int name; +#define INTEGER64(NAME, name, default, wine, dynacache) int64_t name; +#define BOOLEAN(NAME, name, default, wine, dynacache) int name; +#define ADDRESS(NAME, name, wine, dynacache) uintptr_t name; +#define STRING(NAME, name, wine, dynacache) char* name; ENVSUPER() #undef INTEGER #undef INTEGER64 @@ -191,11 +191,11 @@ typedef struct box64env_s { #undef ADDRESS #undef STRING -#define INTEGER(NAME, name, default, min, max, wine) uint64_t is_##name##_overridden : 1; -#define INTEGER64(NAME, name, default, wine) uint64_t is_##name##_overridden : 1; -#define BOOLEAN(NAME, name, default, wine) uint64_t is_##name##_overridden : 1; -#define ADDRESS(NAME, name, wine) uint64_t is_##name##_overridden : 1; -#define STRING(NAME, name, wine) uint64_t is_##name##_overridden : 1; +#define INTEGER(NAME, name, default, min, max, wine, dynacache) uint64_t is_##name##_overridden : 1; +#define INTEGER64(NAME, name, default, wine, dynacache) uint64_t is_##name##_overridden : 1; +#define BOOLEAN(NAME, name, default, wine, dynacache) uint64_t is_##name##_overridden : 1; +#define ADDRESS(NAME, name, wine, dynacache) uint64_t is_##name##_overridden : 1; +#define STRING(NAME, name, wine, dynacache) uint64_t is_##name##_overridden : 1; ENVSUPER() #undef INTEGER #undef INTEGER64 diff --git a/src/tools/dynacache.c b/src/tools/dynacache.c index 65807c4253..b4fa6e68dc 100644 --- a/src/tools/dynacache.c +++ b/src/tools/dynacache.c @@ -91,7 +91,7 @@ const char* GetDynacacheFolder(mapping_t* mapping) `box64 --dynacache-clean` can be used from command line to purge obsolete DyaCache files */ -#define FILE_VERSION 5 +#define FILE_VERSION 6 #define HEADER_SIGN "DynaCache" typedef struct DynaCacheHeader_s { @@ -117,61 +117,72 @@ typedef struct DynaCacheHeader_s { char filename[]; } DynaCacheHeader_t; -#define DYNAREC_SETTINGS() \ - DS_GO(BOX64_DYNAREC_ALIGNED_ATOMICS, dynarec_aligned_atomics, 1) \ - DS_GO(BOX64_DYNAREC_BIGBLOCK, dynarec_bigblock, 2) \ - DS_GO(BOX64_DYNAREC_CALLRET, dynarec_callret, 2) \ - DS_GO(BOX64_DYNAREC_DF, dynarec_df, 1) \ - DS_GO(BOX64_DYNAREC_DIRTY, dynarec_dirty, 2) \ - DS_GO(BOX64_DYNAREC_DIV0, dynarec_div0, 1) \ - DS_GO(BOX64_DYNAREC_FASTNAN, dynarec_fastnan, 1) \ - DS_GO(BOX64_DYNAREC_FASTROUND, dynarec_fastround, 2) \ - DS_GO(BOX64_DYNAREC_NOHOTPAGE, dynarec_nohotpage, 1) \ - DS_GO(BOX64_DYNAREC_NATIVEFLAGS, dynarec_nativeflags, 1) \ - DS_GO(BOX64_DYNAREC_SAFEFLAGS, dynarec_safeflags, 2) \ - DS_GO(BOX64_DYNAREC_STRONGMEM, dynarec_strongmem, 3) \ - DS_GO(BOX64_DYNAREC_VOLATILE_METADATA, dynarec_volatile_metadata, 1)\ - DS_GO(BOX64_DYNAREC_WEAKBARRIER, dynarec_weakbarrier, 2) \ - DS_GO(BOX64_DYNAREC_X87DOUBLE, dynarec_x87double, 2) \ - DS_GO(BOX64_DYNAREC_NOARCH, dynarec_noarch, 2) \ - DS_GO(BOX64_DYNAREC_SEP, dynarec_sep, 2) \ - DS_GO(BOX64_AES, aes, 1) \ - DS_GO(BOX64_PCLMULQDQ, pclmulqdq, 1) \ - DS_GO(BOX64_SHAEXT, shaext, 1) \ - DS_GO(BOX64_SSE42, sse42, 1) \ - DS_GO(BOX64_AVX, avx, 2) \ - DS_GO(BOX64_X87_NO80BITS, x87_no80bits, 1) \ - DS_GO(BOX64_RDTSC_1GHZ, rdtsc_1ghz, 1) \ - DS_GO(BOX64_RDTSC_INV, rdtsc_inv, 1) \ - DS_GO(BOX64_SSE_FLUSHTO0, sse_flushto0, 1) \ - DS_GO(BOX64_CPUTYPE, cputype, 1) \ - DS_GO(BOX64_IGNOREINT3, ignoreint3, 1) \ - -#define DS_GO(A, B, C) uint64_t B:C; +// Helpers for conditional code emission based on dynacache bit width. +#define DC_0(...) +#define DC_1(...) __VA_ARGS__ +#define DC_2(...) __VA_ARGS__ +#define DC_3(...) __VA_ARGS__ +#define DC_CONCAT(A, B) A##B +#define DC_IF_WIDTH(WIDTH, CODE) DC_CONCAT(DC_, WIDTH)(CODE) + +// Generate dynarec_settings_t bit-fields from ENVSUPER(). +#define INTEGER(NAME, name, default, min, max, wine, dynacache) DC_IF_WIDTH(dynacache, uint64_t name : dynacache;) +#define INTEGER64(NAME, name, default, wine, dynacache) DC_IF_WIDTH(dynacache, uint64_t name : dynacache;) +#define BOOLEAN(NAME, name, default, wine, dynacache) DC_IF_WIDTH(dynacache, uint64_t name : dynacache;) +#define ADDRESS(NAME, name, wine, dynacache) DC_IF_WIDTH(dynacache, uint64_t name : dynacache;) +#define STRING(NAME, name, wine, dynacache) DC_IF_WIDTH(dynacache, uint64_t name : dynacache;) typedef union dynarec_settings_s { struct { - DYNAREC_SETTINGS() + ENVSUPER() }; uint64_t x; } dynarec_settings_t; -#undef DS_GO +#undef INTEGER +#undef INTEGER64 +#undef BOOLEAN +#undef ADDRESS +#undef STRING + uint64_t GetDynSetting(mapping_t* mapping) { dynarec_settings_t settings = {0}; - #define DS_GO(A, B, C) settings.B = (mapping->env && mapping->env->is_##B##_overridden)?mapping->env->B:box64env.B; - DYNAREC_SETTINGS() - #undef DS_GO +#define INTEGER(NAME, name, default, min, max, wine, dynacache) DC_IF_WIDTH(dynacache, settings.name = (mapping && mapping->env && mapping->env->is_##name##_overridden) ? mapping->env->name : box64env.name;) +#define INTEGER64(NAME, name, default, wine, dynacache) DC_IF_WIDTH(dynacache, settings.name = (mapping && mapping->env && mapping->env->is_##name##_overridden) ? mapping->env->name : box64env.name;) +#define BOOLEAN(NAME, name, default, wine, dynacache) DC_IF_WIDTH(dynacache, settings.name = (mapping && mapping->env && mapping->env->is_##name##_overridden) ? mapping->env->name : box64env.name;) +#define ADDRESS(NAME, name, wine, dynacache) DC_IF_WIDTH(dynacache, settings.name = (mapping && mapping->env && mapping->env->is_##name##_overridden) ? mapping->env->name : box64env.name;) +#define STRING(NAME, name, wine, dynacache) DC_IF_WIDTH(dynacache, settings.name = (mapping && mapping->env && mapping->env->is_##name##_overridden) ? mapping->env->name : box64env.name;) + ENVSUPER() +#undef INTEGER +#undef INTEGER64 +#undef BOOLEAN +#undef ADDRESS +#undef STRING return settings.x; } -void PrintDynfSettings(int level, uint64_t s) + +void PrintDynSettings(int level, uint64_t s) { dynarec_settings_t settings = {0}; settings.x = s; - #define DS_GO(A, B, C) if(settings.B) printf_log_prefix(0, level, "\t\t" #A "=%d\n", settings.B); - DYNAREC_SETTINGS() - #undef DS_GO +#define INTEGER(NAME, name, default, min, max, wine, dynacache) DC_IF_WIDTH(dynacache, if (settings.name != default) printf_log_prefix(0, level, "\t\t" #NAME "=%d\n", settings.name);) +#define INTEGER64(NAME, name, default, wine, dynacache) DC_IF_WIDTH(dynacache, if (settings.name != default) printf_log_prefix(0, level, "\t\t" #NAME "=%lld\n", settings.name);) +#define BOOLEAN(NAME, name, default, wine, dynacache) DC_IF_WIDTH(dynacache, if (settings.name != default) printf_log_prefix(0, level, "\t\t" #NAME "=%d\n", settings.name);) +#define ADDRESS(NAME, name, wine, dynacache) DC_IF_WIDTH(dynacache, if (settings.name != default) printf_log_prefix(0, level, "\t\t" #NAME "=%p\n", (void*)settings.name);) +#define STRING(NAME, name, wine, dynacache) DC_IF_WIDTH(dynacache, if (settings.name != default) printf_log_prefix(0, level, "\t\t" #NAME "=%s\n", settings.name);) + ENVSUPER() +#undef INTEGER +#undef INTEGER64 +#undef BOOLEAN +#undef ADDRESS +#undef STRING } -#undef DYNAREC_SETTINGS + +#undef DC_0 +#undef DC_1 +#undef DC_2 +#undef DC_3 +#undef DC_CONCAT +#undef DC_IF_WIDTH char* MmaplistName(const char* filename, uint64_t dynarec_settings, const char* fullname) { @@ -192,7 +203,7 @@ char* GetMmaplistName(mapping_t* mapping) const char* NicePrintSize(size_t sz) { static char buf[256]; - const char* units[] = {"", "kb", "Mb", "Gb"}; + const char* units[] = {"", "KiB", "MiB", "GiB"}; int idx = 0; size_t ratio = 0; while(idxdynarec_settings); + PrintDynSettings(LOG_NONE, file_header->dynarec_settings); size_t total_blocks = 0, total_free = 0, total_compressed = 0, total_uncompressed = 0; size_t total_code = file_header->codesize; for(int i=0; inblocks; ++i) { @@ -821,15 +833,22 @@ int ReadDynaCache(const char* folder, const char* name, mapping_t* mapping, int else total_uncompressed += blocks[i].block.size; } - printf_log_prefix(0, LOG_NONE, "\tHas %d blocks for a total of %s", file_header->nblocks, NicePrintSize(total_blocks)); - printf_log_prefix(0, LOG_NONE, " with %s still free", NicePrintSize(total_free)); - printf_log_prefix(0, LOG_NONE, " and %s non-canceled blocks (mapped at %p-%p, with %zu lock and %zu unaligned addresses)", NicePrintSize(total_code), (void*)file_header->map_addr, (void*)file_header->map_addr+file_header->map_len, file_header->nLockAddresses, file_header->nUnalignedAddresses); - if(total_compressed) { - printf_log_prefix(0, LOG_NONE, " with %s compressed blocks", NicePrintSize(total_compressed)); - if(total_uncompressed) - printf_log_prefix(0, LOG_NONE, " and %s uncompressed block", NicePrintSize(total_uncompressed)); + char buf[1024]; + int n = 0; + n += snprintf(buf+n, sizeof(buf)-n, "\tHas %d blocks for a total of %s", file_header->nblocks, NicePrintSize(total_blocks)); + n += snprintf(buf+n, sizeof(buf)-n, ", with %s still free", NicePrintSize(total_free)); + n += snprintf(buf+n, sizeof(buf)-n, " and %s non-canceled blocks\n", NicePrintSize(total_code)); + n += snprintf(buf+n, sizeof(buf)-n, "\tMapped at %p-%p, with %zu lock and %zu unaligned addresses", + (void*)file_header->map_addr, (void*)file_header->map_addr+file_header->map_len, + file_header->nLockAddresses, file_header->nUnalignedAddresses); + if(total_compressed && n>0 && n<(int)sizeof(buf)) { + n += snprintf(buf+n, sizeof(buf)-n, "\n\tCompression: %s compressed", NicePrintSize(total_compressed)); + if(total_uncompressed && n>0 && n<(int)sizeof(buf)) + n += snprintf(buf+n, sizeof(buf)-n, ", %s uncompressed", NicePrintSize(total_uncompressed)); } - printf_log_prefix(0, LOG_NONE, "\n"); + if(n>0 && n<(int)sizeof(buf)) + snprintf(buf+n, sizeof(buf)-n, "\n"); + printf_log_prefix(0, LOG_NONE, "%s", buf); } } else { // actually reading! @@ -863,6 +882,7 @@ int ReadDynaCache(const char* folder, const char* name, mapping_t* mapping, int addLockAddress(lockAddresses[i]+delta_map); for(size_t i=0; inUnalignedAddresses; ++i) add_unaligned_address(unalignedAddresses[i]+delta_map); + if (verbose) printf_log_prefix(0, LOG_NONE, "Cache loaded successfully\n"); dynarec_log(LOG_INFO, "Loaded DynaCache for %s, with %d blocks\n", mapping->fullname, file_header->nblocks); // try to update mtime for used cache file, so that it is less likely to be pruned utime(filename, NULL); diff --git a/src/tools/env.c b/src/tools/env.c index c11cf671f8..fd633da999 100644 --- a/src/tools/env.c +++ b/src/tools/env.c @@ -298,11 +298,11 @@ static void trimStringInplace(char* s) static void freeEnv(box64env_t* env) { -#define INTEGER(NAME, name, default, min, max, wine) -#define INTEGER64(NAME, name, default, wine) -#define BOOLEAN(NAME, name, default, wine) -#define ADDRESS(NAME, name, wine) -#define STRING(NAME, name, wine) box_free(env->name); +#define INTEGER(NAME, name, default, min, max, wine, dynacache) +#define INTEGER64(NAME, name, default, wine, dynacache) +#define BOOLEAN(NAME, name, default, wine, dynacache) +#define ADDRESS(NAME, name, wine, dynacache) +#define STRING(NAME, name, wine, dynacache) box_free(env->name); ENVSUPER() #undef INTEGER #undef INTEGER64 @@ -453,40 +453,40 @@ static void initializeEnvFile(const char* filename, int priority) #define VALID(a) 1 #endif -#define INTEGER(NAME, name, default, min, max, wine) \ - else if (!strcmp(key, #NAME) && VALID(wine)) \ - { \ - int v = strtol(val, &p, 0); \ - if (p != val && v >= min && v <= max) { \ - current_env.is_##name##_overridden = 1; \ - current_env.is_any_overridden = 1; \ - current_env.name = v; \ - } \ +#define INTEGER(NAME, name, default, min, max, wine, dynacache) \ + else if (!strcmp(key, #NAME) && VALID(wine)) \ + { \ + int v = strtol(val, &p, 0); \ + if (p != val && v >= min && v <= max) { \ + current_env.is_##name##_overridden = 1; \ + current_env.is_any_overridden = 1; \ + current_env.name = v; \ + } \ } -#define INTEGER64(NAME, name, default, wine) \ - else if (!strcmp(key, #NAME) && VALID(wine)) \ - { \ - int64_t v = strtoll(val, &p, 0); \ - if (p != val) { \ - current_env.is_##name##_overridden = 1; \ - current_env.is_any_overridden = 1; \ - current_env.name = v; \ - } \ +#define INTEGER64(NAME, name, default, wine, dynacache) \ + else if (!strcmp(key, #NAME) && VALID(wine)) \ + { \ + int64_t v = strtoll(val, &p, 0); \ + if (p != val) { \ + current_env.is_##name##_overridden = 1; \ + current_env.is_any_overridden = 1; \ + current_env.name = v; \ + } \ } -#define BOOLEAN(NAME, name, default, wine) \ - else if (!strcmp(key, #NAME) && VALID(wine)) \ - { \ - if (strcmp(val, "0")) { \ - current_env.is_##name##_overridden = 1; \ - current_env.is_any_overridden = 1; \ - current_env.name = 1; \ - } else { \ - current_env.is_##name##_overridden = 1; \ - current_env.is_any_overridden = 1; \ - current_env.name = 0; \ - } \ +#define BOOLEAN(NAME, name, default, wine, dynacache) \ + else if (!strcmp(key, #NAME) && VALID(wine)) \ + { \ + if (strcmp(val, "0")) { \ + current_env.is_##name##_overridden = 1; \ + current_env.is_any_overridden = 1; \ + current_env.name = 1; \ + } else { \ + current_env.is_##name##_overridden = 1; \ + current_env.is_any_overridden = 1; \ + current_env.name = 0; \ + } \ } -#define ADDRESS(NAME, name, wine) \ +#define ADDRESS(NAME, name, wine, dynacache) \ else if (!strcmp(key, #NAME) && VALID(wine)) \ { \ uintptr_t v = (uintptr_t)strtoll(val, &p, 0); \ @@ -496,7 +496,7 @@ static void initializeEnvFile(const char* filename, int priority) current_env.name = v; \ } \ } -#define STRING(NAME, name, wine) \ +#define STRING(NAME, name, wine, dynacache) \ else if (!strcmp(key, #NAME) && VALID(wine)) \ { \ current_env.is_##name##_overridden = 1; \ @@ -567,31 +567,31 @@ void InitializeEnvFiles() static void internalApplyEnvFileEntry(const char* entryname, const box64env_t* env) { -#define INTEGER(NAME, name, default, min, max, wine) \ - if (env->is_##name##_overridden) { \ - box64env.name = env->name; \ - box64env.is_##name##_overridden = 1; \ - box64env.is_any_overridden = 1; \ +#define INTEGER(NAME, name, default, min, max, wine, dynacache) \ + if (env->is_##name##_overridden) { \ + box64env.name = env->name; \ + box64env.is_##name##_overridden = 1; \ + box64env.is_any_overridden = 1; \ } -#define INTEGER64(NAME, name, default, wine) \ - if (env->is_##name##_overridden) { \ - box64env.name = env->name; \ - box64env.is_##name##_overridden = 1; \ - box64env.is_any_overridden = 1; \ +#define INTEGER64(NAME, name, default, wine, dynacache) \ + if (env->is_##name##_overridden) { \ + box64env.name = env->name; \ + box64env.is_##name##_overridden = 1; \ + box64env.is_any_overridden = 1; \ } -#define BOOLEAN(NAME, name, default, wine) \ - if (env->is_##name##_overridden) { \ - box64env.name = env->name; \ - box64env.is_##name##_overridden = 1; \ - box64env.is_any_overridden = 1; \ +#define BOOLEAN(NAME, name, default, wine, dynacache) \ + if (env->is_##name##_overridden) { \ + box64env.name = env->name; \ + box64env.is_##name##_overridden = 1; \ + box64env.is_any_overridden = 1; \ } -#define ADDRESS(NAME, name, wine) \ +#define ADDRESS(NAME, name, wine, dynacache) \ if (env->is_##name##_overridden) { \ box64env.name = env->name; \ box64env.is_##name##_overridden = 1; \ box64env.is_any_overridden = 1; \ } -#define STRING(NAME, name, wine) \ +#define STRING(NAME, name, wine, dynacache) \ if (env->is_##name##_overridden) { \ box64env.name = env->name; \ box64env.is_##name##_overridden = 1; \ @@ -641,11 +641,11 @@ int ApplyEnvFileEntry(const char* entryname) void LoadEnvVariables() { #ifdef _WIN32 -#define INTEGER(NAME, name, default, min, max, wine) box64env.name = wine ? default : 0; -#define INTEGER64(NAME, name, default, wine) box64env.name = wine ? default : 0; -#define BOOLEAN(NAME, name, default, wine) box64env.name = wine ? default : 0; -#define ADDRESS(NAME, name, wine) box64env.name = 0; -#define STRING(NAME, name, wine) box64env.name = NULL; +#define INTEGER(NAME, name, default, min, max, wine, dynacache) box64env.name = wine ? default : 0; +#define INTEGER64(NAME, name, default, wine, dynacache) box64env.name = wine ? default : 0; +#define BOOLEAN(NAME, name, default, wine, dynacache) box64env.name = wine ? default : 0; +#define ADDRESS(NAME, name, wine, dynacache) box64env.name = 0; +#define STRING(NAME, name, wine, dynacache) box64env.name = NULL; ENVSUPER() #undef INTEGER #undef INTEGER64 @@ -653,11 +653,11 @@ void LoadEnvVariables() #undef ADDRESS #undef STRING #else -#define INTEGER(NAME, name, default, min, max, wine) box64env.name = default; -#define INTEGER64(NAME, name, default, wine) box64env.name = default; -#define BOOLEAN(NAME, name, default, wine) box64env.name = default; -#define ADDRESS(NAME, name, wine) box64env.name = 0; -#define STRING(NAME, name, wine) box64env.name = NULL; +#define INTEGER(NAME, name, default, min, max, wine, dynacache) box64env.name = default; +#define INTEGER64(NAME, name, default, wine, dynacache) box64env.name = default; +#define BOOLEAN(NAME, name, default, wine, dynacache) box64env.name = default; +#define ADDRESS(NAME, name, wine, dynacache) box64env.name = 0; +#define STRING(NAME, name, wine, dynacache) box64env.name = NULL; ENVSUPER() #undef INTEGER #undef INTEGER64 @@ -674,32 +674,32 @@ void LoadEnvVariables() #define GETENV(name, wine) GetEnv(name) #endif -#define INTEGER(NAME, name, default, min, max, wine) \ - p = GETENV(#NAME, wine); \ - if (p) { \ - box64env.name = atoi(p); \ - if (box64env.name < min || box64env.name > max) { \ - box64env.name = default; \ - } else { \ - box64env.is_##name##_overridden = 1; \ - box64env.is_any_overridden = 1; \ - } \ +#define INTEGER(NAME, name, default, min, max, wine, dynacache) \ + p = GETENV(#NAME, wine); \ + if (p) { \ + box64env.name = atoi(p); \ + if (box64env.name < min || box64env.name > max) { \ + box64env.name = default; \ + } else { \ + box64env.is_##name##_overridden = 1; \ + box64env.is_any_overridden = 1; \ + } \ } -#define INTEGER64(NAME, name, default, wine) \ - p = GETENV(#NAME, wine); \ - if (p) { \ - box64env.name = atoll(p); \ - box64env.is_##name##_overridden = 1; \ - box64env.is_any_overridden = 1; \ +#define INTEGER64(NAME, name, default, wine, dynacache) \ + p = GETENV(#NAME, wine); \ + if (p) { \ + box64env.name = atoll(p); \ + box64env.is_##name##_overridden = 1; \ + box64env.is_any_overridden = 1; \ } -#define BOOLEAN(NAME, name, default, wine) \ - p = GETENV(#NAME, wine); \ - if (p) { \ - box64env.name = p[0] != '0'; \ - box64env.is_##name##_overridden = 1; \ - box64env.is_any_overridden = 1; \ +#define BOOLEAN(NAME, name, default, wine, dynacache) \ + p = GETENV(#NAME, wine); \ + if (p) { \ + box64env.name = p[0] != '0'; \ + box64env.is_##name##_overridden = 1; \ + box64env.is_any_overridden = 1; \ } -#define ADDRESS(NAME, name, wine) \ +#define ADDRESS(NAME, name, wine, dynacache) \ p = GETENV(#NAME, wine); \ if (p) { \ char* endptr; \ @@ -707,7 +707,7 @@ void LoadEnvVariables() box64env.is_##name##_overridden = 1; \ box64env.is_any_overridden = 1; \ } -#define STRING(NAME, name, wine) \ +#define STRING(NAME, name, wine, dynacache) \ p = GETENV(#NAME, wine); \ if (p && strcasecmp(#NAME, "BOX64_ARCH")) { \ box64env.name = strdup(p); \ @@ -726,20 +726,20 @@ void LoadEnvVariables() void PrintEnvVariables(box64env_t* env, int level) { if (env->is_any_overridden) printf_log(level, "BOX64ENV: Variables overridden:\n"); -#define INTEGER(NAME, name, default, min, max, wine) \ - if (env->is_##name##_overridden) \ +#define INTEGER(NAME, name, default, min, max, wine, dynacache) \ + if (env->is_##name##_overridden) \ printf_log_prefix(0, level, "\t%s=%d\n", #NAME, env->name); -#define INTEGER64(NAME, name, default, wine) \ - if (env->is_##name##_overridden) \ +#define INTEGER64(NAME, name, default, wine, dynacache) \ + if (env->is_##name##_overridden) \ printf_log_prefix(0, level, "\t%s=%lld\n", #NAME, env->name); -#define BOOLEAN(NAME, name, default, wine) \ - if (env->is_##name##_overridden) \ +#define BOOLEAN(NAME, name, default, wine, dynacache) \ + if (env->is_##name##_overridden) \ printf_log_prefix(0, level, "\t%s=%d\n", #NAME, env->name); -#define ADDRESS(NAME, name, wine) \ - if (env->is_##name##_overridden) \ +#define ADDRESS(NAME, name, wine, dynacache) \ + if (env->is_##name##_overridden) \ printf_log_prefix(0, level, "\t%s=%p\n", #NAME, (void*)env->name); -#define STRING(NAME, name, wine) \ - if (env->is_##name##_overridden) \ +#define STRING(NAME, name, wine, dynacache) \ + if (env->is_##name##_overridden) \ printf_log_prefix(0, level, "\t%s=%s\n", #NAME, env->name); ENVSUPER() #undef INTEGER