aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/syscalls.h
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-04-23 10:00:22 -0400
committerSteven Rostedt <rostedt@goodmis.org>2010-05-14 14:20:34 -0400
commit80decc70afc57c87eee9d6b836aec2ecacba3457 (patch)
tree3aec4c67a5518a9c4e60a6914c5dbb9eb82e952f /include/linux/syscalls.h
parenta9a5776380208a3e48a92d0c763ee1a3b486fb73 (diff)
tracing: Move print functions into event class
Currently, every event has its own trace_event structure. This is fine since the structure is needed anyway. But the print function structure (trace_event_functions) is now separate. Since the output of the trace event is done by the class (with the exception of events defined by DEFINE_EVENT_PRINT), it makes sense to have the class define the print functions that all events in the class can use. This makes a bigger deal with the syscall events since all syscall events use the same class. The savings here is another 30K. 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 4895024 1023812 861512 6780348 6775bc vmlinux.print To accomplish this, and to let the class know what event is being printed, the event structure is embedded in the ftrace_event_call structure. This should not be an issues since the event structure was created for each event anyway. 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>
Diffstat (limited to 'include/linux/syscalls.h')
-rw-r--r--include/linux/syscalls.h18
1 files changed, 4 insertions, 14 deletions
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index f7256770a20f..a1a86a53bc73 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -120,24 +120,20 @@ struct perf_event_attr;
120 120
121extern struct ftrace_event_class event_class_syscall_enter; 121extern struct ftrace_event_class event_class_syscall_enter;
122extern struct ftrace_event_class event_class_syscall_exit; 122extern struct ftrace_event_class event_class_syscall_exit;
123extern struct trace_event_functions enter_syscall_print_funcs;
124extern struct trace_event_functions exit_syscall_print_funcs;
123 125
124#define SYSCALL_TRACE_ENTER_EVENT(sname) \ 126#define SYSCALL_TRACE_ENTER_EVENT(sname) \
125 static struct syscall_metadata __syscall_meta_##sname; \ 127 static struct syscall_metadata __syscall_meta_##sname; \
126 static struct ftrace_event_call \ 128 static struct ftrace_event_call \
127 __attribute__((__aligned__(4))) event_enter_##sname; \ 129 __attribute__((__aligned__(4))) event_enter_##sname; \
128 static struct trace_event_functions enter_syscall_print_funcs_##sname = { \
129 .trace = print_syscall_enter, \
130 }; \
131 static struct trace_event enter_syscall_print_##sname = { \
132 .funcs = &enter_syscall_print_funcs_##sname, \
133 }; \
134 static struct ftrace_event_call __used \ 130 static struct ftrace_event_call __used \
135 __attribute__((__aligned__(4))) \ 131 __attribute__((__aligned__(4))) \
136 __attribute__((section("_ftrace_events"))) \ 132 __attribute__((section("_ftrace_events"))) \
137 event_enter_##sname = { \ 133 event_enter_##sname = { \
138 .name = "sys_enter"#sname, \ 134 .name = "sys_enter"#sname, \
139 .class = &event_class_syscall_enter, \ 135 .class = &event_class_syscall_enter, \
140 .event = &enter_syscall_print_##sname, \ 136 .event.funcs = &enter_syscall_print_funcs, \
141 .data = (void *)&__syscall_meta_##sname,\ 137 .data = (void *)&__syscall_meta_##sname,\
142 } 138 }
143 139
@@ -145,19 +141,13 @@ extern struct ftrace_event_class event_class_syscall_exit;
145 static struct syscall_metadata __syscall_meta_##sname; \ 141 static struct syscall_metadata __syscall_meta_##sname; \
146 static struct ftrace_event_call \ 142 static struct ftrace_event_call \
147 __attribute__((__aligned__(4))) event_exit_##sname; \ 143 __attribute__((__aligned__(4))) event_exit_##sname; \
148 static struct trace_event_functions exit_syscall_print_funcs_##sname = { \
149 .trace = print_syscall_exit, \
150 }; \
151 static struct trace_event exit_syscall_print_##sname = { \
152 .funcs = &exit_syscall_print_funcs_##sname, \
153 }; \
154 static struct ftrace_event_call __used \ 144 static struct ftrace_event_call __used \
155 __attribute__((__aligned__(4))) \ 145 __attribute__((__aligned__(4))) \
156 __attribute__((section("_ftrace_events"))) \ 146 __attribute__((section("_ftrace_events"))) \
157 event_exit_##sname = { \ 147 event_exit_##sname = { \
158 .name = "sys_exit"#sname, \ 148 .name = "sys_exit"#sname, \
159 .class = &event_class_syscall_exit, \ 149 .class = &event_class_syscall_exit, \
160 .event = &exit_syscall_print_##sname, \ 150 .event.funcs = &exit_syscall_print_funcs, \
161 .data = (void *)&__syscall_meta_##sname,\ 151 .data = (void *)&__syscall_meta_##sname,\
162 } 152 }
163 153