summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/linux/syscalls.h7
-rw-r--r--include/trace/events/sys_calls.h47
-rw-r--r--kernel/fork.c1
-rw-r--r--kernel/ptrace.c2
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)
{