about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-12-07 22:13:33 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-12-07 22:13:33 +0100
commitaed66d81b38981f7ea9ee92ebe7d803a10df113f (patch)
tree15a5490eb4ddcaa5ce711a9c3d73e9c4874120c5
parente355280232dd602db6662c81b559f53786b42850 (diff)
downloadbox64-aed66d81b38981f7ea9ee92ebe7d803a10df113f.tar.gz
box64-aed66d81b38981f7ea9ee92ebe7d803a10df113f.zip
[TRACE] Better trace for some specific jump
-rw-r--r--src/emu/x64run_private.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/emu/x64run_private.c b/src/emu/x64run_private.c
index fa61d2c1..9d8beaae 100644
--- a/src/emu/x64run_private.c
+++ b/src/emu/x64run_private.c
@@ -1254,7 +1254,8 @@ int printFunctionAddr(uintptr_t nextaddr, const char* text)
 
 #ifdef HAVE_TRACE
 extern uint64_t start_cnt;
-#define PK(a)   (*(uint8_t*)(ip+a))
+#define PK(a)     (*(uint8_t*)(ip+a))
+#define PKS(a)    (*(int8_t*)(ip+a))
 #define PK32(a)   (*(int32_t*)((uint8_t*)(ip+a)))
 #define PK64(a)   (*(int64_t*)((uint8_t*)(ip+a)))
 
@@ -1333,6 +1334,10 @@ void PrintTrace(x64emu_t* emu, uintptr_t ip, int dynarec)
                     uintptr_t nextaddr = is32bits?(*(uint32_t*)(uintptr_t)PK32(2)):(*(uintptr_t*)(ip + 6 + PK32(2)));
                     if(!printFunctionAddr(nextaddr, "=> "))
                         printf_log(LOG_NONE, " => %p", (void*)nextaddr);
+                } else if(PK(1)==0x60) {
+                    uintptr_t nextaddr = *(uintptr_t*)(R_RAX+PK(2));
+                    if(!printFunctionAddr(nextaddr, "=> "))
+                        printf_log(LOG_NONE, " => %p", (void*)nextaddr);
                 } else if((PK(1)==0x14) && (PK(2)==0x25)) {
                     uintptr_t nextaddr = is32bits?(*(uint32_t*)(uintptr_t)PK32(3)):(*(uintptr_t*)(uintptr_t)PK32(3));
                     printf_log(LOG_NONE, " => %p", (void*)nextaddr);
@@ -1341,7 +1346,6 @@ void PrintTrace(x64emu_t* emu, uintptr_t ip, int dynarec)
                     uintptr_t nextaddr = *(uintptr_t*)(R_R10 + R_RAX*8);
                     printf_log(LOG_NONE, " => %p", (void*)nextaddr);
                     printFunctionAddr(nextaddr, "=> ");
-
                 }
 
             }