about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-07-01 13:41:35 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-07-01 13:41:35 +0200
commit569b7471f96ab17d04d548de4ca56d389a365148 (patch)
treed728961e556b646ee251098b3412d2bfcc4722c9 /src
parent74710cbf6abd3327c046a9cd9c8f60519a569116 (diff)
downloadbox64-569b7471f96ab17d04d548de4ca56d389a365148.tar.gz
box64-569b7471f96ab17d04d548de4ca56d389a365148.zip
Simplified a bit ROLLING_LOG buffer handling
Diffstat (limited to 'src')
-rw-r--r--src/box64context.c12
-rw-r--r--src/emu/x64int3.c10
-rw-r--r--src/emu/x64syscall.c4
-rwxr-xr-xsrc/emu/x86int3.c8
-rw-r--r--src/include/box64context.h4
5 files changed, 15 insertions, 23 deletions
diff --git a/src/box64context.c b/src/box64context.c
index 970ea9ad..444a76a8 100644
--- a/src/box64context.c
+++ b/src/box64context.c
@@ -149,10 +149,6 @@ static void atfork_child_box64context(void)
 void freeCycleLog(box64context_t* ctx)
 {
     if(BOX64ENV(rolling_log)) {
-        for(int i=0; i<BOX64ENV(rolling_log); ++i) {
-            box_free(ctx->log_call[i]);
-            box_free(ctx->log_ret[i]);
-        }
         box_free(ctx->log_call);
         box_free(ctx->log_ret);
         ctx->log_call = NULL;
@@ -162,12 +158,8 @@ void freeCycleLog(box64context_t* ctx)
 void initCycleLog(box64context_t* context)
 {
     if(context && BOX64ENV(rolling_log)) {
-        context->log_call = (char**)box_calloc(BOX64ENV(rolling_log), sizeof(char*));
-        context->log_ret = (char**)box_calloc(BOX64ENV(rolling_log), sizeof(char*));
-        for(int i=0; i<BOX64ENV(rolling_log); ++i) {
-            context->log_call[i] = (char*)box_calloc(256, 1);
-            context->log_ret[i] = (char*)box_calloc(128, 1);
-        }
+        context->log_call = (char*)box_calloc(BOX64ENV(rolling_log), 256*sizeof(char));
+        context->log_ret = (char*)box_calloc(BOX64ENV(rolling_log), 128*sizeof(char));
     }
 }
 
diff --git a/src/emu/x64int3.c b/src/emu/x64int3.c
index 0aa3ba45..1e9d2376 100644
--- a/src/emu/x64int3.c
+++ b/src/emu/x64int3.c
@@ -121,8 +121,8 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr)
                 if(BOX64ENV(rolling_log)) {
                     my_context->current_line = (my_context->current_line+1)%BOX64ENV(rolling_log);
                 }
-                char* buff = BOX64ENV(rolling_log)?my_context->log_call[cycle_line]:t_buff;
-                char* buffret = BOX64ENV(rolling_log)?my_context->log_ret[cycle_line]:NULL;
+                char* buff = BOX64ENV(rolling_log)?(my_context->log_call+256*cycle_line):t_buff;
+                char* buffret = BOX64ENV(rolling_log)?(my_context->log_ret+128*cycle_line):NULL;
                 if(buffret) buffret[0] = '\0';
                 char *tmp;
                 int post = 0;
@@ -379,7 +379,7 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr)
                     snprintf(buff3, 64, " (errno=%d:\"%s\")", errno, strerror(errno));
 
                 if(BOX64ENV(rolling_log))
