diff options
-rw-r--r-- | include/linux/syscalls.h | 7 | ||||
-rw-r--r-- | include/trace/events/sys_calls.h | 47 | ||||
-rw-r--r-- | kernel/fork.c | 1 | ||||
-rw-r--r-- | kernel/ptrace.c | 2 |
4 files changed, 56 insertions, 1 deletions
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 84662ecc7b51..6e24400b5346 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -77,6 +77,8 @@ struct sigaltstack; #include <linux/quota.h> #include <linux/key.h> #include <trace/syscall.h> +#undef CREATE_TRACE_POINTS +#include <trace/events/sys_calls.h> /* * __MAP - apply a macro to syscall arguments @@ -188,7 +190,10 @@ extern struct trace_event_functions exit_syscall_print_funcs; static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \ asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ { \ - long ret = SYSC##name(__MAP(x,__SC_CAST,__VA_ARGS__)); \ + long ret; \ + trace_syscall_enter(""#name); \ + ret = SYSC##name(__MAP(x,__SC_CAST,__VA_ARGS__)); \ + trace_syscall_exit(""#name); \ __MAP(x,__SC_TEST,__VA_ARGS__); \ __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \ return ret; \ diff --git a/include/trace/events/sys_calls.h b/include/trace/events/sys_calls.h new file mode 100644 index 000000000000..3604ddf6a194 --- /dev/null +++ b/include/trace/events/sys_calls.h @@ -0,0 +1,47 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM sys_calls + +#if !defined(_TRACE_SYS_CALL_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SYS_CALL_H + +#include <linux/tracepoint.h> + +TRACE_EVENT(syscall_enter, + + TP_PROTO(char *name), + + TP_ARGS(name), + + TP_STRUCT__entry( + __field( char *, name) + ), + + TP_fast_assign( + __entry->name = name; + ), + + TP_printk("%s", __entry->name) +); + +TRACE_EVENT(syscall_exit, + + TP_PROTO(char *name), + + TP_ARGS(name), + + TP_STRUCT__entry( + __field( char *, name) + ), + + TP_fast_assign( + __entry->name = name; + ), + + TP_printk("%s", __entry->name) +); + + +#endif /* _TRACE_SYSCALL_H */ + +/* This part must be outside protection */ +#include <trace/define_trace.h> diff --git a/kernel/fork.c b/kernel/fork.c index 0aa1bb5c8d6e..de524562e432 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -80,6 +80,7 @@ #include <asm/tlbflush.h> #include <trace/events/sched.h> +#include <trace/events/sys_calls.h> #define CREATE_TRACE_POINTS #include <trace/events/task.h> diff --git a/kernel/ptrace.c b/kernel/ptrace.c index afadcf7b4a22..040ec7acae73 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c @@ -27,6 +27,8 @@ #include <linux/cn_proc.h> #include <linux/compat.h> +#define CREATE_TRACE_POINTS +#include <trace/events/sys_calls.h> static int ptrace_trapping_sleep_fn(void *flags) { |