diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-07-24 14:58:35 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-07-24 14:58:35 +0200 |
| commit | 32cebc6137c7e42ac124e93fef3c6dea7176d61f (patch) | |
| tree | 58615591301fda5216c9924eb7103b3236d82be7 /src | |
| parent | b02b9174e089904ff3d2ba8d7c7d907318457032 (diff) | |
| download | box64-32cebc6137c7e42ac124e93fef3c6dea7176d61f.tar.gz box64-32cebc6137c7e42ac124e93fef3c6dea7176d61f.zip | |
[TRACE] Try to preserve errno when tracing
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64int3.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/emu/x64int3.c b/src/emu/x64int3.c index 5f32267f..0926b467 100644 --- a/src/emu/x64int3.c +++ b/src/emu/x64int3.c @@ -113,6 +113,7 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) int have_trace = 0; if(h && strstr(ElfName(h), "libMiles")) have_trace = 1;*/ if(BOX64ENV(log)>=LOG_DEBUG || BOX64ENV(rolling_log)) { + int e = errno; int tid = GetTID(); char t_buff[256] = "\0"; char buff2[64] = "\0"; @@ -337,7 +338,9 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) printf_log_prefix(0, LOG_NONE, "%s =>", buff); mutex_unlock(&emu->context->mutex_trace); } + errno = e; w(emu, a); // some function never come back, so unlock the mutex first! + e = errno; if(post) switch(post) { // Only ever 2 for now... case 1: snprintf(buff2, 64, " [%llu sec %llu nsec]", pu64?pu64[0]:~0ull, pu64?pu64[1]:~0ull); @@ -378,13 +381,13 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) break; } if(perr==1 && (S_EAX)<0) - snprintf(buff3, 64, " (errno=%d:\"%s\")", errno, strerror(errno)); + snprintf(buff3, 64, " (errno=%d:\"%s\")", e, strerror(e)); else if(perr==2 && R_EAX==0) - snprintf(buff3, 64, " (errno=%d:\"%s\")", errno, strerror(errno)); + snprintf(buff3, 64, " (errno=%d:\"%s\")", e, strerror(e)); else if(perr==3 && (S_RAX)==-1) - snprintf(buff3, 64, " (errno=%d:\"%s\")", errno, strerror(errno)); + snprintf(buff3, 64, " (errno=%d:\"%s\")", e, strerror(e)); else if(perr==4) - snprintf(buff3, 64, " (errno=%d:\"%s\")", errno, strerror(errno)); + snprintf(buff3, 64, " (errno=%d:\"%s\")", e, strerror(e)); if(BOX64ENV(rolling_log)) snprintf(buffret, 127, "0x%lX%s%s", R_RAX, buff2, buff3); @@ -393,6 +396,7 @@ void x64Int3(x64emu_t* emu, uintptr_t* addr) printf_log_prefix(0, LOG_NONE, " return 0x%lX%s%s\n", R_RAX, buff2, buff3); mutex_unlock(&emu->context->mutex_trace); } + errno = e; } else w(emu, a); } |