blob: 3951d774de18f59821433cd6519b5087f38cb748 [file] [log] [blame]
Frederic Weisbecker47788c52009-04-08 20:40:59 +02001#ifndef _TRACE_SYSCALL_H
2#define _TRACE_SYSCALL_H
3
Jason Barona871bd32009-08-10 16:52:31 -04004#include <linux/tracepoint.h>
5
Frederic Weisbecker47788c52009-04-08 20:40:59 +02006#include <asm/ptrace.h>
7
Jason Barona871bd32009-08-10 16:52:31 -04008
9extern void syscall_regfunc(void);
10extern void syscall_unregfunc(void);
11
12DECLARE_TRACE_WITH_CALLBACK(syscall_enter,
13 TP_PROTO(struct pt_regs *regs, long id),
14 TP_ARGS(regs, id),
15 syscall_regfunc,
16 syscall_unregfunc
17);
18
19DECLARE_TRACE_WITH_CALLBACK(syscall_exit,
20 TP_PROTO(struct pt_regs *regs, long ret),
21 TP_ARGS(regs, ret),
22 syscall_regfunc,
23 syscall_unregfunc
24);
25
Frederic Weisbecker47788c52009-04-08 20:40:59 +020026/*
27 * A syscall entry in the ftrace syscalls array.
28 *
29 * @name: name of the syscall
30 * @nb_args: number of parameters it takes
31 * @types: list of types as strings
32 * @args: list of args as strings (args[i] matches types[i])
33 */
34struct syscall_metadata {
35 const char *name;
36 int nb_args;
37 const char **types;
38 const char **args;
39};
40
41#ifdef CONFIG_FTRACE_SYSCALLS
Frederic Weisbecker47788c52009-04-08 20:40:59 +020042extern struct syscall_metadata *syscall_nr_to_meta(int nr);
43extern void start_ftrace_syscalls(void);
44extern void stop_ftrace_syscalls(void);
45extern void ftrace_syscall_enter(struct pt_regs *regs);
46extern void ftrace_syscall_exit(struct pt_regs *regs);
47#else
48static inline void start_ftrace_syscalls(void) { }
49static inline void stop_ftrace_syscalls(void) { }
50static inline void ftrace_syscall_enter(struct pt_regs *regs) { }
51static inline void ftrace_syscall_exit(struct pt_regs *regs) { }
52#endif
53
54#endif /* _TRACE_SYSCALL_H */