diff options
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/box64context.h | 2 | ||||
| -rw-r--r-- | src/include/debug.h | 99 | ||||
| -rw-r--r-- | src/include/env.h | 200 | ||||
| -rw-r--r-- | src/include/rcfile.h | 9 |
4 files changed, 217 insertions, 93 deletions
diff --git a/src/include/box64context.h b/src/include/box64context.h index 6c14e219..d2c1d23a 100644 --- a/src/include/box64context.h +++ b/src/include/box64context.h @@ -259,7 +259,7 @@ void FreeBox64Context(box64context_t** context); // Cycle log handling void freeCycleLog(box64context_t* ctx); void initCycleLog(box64context_t* context); -void print_cycle_log(int loglevel); +void print_rolling_log(int loglevel); // return the index of the added header int AddElfHeader(box64context_t* ctx, elfheader_t* head); diff --git a/src/include/debug.h b/src/include/debug.h index 48843392..36a2e14a 100644 --- a/src/include/debug.h +++ b/src/include/debug.h @@ -1,52 +1,16 @@ #ifndef __DEBUG_H_ #define __DEBUG_H_ #include <stdint.h> +#include <env.h> typedef struct box64context_s box64context_t; -extern int box64_log; // log level -extern int box64_dump; // dump elf or not -extern int box64_dynarec_log; -extern int box64_dynarec; +extern box64env_t box64env; + extern uintptr_t box64_pagesize; -extern uintptr_t box64_load_addr; -extern int box64_dynarec_test; -extern int box64_maxcpu; -extern int box64_mmap32; -extern int box64_ignoreint3; extern int box64_rdtsc; -extern int box64_rdtsc_1ghz; extern uint8_t box64_rdtsc_shift; extern int box64_is32bits; -extern int box64_x11sync; -extern int box64_dynarec_gdbjit; -extern int box64_cputype; #ifdef DYNAREC -extern int box64_dynarec_dump; -extern int box64_dynarec_trace; -extern int box64_dynarec_forced; -extern uintptr_t box64_nodynarec_start, box64_nodynarec_end; -extern uintptr_t box64_dynarec_test_start, box64_dynarec_test_end; -extern int box64_dynarec_bigblock; -extern int box64_dynarec_forward; -extern int box64_dynarec_strongmem; -extern int box64_dynarec_weakbarrier; -extern int box64_dynarec_pause; -extern int box64_dynarec_fastnan; -extern int box64_dynarec_fastround; -extern int box64_dynarec_x87double; -extern int box64_dynarec_div0; -extern int box64_dynarec_safeflags; -extern int box64_dynarec_callret; -extern int box64_dynarec_bleeding_edge; -extern int box64_dynarec_tbb; -extern int box64_dynarec_wait; -extern int box64_dynarec_missing; -extern int box64_dynarec_aligned_atomics; -extern int box64_dynarec_nativeflags; -extern int box64_dynarec_df; -extern int box64_dynarec_perf_map; -extern int box64_dynarec_perf_map_fd; -extern int box64_dynarec_dirty; #ifdef ARM64 extern int arm64_asimd; extern int arm64_aes; @@ -84,58 +48,18 @@ extern int la64_lamcas; extern int la64_scq; #endif #endif -extern int box64_libcef; -extern int box64_jvm; -extern int box64_unityplayer; -extern int box64_sdl2_jguid; -extern int dlsym_error; // log dlsym error -extern int cycle_log; // if using rolling logs #ifdef HAVE_TRACE -extern int trace_xmm; // include XMM reg in trace? -extern int trace_emm; // include EMM reg in trace? -extern int trace_regsdiff; // colorize standard registers on changes extern uintptr_t trace_start, trace_end; extern char* trace_func; -extern char* trace_init; -extern char* box64_trace; -extern uint64_t start_cnt; #endif -extern int box64_nosandbox; -extern int box64_inprocessgpu; -extern int box64_cefdisablegpu; -extern int box64_cefdisablegpucompositor; -extern int box64_maxcpu_immutable; -extern int box64_malloc_hack; -extern int box64_dummy_crashhandler; -extern int box64_sse_flushto0; -extern int box64_x87_no80bits; -extern int box64_sync_rounding; -extern int box64_shaext; -extern int box64_sse42; -extern int box64_avx; -extern int box64_avx2; -extern int allow_missing_libs; extern int box64_mapclean; -extern int box64_prefer_wrapped; -extern int box64_prefer_emulated; -extern int box64_wrap_egl; extern int box64_steam; extern int box64_steamcmd; extern int box64_wine; extern int box64_musl; -extern int box64_nopulse; // disabling the use of wrapped pulseaudio -extern int box64_nogtk; // disabling the use of wrapped gtk -extern int box64_novulkan; // disabling the use of wrapped vulkan -extern int box64_showsegv; // show sigv, even if a signal handler is present -extern int box64_showbt; // show a backtrace if a signal is caught extern int box64_isglibc234; // is the program linked with glibc 2.34+ -extern int box64_futex_waitv; -extern int box64_x11threads; -extern int box64_x11glx; -extern char* box64_libGL; extern uintptr_t fmod_smc_start, fmod_smc_end; // to handle libfmod (from Unreal) SMC (self modifying code) extern uint32_t default_gs, default_fs; -extern int jit_gdb; // launch gdb when a segfault is trapped extern int box64_tcmalloc_minimal; // when using tcmalloc_minimal #define LOG_NONE 0 #define LOG_INFO 1 @@ -145,13 +69,22 @@ extern int box64_tcmalloc_minimal; // when using tcmalloc_minimal void printf_ftrace(const char* fmt, ...); -#define printf_log(L, ...) do {if((L)<=box64_log) {printf_ftrace(__VA_ARGS__);}} while(0) +#define printf_log(L, ...) \ + do { \ + if ((L) <= BOX64ENV(log)) { printf_ftrace(__VA_ARGS__); } \ + } while (0) -#define printf_dump(L, ...) do {if(box64_dump || ((L)<=box64_log)) {printf_ftrace(__VA_ARGS__);}} while(0) +#define printf_dump(L, ...) \ + do { \ + if (BOX64ENV(dump) || ((L) <= BOX64ENV(log))) { printf_ftrace(__VA_ARGS__); } \ + } while (0) -#define printf_dlsym(L, ...) do {if(dlsym_error || ((L)<=box64_log)) {printf_ftrace(__VA_ARGS__);}} while(0) +#define printf_dlsym(L, ...) \ + do { \ + if (BOX64ENV(dlsym_error) || ((L) <= BOX64ENV(log))) { printf_ftrace(__VA_ARGS__); } \ + } while (0) -#define dynarec_log(L, ...) do {if((L)<=box64_dynarec_log) {printf_ftrace(__VA_ARGS__);}} while(0) +#define dynarec_log(L, ...) do {if((L)<=BOX64ENV(dynarec_log)) {printf_ftrace(__VA_ARGS__);}} while(0) #define EXPORT __attribute__((visibility("default"))) #ifdef BUILD_DYNAMIC diff --git a/src/include/env.h b/src/include/env.h new file mode 100644 index 00000000..d5385d8a --- /dev/null +++ b/src/include/env.h @@ -0,0 +1,200 @@ +#ifndef __ENV_H +#define __ENV_H + +#include <stdint.h> +#include <unistd.h> + +#define BOX64ENV(name) (box64env.name) +#define SET_BOX64ENV(name, value) { box64env.name = (value); box64env.is_##name##_overridden = 1; } + +/* + INTEGER(NAME, name, default, min, max) + INTEGER64(NAME, name, default) + BOOLEAN(NAME, name, default) + ADDRESS(NAME, name) + STRING(NAME, name) +*/ + +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) \ + BOOLEAN(BOX64_X87_NO80BITS, x87_no80bits, 0) + +#ifdef ARM64 +#define ENVSUPER2() \ + INTEGER(BOX64_AVX, avx, 2, 0, 2) +#else +#define ENVSUPER2() \ + INTEGER(BOX64_AVX, avx, 0, 0, 2) +#endif + +#ifdef DYNAREC +#define ENVSUPER3() \ + BOOLEAN(BOX64_DYNAREC, dynarec, 1) +#else +#define ENVSUPER3() \ + BOOLEAN(BOX64_DYNAREC, dynarec, 0) +#endif + +#ifdef BAD_SIGNAL +#define ENVSUPER4() \ + BOOLEAN(BOX64_FUTEX_WAITV, futex_waitv, 0) +#else +#define ENVSUPER4() \ + BOOLEAN(BOX64_FUTEX_WAITV, futex_waitv, 1) +#endif + +#if defined(SD845) || defined(SD888) || defined(SD8G2) || defined(TEGRAX1) +#define ENVSUPER5() \ + BOOLEAN(BOX64_MMAP32, mmap32, 1) +#else +#define ENVSUPER5() \ + BOOLEAN(BOX64_MMAP32, mmap32, 0) +#endif + +#define ENVSUPER() \ + ENVSUPER1() \ + ENVSUPER2() \ + ENVSUPER3() \ + ENVSUPER4() \ + ENVSUPER5() + +typedef struct box64env_s { +#define INTEGER(NAME, name, default, min, max) int name; +#define INTEGER64(NAME, name, default) int64_t name; +#define BOOLEAN(NAME, name, default) int name; +#define ADDRESS(NAME, name) uintptr_t name; +#define STRING(NAME, name) char* name; + ENVSUPER() +#undef INTEGER +#undef INTEGER64 +#undef BOOLEAN +#undef ADDRESS +#undef STRING + +#define INTEGER(NAME, name, default, min, max) uint64_t is_##name##_overridden : 1; +#define INTEGER64(NAME, name, default) uint64_t is_##name##_overridden : 1; +#define BOOLEAN(NAME, name, default) uint64_t is_##name##_overridden : 1; +#define ADDRESS(NAME, name) uint64_t is_##name##_overridden : 1; +#define STRING(NAME, name) uint64_t is_##name##_overridden : 1; + ENVSUPER() +#undef INTEGER +#undef INTEGER64 +#undef BOOLEAN +#undef ADDRESS +#undef STRING + + /******** Custom ones ********/ + int maxcpu; + int dynarec_test; + int avx2; + uintptr_t dynarec_test_start; + uintptr_t dynarec_test_end; + uintptr_t nodynarec_start; + uintptr_t nodynarec_end; + int dynarec_perf_map_fd; + + uint64_t is_dynarec_perf_map_fd_overridden : 1; +} box64env_t; + +void InitializeEnvFiles(); +void ApplyEnvFileEntry(const char* name); +const char* GetLastApplyEntryName(); +void InitializeEnv(); +void LoadEnvVariables(); +void PrintEnvVariables(); + +#endif // __ENV_H diff --git a/src/include/rcfile.h b/src/include/rcfile.h deleted file mode 100644 index 3c8218cb..00000000 --- a/src/include/rcfile.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __RCFILE_H__ -#define __RCFILE_H__ - -void LoadRCFile(const char* filename); -void DeleteParams(void); -void ApplyParams(const char* name); -const char* GetLastApplyName(); - -#endif //__RCFILE_H__ \ No newline at end of file |