summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2015-09-27 15:34:36 +0200
committerJustus Winter <4winter@informatik.uni-hamburg.de>2015-09-27 15:45:51 +0200
commit625801e5ada58af77861c72514ebc5521a67398f (patch)
tree684d195d6765260b9756c58a300552e50a046e14
parent16a8848a4f04b429d0c76c72118a7b39002cd9c2 (diff)
i386: improve syscall tracing
* kern/syscall_sw.h (mach_trap_t): Turn unused field into `mach_trap_name'. (MACH_TRAP, MACH_TRAP_STACK): Record name. * i386/i386/debug_i386.c (syscall_trace_print): Use the name and format the arguments to look like c.
-rw-r--r--i386/i386/debug_i386.c21
-rw-r--r--kern/syscall_sw.h6
2 files changed, 19 insertions, 8 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;
}
diff --git a/kern/syscall_sw.h b/kern/syscall_sw.h
index 87fc1bb5..1edf1c7f 100644
--- a/kern/syscall_sw.h
+++ b/kern/syscall_sw.h
@@ -37,15 +37,15 @@ typedef struct {
int mach_trap_arg_count;
int (*mach_trap_function)();
boolean_t mach_trap_stack;
- int mach_trap_unused;
+ const char *mach_trap_name;
} mach_trap_t;
extern mach_trap_t mach_trap_table[];
extern int mach_trap_count;
#define MACH_TRAP(name, arg_count) \
- { (arg_count), (int (*)()) (name), FALSE, 0 }
+ { (arg_count), (int (*)()) (name), FALSE, #name }
#define MACH_TRAP_STACK(name, arg_count) \
- { (arg_count), (int (*)()) (name), TRUE, 0 }
+ { (arg_count), (int (*)()) (name), TRUE, #name }
#endif /* _KERN_SYSCALL_SW_H_ */