diff options
| -rwxr-xr-x | src/main.c | 20 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibc.c | 22 |
2 files changed, 34 insertions, 8 deletions
diff --git a/src/main.c b/src/main.c index 14b1d3b5..eed72012 100755 --- a/src/main.c +++ b/src/main.c @@ -180,6 +180,7 @@ EXPORTDYN void LoadLogEnv() { ftrace = stdout; + box64_nobanner = isatty(fileno(stdout))?0:1; const char *p = getenv("BOX64_NOBANNER"); if(p) { if(strlen(p)==1) { @@ -187,6 +188,9 @@ void LoadLogEnv() box64_nobanner = p[0]-'0'; } } + // grab BOX64_TRACE_FILE envvar, and change %pid to actual pid is present in the name + openFTrace(); + box64_log = isatty(fileno(ftrace))?LOG_INFO:LOG_NONE; //default LOG value different if stdout is redirected or not p = getenv("BOX64_LOG"); if(p) { if(strlen(p)==1) { @@ -253,7 +257,7 @@ void LoadLogEnv() if(p[0]>='0' && p[0]<='1') box64_dynarec = p[0]-'0'; } - printf_log(LOG_INFO, "Dynarec is %s\n", box64_dynarec?"On":"Off"); + printf_log(LOG_INFO, "Dynarec is %s\n", box64_dynarec?"on":"dff"); } p = getenv("BOX64_DYNAREC_FORCED"); if(p) { @@ -262,7 +266,7 @@ void LoadLogEnv() box64_dynarec_forced = p[0]-'0'; } if(box64_dynarec_forced) - printf_log(LOG_INFO, "Dynarec is Forced on all addresses\n"); + printf_log(LOG_INFO, "Dynarec is forced on all addresses\n"); } p = getenv("BOX64_DYNAREC_BIGBLOCK"); if(p) { @@ -280,7 +284,7 @@ void LoadLogEnv() box64_dynarec_strongmem = p[0]-'0'; } if(box64_dynarec_strongmem) - printf_log(LOG_INFO, "Dynarec will try to emulate a strong memory model%s\n", (box64_dynarec_strongmem==1)?" with limited performace loss":""); + printf_log(LOG_INFO, "Dynarec will try to emulate a strong memory model%s\n", (box64_dynarec_strongmem==1)?" with limited performance loss":""); } p = getenv("BOX64_NODYNAREC"); if(p) { @@ -289,7 +293,7 @@ void LoadLogEnv() if(sscanf(p, "0x%lX-0x%lX", &box64_nodynarec_start, &box64_nodynarec_end)!=2) sscanf(p, "%lx-%lx", &box64_nodynarec_start, &box64_nodynarec_end); } - printf_log(LOG_INFO, "No Dynablock creation that start in %p - %p range\n", (void*)box64_nodynarec_start, (void*)box64_nodynarec_end); + printf_log(LOG_INFO, "No dynablock creation that start in the range %p - %p\n", (void*)box64_nodynarec_start, (void*)box64_nodynarec_end); } } @@ -334,8 +338,6 @@ void LoadLogEnv() } #endif #endif - // grab BOX64_TRACE_FILE envvar, and change %pid to actual pid is present in the name - openFTrace(); // Other BOX64 env. var. p = getenv("BOX64_DLSYM_ERROR"); if(p) { @@ -789,6 +791,12 @@ int main(int argc, const char **argv, const char **env) { } if(argc>1 && !strcmp(argv[1], "/usr/bin/gdb") && getenv("BOX64_TRACE_FILE")) exit(0); + // uname -m is redirected to box64 -m + if(argc==2 && (!strcmp(argv[1], "-m") || !strcmp(argv[1], "-p") || !strcmp(argv[1], "-i"))) + { + printf("x86_64\n"); + exit(0); + } // init random seed srandom(time(NULL)); diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index f5169193..a84e75aa 100755 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -1645,7 +1645,7 @@ EXPORT int32_t my_execve(x64emu_t* emu, const char* path, char* const argv[], ch int self = isProcSelf(path, "exe"); int x64 = FileIsX64ELF(path); int x86 = my_context->box86path?FileIsX86ELF(path):0; - printf_log(LOG_DEBUG, "execv(\"%s\", %p) is x64=%d x86=%d\n", path, argv, x64, x86); + printf_log(LOG_DEBUG, "execve(\"%s\", %p, %p) is x64=%d x86=%d\n", path, argv, envp, x64, x86); #if 1 if (x64 || x86 || self) { int skip_first = 0; @@ -1658,12 +1658,21 @@ EXPORT int32_t my_execve(x64emu_t* emu, const char* path, char* const argv[], ch newargv[0] = x86?emu->context->box86path:emu->context->box64path; memcpy(newargv+1, argv+skip_first, sizeof(char*)*(n+1)); if(self) newargv[1] = emu->context->fullpath; - printf_log(LOG_DEBUG, " => execv(\"%s\", %p [\"%s\", \"%s\", \"%s\"...:%d])\n", newargv[0], newargv, newargv[0], n?newargv[1]:"", (n>1)?newargv[2]:"",n); + printf_log(LOG_DEBUG, " => execve(\"%s\", %p [\"%s\", \"%s\", \"%s\"...:%d], %p)\n", newargv[0], newargv, newargv[0], n?newargv[1]:"", (n>1)?newargv[2]:"",n, envp); int ret = execve(newargv[0], (char* const*)newargv, envp); free(newargv); return ret; } #endif + if(!strcmp(path + strlen(path) - strlen("/uname"), "/uname") + && argv[1] && (!strcmp(argv[1], "-m") || !strcmp(argv[1], "-p") || !strcmp(argv[1], "-i")) + && !argv[2]) { + // uname -m is redirected to box64 -m + path = my_context->box64path; + char *argv2[3] = { my_context->box64path, argv[1], NULL }; + return execve(path, argv2, envp); + } + return execve(path, argv, envp); } @@ -1692,6 +1701,15 @@ EXPORT int32_t my_execvp(x64emu_t* emu, const char* path, char* const argv[]) free(newargv); return ret; } + if((!strcmp(path + strlen(path) - strlen("/uname"), "/uname") || !strcmp(path, "uname")) + && argv[1] && (!strcmp(argv[1], "-m") || !strcmp(argv[1], "-p") || !strcmp(argv[1], "-i")) + && !argv[2]) { + // uname -m is redirected to box64 -m + path = my_context->box64path; + char *argv2[3] = { my_context->box64path, argv[1], NULL }; + return execvp(path, argv2); + } + // fullpath is gone, so the search will only be on PATH, not on BOX64_PATH (is that an issue?) return execvp(path, argv); } |