about summary refs log tree commit diff stats
path: root/src/emu/x64run_private.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/x64run_private.c')
-rw-r--r--src/emu/x64run_private.c62
1 files changed, 23 insertions, 39 deletions
diff --git a/src/emu/x64run_private.c b/src/emu/x64run_private.c
index 74070784..f9eec5c6 100644
--- a/src/emu/x64run_private.c
+++ b/src/emu/x64run_private.c
@@ -414,7 +414,7 @@ void UpdateFlags(x64emu_t *emu)
                 CLEAR_FLAG(F_OF);
             } else {
                 SET_FLAG(F_CF);
-                SET_FLAG(F_OF); 
+                SET_FLAG(F_OF);
             }
             if (!BOX64ENV(cputype)) {
                 CONDITIONAL_SET_FLAG((emu->res.u32>>31)&1, F_SF);
@@ -1208,22 +1208,6 @@ const char* getAddrFunctionName(uintptr_t addr)
     return ret;
 }
 
-int printFunctionAddr(uintptr_t nextaddr, const char* text)
-{
-    uint64_t sz = 0;
-    uintptr_t start = 0;
-    const char* symbname = FindNearestSymbolName(FindElfAddress(my_context, nextaddr), (void*)nextaddr, &start, &sz);
-    if(!sz) sz=0x100;   // arbitrary value...
-    if(symbname && nextaddr>=start && (nextaddr<(start+sz) || !sz)) {
-        if(nextaddr==start)
-            printf_log_prefix(0, LOG_NONE, " (%s%s:%s)", text, ElfName(FindElfAddress(my_context, nextaddr)), symbname);
-        else
-            printf_log_prefix(0, LOG_NONE, " (%s%s:%s + 0x%lx)", text, ElfName(FindElfAddress(my_context, nextaddr)), symbname, nextaddr - start);
-        return 1;
-    }
-    return 0;
-}
-
 #ifdef HAVE_TRACE
 #define PK(a)     (*(uint8_t*)(ip+a))
 #define PKS(a)    (*(int8_t*)(ip+a))
