about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-03-11 16:30:35 +0100
committerptitSeb <sebastien.chev@gmail.com>2025-03-11 16:30:35 +0100
commit470ff6e652e07c3daef2666f2730c1c283bb9497 (patch)
tree39102aba2a56b12c7ce1686601f8634997b35309 /src
parent3ef6d28108874c8fab33aa9156a6cd7d4d7880db (diff)
downloadbox64-470ff6e652e07c3daef2666f2730c1c283bb9497.tar.gz
box64-470ff6e652e07c3daef2666f2730c1c283bb9497.zip
[TRACE] Small work on trace
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/dynarec.c9
-rw-r--r--src/emu/x64syscall.c17
2 files changed, 16 insertions, 10 deletions
diff --git a/src/dynarec/dynarec.c b/src/dynarec/dynarec.c
index ca0bd4f2..44fb4247 100644
--- a/src/dynarec/dynarec.c
+++ b/src/dynarec/dynarec.c
@@ -32,19 +32,20 @@ void* LinkNext(x64emu_t* emu, uintptr_t addr, void* x2, uintptr_t* x3)
 {
     int is32bits = (R_CS == 0x23);
     #ifdef HAVE_TRACE
+    uintptr_t new_addr = (uintptr_t)getAlternate((void*)addr);
     if(!addr) {
         dynablock_t* db = FindDynablockFromNativeAddress(x2-4);
         printf_log(LOG_INFO, "Warning, jumping to NULL address from %p (db=%p, x64addr=%p/%s)\n", x2-4, db, db?(void*)getX64Address(db, (uintptr_t)x2-4):NULL, db?getAddrFunctionName(getX64Address(db, (uintptr_t)x2-4)):"(nil)");
-    } else if(addr<0x10000) {
+    } else if(new_addr<0x10000) {
         dynablock_t* db = FindDynablockFromNativeAddress(x2-4);
-        printf_log(LOG_INFO, "Warning, jumping to low address %p from %p (db=%p, x64addr=%p/%s)\n", (void*)addr, x2-4, db, db?(void*)getX64Address(db, (uintptr_t)x2-4):NULL, db?getAddrFunctionName(getX64Address(db, (uintptr_t)x2-4)):"(nil)");
+        printf_log(LOG_INFO, "Warning, jumping to low address %p->%p from %p (db=%p, x64addr=%p/%s)\n", (void*)new_addr, (void*)addr, x2-4, db, db?(void*)getX64Address(db, (uintptr_t)x2-4):NULL, db?getAddrFunctionName(getX64Address(db, (uintptr_t)x2-4)):"(nil)");
     #ifdef BOX32
     } else if(emu->segs[_CS]==0x23 && addr>0x100000000LL) {
         dynablock_t* db = FindDynablockFromNativeAddress(x2-4);
         printf_log(LOG_INFO, "Warning, jumping to high address %p from %p (db=%p, x64addr=%p/%s)\n", (void*)addr, x2-4, db, db?(void*)getX64Address(db, (uintptr_t)x2-4):NULL, db?getAddrFunctionName(getX64Address(db, (uintptr_t)x2-4)):"(nil)");
-    } else if(!memExist(addr)) {
+    } else if(!memExist(new_addr)) {
         dynablock_t* db = FindDynablockFromNativeAddress(x2-4);
-        printf_log(LOG_INFO, "Warning, jumping to an unmapped address %p from %p (db=%p, x64addr=%p/%s)\n", (void*)addr, x2-4, db, db?(void*)getX64Address(db, (uintptr_t)x2-4):NULL, db?getAddrFunctionName(getX64Address(db, (uintptr_t)x2-4)):"(nil)");
+        printf_log(LOG_INFO, "Warning, jumping to an unmapped address %p->%p from %p (db=%p, x64addr=%p/%s)\n", (void*)new_addr, (void*)addr, x2-4, db, db?(void*)getX64Address(db, (uintptr_t)x2-4):NULL, db?getAddrFunctionName(getX64Address(db, (uintptr_t)x2-4)):"(nil)");
     #endif
     }
     #endif
diff --git a/src/emu/x64syscall.c b/src/emu/x64syscall.c
index 7cb4f934..a4c77aa1 100644
--- a/src/emu/x64syscall.c
+++ b/src/emu/x64syscall.c
@@ -450,7 +450,7 @@ void EXPORT x64Syscall(x64emu_t *emu)
     int log = 0;
     char t_buff[256] = "\0";
     char t_buffret[128] = "\0";
-    char buff2[64] = "\0";
+    char buff2[128] = "\0";
     char* buff = NULL;
     char* buffret = NULL;
     if(BOX64ENV(log) >= LOG_DEBUG || BOX64ENV(rolling_log)) {
@@ -470,8 +470,8 @@ void EXPORT x64Syscall(x64emu_t *emu)
         switch(syscallwrap[s].nbpars) {
             case 0: S_RAX = syscall(sc); break;
             case 1: S_RAX = syscall(sc, R_RDI); break;
-            case 2: if(s==33) {if(log) snprintf(buff2, 63, " [sys_access(\"%s\", %ld)]", (char*)R_RDI, R_RSI);}; S_RAX = syscall(sc, R_RDI, R_RSI); break;
-            case 3: if(s==42) {if(log) snprintf(buff2, 63, " [sys_connect(%d, %p[type=%d], %d)]", R_EDI, (void*)R_RSI, *(unsigned short*)R_RSI, R_EDX);}; if(s==258) {if(log) snprintf(buff2, 63, " [sys_mkdirat(%d, %s, 0x%x]", R_EDI, (char*)R_RSI, R_EDX);}; S_RAX = syscall(sc, R_RDI, R_RSI, R_RDX); break;
+            case 2: if(s==33) {if(log) snprintf(buff2, 127, " [sys_access(\"%s\", %ld)]", (char*)R_RDI, R_RSI);}; S_RAX = syscall(sc, R_RDI, R_RSI); break;
+            case 3: if(s==42) {if(log) snprintf(buff2, 127, " [sys_connect(%d, %p[type=%d], %d)]", R_EDI, (void*)R_RSI, *(unsigned short*)R_RSI, R_EDX);}; if(s==258) {if(log) snprintf(buff2, 127, " [sys_mkdirat(%d, %s, 0x%x]", R_EDI, (char*)R_RSI, R_EDX);}; S_RAX = syscall(sc, R_RDI, R_RSI, R_RDX); break;
             case 4: S_RAX = syscall(sc, R_RDI, R_RSI, R_RDX, R_R10); break;
             case 5: S_RAX = syscall(sc, R_RDI, R_RSI, R_RDX, R_R10, R_R8); break;
             case 6: S_RAX = syscall(sc, R_RDI, R_RSI, R_RDX, R_R10, R_R8, R_R9); break;
@@ -498,7 +498,7 @@ void EXPORT x64Syscall(x64emu_t *emu)
                 S_RAX = -errno;
             break;
         case 2: // sys_open
-            if(s==5) {if (log) snprintf(buff2, 63, " [sys_open(\"%s\", %d, %d)]", (char*)R_RDI, of_convert(R_ESI), R_EDX);};
+            if (log) snprintf(buff2, 127, "[sys_open \"%s\", 0x%x]", (char*)R_RDI, of_convert(R_ESI));
             //S_RAX = open((void*)R_EDI, of_convert(R_ESI), R_EDX);
             S_RAX = my_open(emu, (void*)R_RDI, of_convert(R_ESI), R_EDX);
             if(S_RAX==-1)
@@ -782,6 +782,7 @@ void EXPORT x64Syscall(x64emu_t *emu)
         #endif
         #ifndef NOALIGN
         case 257:
+            if (log) snprintf(buff2, 127, "[sys_openat %d, \"%s\", 0x%x]", S_EDI, (char*)R_RSI, of_convert(R_EDX));
             S_RAX = syscall(__NR_openat, S_EDI, (void*)R_RSI, of_convert(S_EDX), R_R10d);
             if(S_RAX==-1)
                 S_RAX = -errno;
@@ -860,8 +861,12 @@ void EXPORT x64Syscall(x64emu_t *emu)
             emu->error |= ERR_UNIMPL;
             return;
     }
-    if(log) snprintf(buffret, 127, "0x%lx%s", R_RAX, buff2);
-    if(log && !BOX64ENV(rolling_log)) printf_log(LOG_NONE, "=> %s\n", buffret);
+    if(log) {
+        if(BOX64ENV(rolling_log))
+            snprintf(buffret, 127, "0x%lx%s", R_RAX, buff2);
+        else
+            printf_log_prefix(0, LOG_NONE, "=> 0x%lx%s\n", R_RAX, buff2);
+    }
 }
 
 #define stack(n) (R_RSP+8+n)