diff options
Diffstat (limited to 'i386/i386/debug_i386.c')
-rw-r--r-- | i386/i386/debug_i386.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/i386/i386/debug_i386.c b/i386/i386/debug_i386.c index f0fe2aef..7a33350f 100644 --- a/i386/i386/debug_i386.c +++ b/i386/i386/debug_i386.c @@ -137,11 +137,22 @@ syscall_trace_print(int syscallvec, ...) { int syscallnum = syscallvec >> 4; int i; - - printf("syscall -%d:", syscallnum); - for (i = 0; i < mach_trap_table[syscallnum].mach_trap_arg_count; i++) - printf(" %08x", (&syscallvec)[1+i]); - printf("\n"); + const mach_trap_t *trap = &mach_trap_table[syscallnum]; + + printf("0x%08x:0x%08x:%s(", + current_task(), current_thread(), trap->mach_trap_name); + for (i = 0; i < trap->mach_trap_arg_count; i++) { + unsigned long value = (&syscallvec)[1+i]; + /* Use a crude heuristic to format pointers. */ + if (value > 1024) + printf("0x%08x", value); + else + printf("%d", value); + + if (i + 1 < trap->mach_trap_arg_count) + printf(", "); + } + printf(")\n"); return syscallvec; } |