@@ -1235,14 +1219,14 @@ void PrintTrace(x64emu_t* emu, uintptr_t ip, int dynarec)
     int is32bits = (emu->segs[_CS]==0x23);
     if(BOX64ENV(start_cnt)) SET_BOX64ENV(start_cnt, BOX64ENV(start_cnt)-1);
     if(!BOX64ENV(start_cnt) && my_context->dec && (
-            (trace_end == 0) 
+            (trace_end == 0)
             || ((ip >= trace_start) && (ip < trace_end))) ) {
         int tid = syscall(SYS_gettid);
         mutex_lock(&my_context->mutex_trace);
 #ifdef DYNAREC
         if((my_context->trace_tid != tid) || (my_context->trace_dynarec!=dynarec)) {
             printf_log(LOG_NONE, "Thread %04d| (%s) ", tid, dynarec?"dyn":"int");
-            printFunctionAddr(ip, "here: ");
+            PrintFunctionAddr(ip, "here: ");
             printf_log_prefix(0, LOG_NONE, "\n");
             my_context->trace_tid = tid;
             my_context->trace_dynarec = dynarec;
@@ -1279,81 +1263,81 @@ void PrintTrace(x64emu_t* emu, uintptr_t ip, int dynarec)
             if(peek==0xC3 || peek==0xC2 || (peek==0xF3 && PK(1)==0xC3)) {
                 if(is32bits) {
                     printf_log_prefix(0, LOG_NONE, " => %p", (void*)(uintptr_t)*(uint32_t*)(R_RSP));
-                    printFunctionAddr(*(uint32_t*)(R_RSP), "=> ");
+                    PrintFunctionAddr(*(uint32_t*)(R_RSP), "=> ");
                 } else {
                     printf_log_prefix(0, LOG_NONE, " => %p", *(void**)(R_RSP));
-                    printFunctionAddr(*(uintptr_t*)(R_RSP), "=> ");
+                    PrintFunctionAddr(*(uintptr_t*)(R_RSP), "=> ");
                 }
             } else if(peek==0x57 && rex.b) {
                 printf_log_prefix(0, LOG_NONE, " => STACK_TOP: %p", *(void**)(R_RSP));
-                printFunctionAddr(ip, "here: ");
+                PrintFunctionAddr(ip, "here: ");
             } else if((peek==0x55 /*|| peek==0x53*/) && !is32bits) {
-                if(!printFunctionAddr(*(uintptr_t*)(R_RSP), " STACK_TOP: "))
+                if(!PrintFunctionAddr(*(uintptr_t*)(R_RSP), " STACK_TOP: "))
                     printf_log_prefix(0, LOG_NONE, " STACK_TOP: %p ", (void*)*(uintptr_t*)(R_RSP));
             } else if((peek==0x55 || peek==0x56 || peek==0x53 || peek==0x57) && is32bits) {
-                if(!printFunctionAddr(*(uint32_t*)(R_RSP), " STACK_TOP: "))
+                if(!PrintFunctionAddr(*(uint32_t*)(R_RSP), " STACK_TOP: "))
                     printf_log_prefix(0, LOG_NONE, " STACK_TOP: %p ", (void*)(uintptr_t)*(uint32_t*)(R_RSP));
             } else if(peek==0xF3 && PK(1)==0x0F && PK(2)==0x1E && PK(3)==0xFA && !is32bits) {
                 uintptr_t nextaddr = *(uintptr_t*)(R_RSP);
-                if(!printFunctionAddr(nextaddr, "=> "))
+                if(!PrintFunctionAddr(nextaddr, "=> "))
                     printf_log_prefix(0, LOG_NONE, " => %p", (void*)nextaddr);
             } else if((peek==0x81 || peek==0x83) && PK(1)==0xEC && is32bits) {
                 uintptr_t nextaddr = *(ptr_t*)from_ptrv(R_ESP);
-                if(!printFunctionAddr(nextaddr, "STACK_TOP: "))
+                if(!PrintFunctionAddr(nextaddr, "STACK_TOP: "))
                     printf_log_prefix(0, LOG_NONE, " STACK_TOP: %p", (void*)nextaddr);
             } else if(peek==0xE8 || peek==0xE9) { // Call & Jmp
                 uintptr_t nextaddr = ip + 5 + PK32(1);
-                printFunctionAddr(nextaddr, "=> ");
+                PrintFunctionAddr(nextaddr, "=> ");
             } else if(peek==0xFF) {
                 if(PK(1)==0x25) {
                     uintptr_t nextaddr = is32bits?(*(uint32_t*)(uintptr_t)PK32(2)):(*(uintptr_t*)(ip + 6 + PK32(2)));
-                    if(!printFunctionAddr(nextaddr, "=> "))
+                    if(!PrintFunctionAddr(nextaddr, "=> "))
                         printf_log_prefix(0, LOG_NONE, " => %p", (void*)nextaddr);
                 } else if(PK(1)==0x15) {
                     uintptr_t nextaddr = is32bits?(*(uint32_t*)(uintptr_t)PK32(2)):(*(uintptr_t*)(ip + 6 + PK32(2)));
-                    if(!printFunctionAddr(nextaddr, "=> "))
+                    if(!PrintFunctionAddr(nextaddr, "=> "))
                         printf_log_prefix(0, LOG_NONE, " => %p", (void*)nextaddr);
                 } else if(PK(1)==0x60) {
                     uintptr_t nextaddr = *(uintptr_t*)(R_RAX+PK(2));
-                    if(!printFunctionAddr(nextaddr, "=> "))
+                    if(!PrintFunctionAddr(nextaddr, "=> "))
                         printf_log_prefix(0, LOG_NONE, " => %p", (void*)nextaddr);
                 } else if(PK(1)==0xE0) {
                     uintptr_t nextaddr = R_RAX;
                     if(is32bits) nextaddr &= 0xffffffff;
-                    if(!printFunctionAddr(nextaddr, "=> "))
+                    if(!PrintFunctionAddr(nextaddr, "=> "))
                         printf_log_prefix(0, 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_prefix(0, LOG_NONE, " => %p", (void*)nextaddr);
-                    printFunctionAddr(nextaddr, "=> ");
+                    PrintFunctionAddr(nextaddr, "=> ");
                 } else if((PK(1)==0x14) && (PK(2)==0xC2) && rex.rex==0x41) {
                     uintptr_t nextaddr = *(uintptr_t*)(R_R10 + R_RAX*8);
                     printf_log_prefix(0, LOG_NONE, " => %p", (void*)nextaddr);
-                    printFunctionAddr(nextaddr, "=> ");
+                    PrintFunctionAddr(nextaddr, "=> ");
                 } else if(PK(1)==0xE1 && rex.rex==0x41) {
                     uintptr_t nextaddr = R_R9;
                     printf_log_prefix(0, LOG_NONE, " => %p", (void*)nextaddr);
-                    printFunctionAddr(nextaddr, "=> ");
+                    PrintFunctionAddr(nextaddr, "=> ");
                 } else if(is32bits && PK(1)==0xA3) {
                     uintptr_t nextaddr = *(ptr_t*)from_ptrv(R_EBX + PK32(2));
                     printf_log_prefix(0, LOG_NONE, " => %p", (void*)nextaddr);
-                    printFunctionAddr(nextaddr, "=> ");
+                    PrintFunctionAddr(nextaddr, "=> ");
                 } else if(PK(1)==0x92) {
                     uintptr_t nextaddr = is32bits?(*(ptr_t*)from_ptrv(R_EDX + PK32(2))):(*(uintptr_t*)(R_RDX + PK32(2)));
                     printf_log_prefix(0, LOG_NONE, " => %p", (void*)nextaddr);
-                    printFunctionAddr(nextaddr, "=> ");
+                    PrintFunctionAddr(nextaddr, "=> ");
                 } else if(PK(1)==0x50) {
                     uintptr_t nextaddr = is32bits?(*(ptr_t*)from_ptrv(R_EAX + PK(2))):(*(uintptr_t*)(R_RAX + PK(2)));
                     printf_log_prefix(0, LOG_NONE, " => %p", (void*)nextaddr);
-                    printFunctionAddr(nextaddr, "=> ");
+                    PrintFunctionAddr(nextaddr, "=> ");
                 } else if(PK(1)==0x52) {
                     uintptr_t nextaddr = is32bits?(*(ptr_t*)from_ptrv(R_EDX + PK(2))):(*(uintptr_t*)(R_RDX + PK(2)));
                     printf_log_prefix(0, LOG_NONE, " => %p", (void*)nextaddr);
-                    printFunctionAddr(nextaddr, "=> ");
+                    PrintFunctionAddr(nextaddr, "=> ");
                 } else if(is32bits && PK(1)==0x10) {
                     uintptr_t nextaddr = *(ptr_t*)from_ptrv(R_EAX);
                     printf_log_prefix(0, LOG_NONE, " => %p", (void*)nextaddr);
-                    printFunctionAddr(nextaddr, "=> ");
+                    PrintFunctionAddr(nextaddr, "=> ");
                 }
 
             }