a9a5776380
Multiple events may use the same method to print their data. Instead of having all events have a pointer to their print funtions, the trace_event structure now points to a trace_event_functions structure that will hold the way to print ouf the event. The event itself is now passed to the print function to let the print function know what kind of event it should print. This opens the door to consolidating the way several events print their output. text data bss dec hex filename 4913961 1088356 861512 6863829 68bbd5 vmlinux.orig 4900382 1048964 861512 6810858 67ecea vmlinux.init 4900446 1049028 861512 6810986 67ed6a vmlinux.preprint This change slightly increases the size but is needed for the next change. v3: Fix the branch tracer events to handle this change. v2: Fix the new function graph tracer event calls to handle this change. Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Acked-by: Masami Hiramatsu <mhiramat@redhat.com> Acked-by: Frederic Weisbecker <fweisbec@gmail.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
58 lines
1.8 KiB
C
58 lines
1.8 KiB
C
#ifndef _TRACE_SYSCALL_H
|
|
#define _TRACE_SYSCALL_H
|
|
|
|
#include <linux/tracepoint.h>
|
|
#include <linux/unistd.h>
|
|
#include <linux/ftrace_event.h>
|
|
|
|
#include <asm/ptrace.h>
|
|
|
|
|
|
/*
|
|
* A syscall entry in the ftrace syscalls array.
|
|
*
|
|
* @name: name of the syscall
|
|
* @syscall_nr: number of the syscall
|
|
* @nb_args: number of parameters it takes
|
|
* @types: list of types as strings
|
|
* @args: list of args as strings (args[i] matches types[i])
|
|
* @enter_event: associated syscall_enter trace event
|
|
* @exit_event: associated syscall_exit trace event
|
|
*/
|
|
struct syscall_metadata {
|
|
const char *name;
|
|
int syscall_nr;
|
|
int nb_args;
|
|
const char **types;
|
|
const char **args;
|
|
struct list_head enter_fields;
|
|
struct list_head exit_fields;
|
|
|
|
struct ftrace_event_call *enter_event;
|
|
struct ftrace_event_call *exit_event;
|
|
};
|
|
|
|
#ifdef CONFIG_FTRACE_SYSCALLS
|
|
extern unsigned long arch_syscall_addr(int nr);
|
|
extern int init_syscall_trace(struct ftrace_event_call *call);
|
|
|
|
extern int reg_event_syscall_enter(struct ftrace_event_call *call);
|
|
extern void unreg_event_syscall_enter(struct ftrace_event_call *call);
|
|
extern int reg_event_syscall_exit(struct ftrace_event_call *call);
|
|
extern void unreg_event_syscall_exit(struct ftrace_event_call *call);
|
|
extern int
|
|
ftrace_format_syscall(struct ftrace_event_call *call, struct trace_seq *s);
|
|
enum print_line_t print_syscall_enter(struct trace_iterator *iter, int flags,
|
|
struct trace_event *event);
|
|
enum print_line_t print_syscall_exit(struct trace_iterator *iter, int flags,
|
|
struct trace_event *event);
|
|
#endif
|
|
|
|
#ifdef CONFIG_PERF_EVENTS
|
|
int perf_sysenter_enable(struct ftrace_event_call *call);
|
|
void perf_sysenter_disable(struct ftrace_event_call *call);
|
|
int perf_sysexit_enable(struct ftrace_event_call *call);
|
|
void perf_sysexit_disable(struct ftrace_event_call *call);
|
|
#endif
|
|
|
|
#endif /* _TRACE_SYSCALL_H */
|