blob: 5dcb7e3a544cfa02fe96831b4d6033ed913b9517 [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>
Jason Baronfb34a082009-08-10 16:52:47 -04005#include <linux/unistd.h>
6#include <linux/ftrace_event.h>
Jason Barona871bd32009-08-10 16:52:31 -04007
Frederic Weisbecker47788c52009-04-08 20:40:59 +02008#include <asm/ptrace.h>
9
Jason Barona871bd32009-08-10 16:52:31 -040010
Josh Stone3d27d8c2009-08-24 14:43:12 -070011#ifdef CONFIG_HAVE_SYSCALL_TRACEPOINTS
12
Jason Barona871bd32009-08-10 16:52:31 -040013extern void syscall_regfunc(void);
14extern void syscall_unregfunc(void);
15
16DECLARE_TRACE_WITH_CALLBACK(syscall_enter,
17 TP_PROTO(struct pt_regs *regs, long id),
18 TP_ARGS(regs, id),
19 syscall_regfunc,
20 syscall_unregfunc
21);
22
23DECLARE_TRACE_WITH_CALLBACK(syscall_exit,
24 TP_PROTO(struct pt_regs *regs, long ret),
25 TP_ARGS(regs, ret),
26 syscall_regfunc,
27 syscall_unregfunc
28);
29
Josh Stone3d27d8c2009-08-24 14:43:12 -070030#endif
31
Frederic Weisbecker47788c52009-04-08 20:40:59 +020032/*
33 * A syscall entry in the ftrace syscalls array.
34 *
35 * @name: name of the syscall
36 * @nb_args: number of parameters it takes
37 * @types: list of types as strings
38 * @args: list of args as strings (args[i] matches types[i])
Jason Baron64c12e02009-08-10 16:52:53 -040039 * @enter_id: associated ftrace enter event id
40 * @exit_id: associated ftrace exit event id
Li Zefan540b7b82009-08-19 15:54:51 +080041 * @enter_event: associated syscall_enter trace event
42 * @exit_event: associated syscall_exit trace event
Frederic Weisbecker47788c52009-04-08 20:40:59 +020043 */
44struct syscall_metadata {
45 const char *name;
46 int nb_args;
47 const char **types;
48 const char **args;
Jason Baron64c12e02009-08-10 16:52:53 -040049 int enter_id;
50 int exit_id;
Li Zefan540b7b82009-08-19 15:54:51 +080051
52 struct ftrace_event_call *enter_event;
53 struct ftrace_event_call *exit_event;
Frederic Weisbecker47788c52009-04-08 20:40:59 +020054};
55
56#ifdef CONFIG_FTRACE_SYSCALLS
Frederic Weisbecker47788c52009-04-08 20:40:59 +020057extern struct syscall_metadata *syscall_nr_to_meta(int nr);
Jason Baronfb34a082009-08-10 16:52:47 -040058extern int syscall_name_to_nr(char *name);
Jason Baron64c12e02009-08-10 16:52:53 -040059void set_syscall_enter_id(int num, int id);
60void set_syscall_exit_id(int num, int id);
Jason Baronfb34a082009-08-10 16:52:47 -040061extern struct trace_event event_syscall_enter;
62extern struct trace_event event_syscall_exit;
63extern int reg_event_syscall_enter(void *ptr);
64extern void unreg_event_syscall_enter(void *ptr);
65extern int reg_event_syscall_exit(void *ptr);
66extern void unreg_event_syscall_exit(void *ptr);
Li Zefan10a5b662009-08-19 15:53:05 +080067extern int syscall_enter_format(struct ftrace_event_call *call,
68 struct trace_seq *s);
69extern int syscall_exit_format(struct ftrace_event_call *call,
70 struct trace_seq *s);
Li Zefan540b7b82009-08-19 15:54:51 +080071extern int syscall_enter_define_fields(struct ftrace_event_call *call);
72extern int syscall_exit_define_fields(struct ftrace_event_call *call);
Jason Baron64c12e02009-08-10 16:52:53 -040073enum print_line_t print_syscall_enter(struct trace_iterator *iter, int flags);
74enum print_line_t print_syscall_exit(struct trace_iterator *iter, int flags);
Frederic Weisbecker47788c52009-04-08 20:40:59 +020075#endif
Jason Baronf4b5ffc2009-08-10 16:53:02 -040076#ifdef CONFIG_EVENT_PROFILE
77int reg_prof_syscall_enter(char *name);
78void unreg_prof_syscall_enter(char *name);
79int reg_prof_syscall_exit(char *name);
80void unreg_prof_syscall_exit(char *name);
81
82#endif
Frederic Weisbecker47788c52009-04-08 20:40:59 +020083
84#endif /* _TRACE_SYSCALL_H */