about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xsrc/main.c20
-rwxr-xr-xsrc/wrapped/wrappedlibc.c22
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);
 }