about summary refs log tree commit diff stats
path: root/src/emu
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-07-30 14:18:53 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-07-30 14:18:53 +0200
commit8bc9baefd688945327e2b01d257f656d622f33f1 (patch)
tree4db1db5ca66c4b1a44f18d3e0770fe5d032b7382 /src/emu
parent0fe835e0871b42104218c9440f599d7a9e2b1f2f (diff)
downloadbox64-8bc9baefd688945327e2b01d257f656d622f33f1.tar.gz
box64-8bc9baefd688945327e2b01d257f656d622f33f1.zip
Added BOX64_ROLLING_LOG=1 for a 'Just in Time LOG=2' on signal
Diffstat (limited to 'src/emu')
-rwxr-xr-xsrc/emu/x64int3.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/emu/x64int3.c b/src/emu/x64int3.c
index 1cac5cdc..50afa366 100755
--- a/src/emu/x64int3.c
+++ b/src/emu/x64int3.c
@@ -83,12 +83,17 @@ void x64Int3(x64emu_t* emu)
             elfheader_t *h = FindElfAddress(my_context, *(uintptr_t*)(R_ESP));
             int have_trace = 0;
             if(h && strstr(ElfName(h), "libMiles")) have_trace = 1;*/
-            if(box64_log>=LOG_DEBUG /*|| have_trace*/) {
+            if(box64_log>=LOG_DEBUG || cycle_log) {
                 pthread_mutex_lock(&emu->context->mutex_trace);
                 int tid = GetTID();
-                char buff[256] = "\0";
+                char t_buff[256] = "\0";
                 char buff2[64] = "\0";
                 char buff3[64] = "\0";
+                char* buff = cycle_log?my_context->log_call[my_context->current_line]:t_buff;
+                char* buffret = cycle_log?my_context->log_ret[my_context->current_line]:NULL;
+                if(buffret) buffret[0] = '\0';
+                if(cycle_log)
+                    my_context->current_line = (my_context->current_line+1)&(CYCLE_LOG-1);
                 char *tmp;
                 int post = 0;
                 int perr = 0;
@@ -223,7 +228,7 @@ void x64Int3(x64emu_t* emu)
                 } else {
                     snprintf(buff, 255, "%04d|%p: Calling %s(0x%lX, 0x%lX, 0x%lX, ...)", tid, *(void**)(R_RSP), s, R_RDI, R_RSI, R_RDX);
                 }
-                printf_log(LOG_NONE, "%s =>", buff);
+                if(!cycle_log) printf_log(LOG_NONE, "%s =>", buff);
                 pthread_mutex_unlock(&emu->context->mutex_trace);
                 w(emu, addr);   // some function never come back, so unlock the mutex first!
                 pthread_mutex_lock(&emu->context->mutex_trace);
@@ -252,7 +257,10 @@ void x64Int3(x64emu_t* emu)
                     snprintf(buff3, 63, " (errno=%d:\"%s\")", errno, strerror(errno));
                 else if(perr==2 && R_EAX==0)
                     snprintf(buff3, 63, " (errno=%d:\"%s\")", errno, strerror(errno));
-                printf_log(LOG_NONE, " return 0x%lX%s%s\n", R_RAX, buff2, buff3);
+                if(cycle_log)
+                    snprintf(buffret, 127, "0x%lX%s%s\n", R_RAX, buff2, buff3);
+                else
+                    printf_log(LOG_NONE, " return 0x%lX%s%s\n", R_RAX, buff2, buff3);
                 pthread_mutex_unlock(&emu->context->mutex_trace);
             } else
                 w(emu, addr);