-                    snprintf(buffret, 128, "0x%lX%s%s", R_RAX, buff2, buff3);
+                    snprintf(buffret, 127, "0x%lX%s%s", R_RAX, buff2, buff3);
                 else {
                     mutex_lock(&emu->context->mutex_trace);
                     printf_log_prefix(0, LOG_NONE, " return 0x%lX%s%s\n", R_RAX, buff2, buff3);
@@ -411,8 +411,8 @@ void print_rolling_log(int loglevel) {
         int j = (my_context->current_line+1)%BOX64ENV(rolling_log);
         for (int i=0; i<BOX64ENV(rolling_log); ++i) {
             int k = (i+j)%BOX64ENV(rolling_log);
-            if(my_context->log_call[k][0]) {
-                printf_log(loglevel, "%s => return %s\n", my_context->log_call[k], my_context->log_ret[k]);
+            if(my_context->log_call[256*k+0]) {
+                printf_log(loglevel, "%s => return %s\n", my_context->log_call+256*k, my_context->log_ret+128*k);
             }
         }
     }
diff --git a/src/emu/x64syscall.c b/src/emu/x64syscall.c
index 93c94267..3392cdcc 100644
--- a/src/emu/x64syscall.c
+++ b/src/emu/x64syscall.c
@@ -461,8 +461,8 @@ void EXPORT x64Syscall(x64emu_t *emu)
     char* buffret = NULL;
     if(BOX64ENV(log) >= LOG_DEBUG || BOX64ENV(rolling_log)) {
         log = 1;
-        buff = BOX64ENV(rolling_log)?my_context->log_call[my_context->current_line]:t_buff;
-        buffret = BOX64ENV(rolling_log)?my_context->log_ret[my_context->current_line]:t_buffret;
+        buff = BOX64ENV(rolling_log)?(my_context->log_call+256*my_context->current_line):t_buff;
+        buffret = BOX64ENV(rolling_log)?(my_context->log_ret+128*my_context->current_line):t_buffret;
         if(BOX64ENV(rolling_log))
             my_context->current_line = (my_context->current_line+1)%BOX64ENV(rolling_log);
         snprintf(buff, 255, "%04d|%p: Calling syscall 0x%02X (%d) %p %p %p %p %p %p", GetTID(), (void*)R_RIP, s, s, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_R10, (void*)R_R8, (void*)R_R9);
diff --git a/src/emu/x86int3.c b/src/emu/x86int3.c
index 0b4bfdcc..72d218bb 100755
--- a/src/emu/x86int3.c
+++ b/src/emu/x86int3.c
@@ -73,8 +73,8 @@ void x86Int3(x64emu_t* emu, uintptr_t* addr)
                 if(BOX64ENV(rolling_log)) {
                     my_context->current_line = (my_context->current_line+1)%BOX64ENV(rolling_log);
                 }
-                char* buff = BOX64ENV(rolling_log)?my_context->log_call[cycle_line]:t_buff;
-                char* buffret = BOX64ENV(rolling_log)?my_context->log_ret[cycle_line]:NULL;
+                char* buff = BOX64ENV(rolling_log)?(my_context->log_call+256*cycle_line):t_buff;
+                char* buffret = BOX64ENV(rolling_log)?(my_context->log_ret+128*cycle_line):NULL;
                 if(buffret) buffret[0] = '\0';
                 char *tmp;
                 int post = 0;
@@ -468,9 +468,9 @@ void x86Int3(x64emu_t* emu, uintptr_t* addr)
                     snprintf(buff3, 63, " (errno=%d:\"%s\")", errno, strerror(errno));
                 if(BOX64ENV(rolling_log)) {
                     if(ret_fmt==1)
-                        snprintf(buffret, 128, "%d%s%s", S_EAX, buff2, buff3);
+                        snprintf(buffret, 127, "%d%s%s", S_EAX, buff2, buff3);
                     else
-                        snprintf(buffret, 128, "0x%X%s%s", R_EAX, buff2, buff3);
+                        snprintf(buffret, 127, "0x%X%s%s", R_EAX, buff2, buff3);
                 } else {
                     mutex_lock(&emu->context->mutex_trace);
                     if(ret_fmt==1)
diff --git a/src/include/box64context.h b/src/include/box64context.h
index e7c7b0cc..910b0e8a 100644
--- a/src/include/box64context.h
+++ b/src/include/box64context.h
@@ -235,8 +235,8 @@ typedef struct box64context_s {
     int                 stack_clone_used;
 
     // rolling logs
-    char*               *log_call;
-    char*               *log_ret;
+    char*               log_call;   // is a large string composed of slices of 256 chars
+    char*               log_ret;    // is a large string composed of sloces of 128 chars
     int                 current_line;
 
 } box64context_t;