diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/ftrace_event.h | 5 | ||||
-rw-r--r-- | include/linux/syscalls.h | 14 | ||||
-rw-r--r-- | include/trace/ftrace.h | 11 | ||||
-rw-r--r-- | include/trace/syscall.h | 4 |
4 files changed, 19 insertions, 15 deletions
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index e665ed38b4bf..479c3c1876e6 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
@@ -130,6 +130,9 @@ struct ftrace_event_class { | |||
130 | #endif | 130 | #endif |
131 | int (*reg)(struct ftrace_event_call *event, | 131 | int (*reg)(struct ftrace_event_call *event, |
132 | enum trace_reg type); | 132 | enum trace_reg type); |
133 | int (*define_fields)(struct ftrace_event_call *); | ||
134 | struct list_head *(*get_fields)(struct ftrace_event_call *); | ||
135 | struct list_head fields; | ||
133 | }; | 136 | }; |
134 | 137 | ||
135 | struct ftrace_event_call { | 138 | struct ftrace_event_call { |
@@ -142,8 +145,6 @@ struct ftrace_event_call { | |||
142 | int id; | 145 | int id; |
143 | const char *print_fmt; | 146 | const char *print_fmt; |
144 | int (*raw_init)(struct ftrace_event_call *); | 147 | int (*raw_init)(struct ftrace_event_call *); |
145 | int (*define_fields)(struct ftrace_event_call *); | ||
146 | struct list_head fields; | ||
147 | int filter_active; | 148 | int filter_active; |
148 | struct event_filter *filter; | 149 | struct event_filter *filter; |
149 | void *mod; | 150 | void *mod; |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index e3348c4c22e8..fd0f1f248cd8 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -122,7 +122,7 @@ extern struct ftrace_event_class event_class_syscall_enter; | |||
122 | extern struct ftrace_event_class event_class_syscall_exit; | 122 | extern struct ftrace_event_class event_class_syscall_exit; |
123 | 123 | ||
124 | #define SYSCALL_TRACE_ENTER_EVENT(sname) \ | 124 | #define SYSCALL_TRACE_ENTER_EVENT(sname) \ |
125 | static const struct syscall_metadata __syscall_meta_##sname; \ | 125 | static struct syscall_metadata __syscall_meta_##sname; \ |
126 | static struct ftrace_event_call \ | 126 | static struct ftrace_event_call \ |
127 | __attribute__((__aligned__(4))) event_enter_##sname; \ | 127 | __attribute__((__aligned__(4))) event_enter_##sname; \ |
128 | static struct trace_event enter_syscall_print_##sname = { \ | 128 | static struct trace_event enter_syscall_print_##sname = { \ |
@@ -136,12 +136,11 @@ extern struct ftrace_event_class event_class_syscall_exit; | |||
136 | .class = &event_class_syscall_enter, \ | 136 | .class = &event_class_syscall_enter, \ |
137 | .event = &enter_syscall_print_##sname, \ | 137 | .event = &enter_syscall_print_##sname, \ |
138 | .raw_init = init_syscall_trace, \ | 138 | .raw_init = init_syscall_trace, \ |
139 | .define_fields = syscall_enter_define_fields, \ | ||
140 | .data = (void *)&__syscall_meta_##sname,\ | 139 | .data = (void *)&__syscall_meta_##sname,\ |
141 | } | 140 | } |
142 | 141 | ||
143 | #define SYSCALL_TRACE_EXIT_EVENT(sname) \ | 142 | #define SYSCALL_TRACE_EXIT_EVENT(sname) \ |
144 | static const struct syscall_metadata __syscall_meta_##sname; \ | 143 | static struct syscall_metadata __syscall_meta_##sname; \ |
145 | static struct ftrace_event_call \ | 144 | static struct ftrace_event_call \ |
146 | __attribute__((__aligned__(4))) event_exit_##sname; \ | 145 | __attribute__((__aligned__(4))) event_exit_##sname; \ |
147 | static struct trace_event exit_syscall_print_##sname = { \ | 146 | static struct trace_event exit_syscall_print_##sname = { \ |
@@ -155,14 +154,13 @@ extern struct ftrace_event_class event_class_syscall_exit; | |||
155 | .class = &event_class_syscall_exit, \ | 154 | .class = &event_class_syscall_exit, \ |
156 | .event = &exit_syscall_print_##sname, \ | 155 | .event = &exit_syscall_print_##sname, \ |
157 | .raw_init = init_syscall_trace, \ | 156 | .raw_init = init_syscall_trace, \ |
158 | .define_fields = syscall_exit_define_fields, \ | ||
159 | .data = (void *)&__syscall_meta_##sname,\ | 157 | .data = (void *)&__syscall_meta_##sname,\ |
160 | } | 158 | } |
161 | 159 | ||
162 | #define SYSCALL_METADATA(sname, nb) \ | 160 | #define SYSCALL_METADATA(sname, nb) \ |
163 | SYSCALL_TRACE_ENTER_EVENT(sname); \ | 161 | SYSCALL_TRACE_ENTER_EVENT(sname); \ |
164 | SYSCALL_TRACE_EXIT_EVENT(sname); \ | 162 | SYSCALL_TRACE_EXIT_EVENT(sname); \ |
165 | static const struct syscall_metadata __used \ | 163 | static struct syscall_metadata __used \ |
166 | __attribute__((__aligned__(4))) \ | 164 | __attribute__((__aligned__(4))) \ |
167 | __attribute__((section("__syscalls_metadata"))) \ | 165 | __attribute__((section("__syscalls_metadata"))) \ |
168 | __syscall_meta_##sname = { \ | 166 | __syscall_meta_##sname = { \ |
@@ -172,12 +170,14 @@ extern struct ftrace_event_class event_class_syscall_exit; | |||
172 | .args = args_##sname, \ | 170 | .args = args_##sname, \ |
173 | .enter_event = &event_enter_##sname, \ | 171 | .enter_event = &event_enter_##sname, \ |
174 | .exit_event = &event_exit_##sname, \ | 172 | .exit_event = &event_exit_##sname, \ |
173 | .enter_fields = LIST_HEAD_INIT(__syscall_meta_##sname.enter_fields), \ | ||
174 | .exit_fields = LIST_HEAD_INIT(__syscall_meta_##sname.exit_fields), \ | ||
175 | }; | 175 | }; |
176 | 176 | ||
177 | #define SYSCALL_DEFINE0(sname) \ | 177 | #define SYSCALL_DEFINE0(sname) \ |
178 | SYSCALL_TRACE_ENTER_EVENT(_##sname); \ | 178 | SYSCALL_TRACE_ENTER_EVENT(_##sname); \ |
179 | SYSCALL_TRACE_EXIT_EVENT(_##sname); \ | 179 | SYSCALL_TRACE_EXIT_EVENT(_##sname); \ |
180 | static const struct syscall_metadata __used \ | 180 | static struct syscall_metadata __used \ |
181 | __attribute__((__aligned__(4))) \ | 181 | __attribute__((__aligned__(4))) \ |
182 | __attribute__((section("__syscalls_metadata"))) \ | 182 | __attribute__((section("__syscalls_metadata"))) \ |
183 | __syscall_meta__##sname = { \ | 183 | __syscall_meta__##sname = { \ |
@@ -185,6 +185,8 @@ extern struct ftrace_event_class event_class_syscall_exit; | |||
185 | .nb_args = 0, \ | 185 | .nb_args = 0, \ |
186 | .enter_event = &event_enter__##sname, \ | 186 | .enter_event = &event_enter__##sname, \ |
187 | .exit_event = &event_exit__##sname, \ | 187 | .exit_event = &event_exit__##sname, \ |
188 | .enter_fields = LIST_HEAD_INIT(__syscall_meta__##sname.enter_fields), \ | ||
189 | .exit_fields = LIST_HEAD_INIT(__syscall_meta__##sname.exit_fields), \ | ||
188 | }; \ | 190 | }; \ |
189 | asmlinkage long sys_##sname(void) | 191 | asmlinkage long sys_##sname(void) |
190 | #else | 192 | #else |
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h index 26d132418f92..c7e3bcd5d52f 100644 --- a/include/trace/ftrace.h +++ b/include/trace/ftrace.h | |||
@@ -430,6 +430,9 @@ static inline notrace int ftrace_get_offsets_##call( \ | |||
430 | * | 430 | * |
431 | * static struct ftrace_event_class __used event_class_<template> = { | 431 | * static struct ftrace_event_class __used event_class_<template> = { |
432 | * .system = "<system>", | 432 | * .system = "<system>", |
433 | * .define_fields = ftrace_define_fields_<call>, | ||
434 | * .fields = LIST_HEAD_INIT(event_class_##call.fields), \ | ||
435 | * .probe = ftrace_raw_event_##call, \ | ||
433 | * }; | 436 | * }; |
434 | * | 437 | * |
435 | * static struct ftrace_event_call __used | 438 | * static struct ftrace_event_call __used |
@@ -438,10 +441,8 @@ static inline notrace int ftrace_get_offsets_##call( \ | |||
438 | * .name = "<call>", | 441 | * .name = "<call>", |
439 | * .class = event_class_<template>, | 442 | * .class = event_class_<template>, |
440 | * .raw_init = trace_event_raw_init, | 443 | * .raw_init = trace_event_raw_init, |
441 | * .regfunc = ftrace_raw_reg_event_<call>, | 444 | * .event = &ftrace_event_type_<call>, |
442 | * .unregfunc = ftrace_raw_unreg_event_<call>, | ||
443 | * .print_fmt = print_fmt_<call>, | 445 | * .print_fmt = print_fmt_<call>, |
444 | * .define_fields = ftrace_define_fields_<call>, | ||
445 | * }; | 446 | * }; |
446 | * | 447 | * |
447 | */ | 448 | */ |
@@ -563,6 +564,8 @@ _TRACE_PERF_PROTO(call, PARAMS(proto)); \ | |||
563 | static const char print_fmt_##call[] = print; \ | 564 | static const char print_fmt_##call[] = print; \ |
564 | static struct ftrace_event_class __used event_class_##call = { \ | 565 | static struct ftrace_event_class __used event_class_##call = { \ |
565 | .system = __stringify(TRACE_SYSTEM), \ | 566 | .system = __stringify(TRACE_SYSTEM), \ |
567 | .define_fields = ftrace_define_fields_##call, \ | ||
568 | .fields = LIST_HEAD_INIT(event_class_##call.fields),\ | ||
566 | .probe = ftrace_raw_event_##call, \ | 569 | .probe = ftrace_raw_event_##call, \ |
567 | _TRACE_PERF_INIT(call) \ | 570 | _TRACE_PERF_INIT(call) \ |
568 | }; | 571 | }; |
@@ -578,7 +581,6 @@ __attribute__((section("_ftrace_events"))) event_##call = { \ | |||
578 | .event = &ftrace_event_type_##call, \ | 581 | .event = &ftrace_event_type_##call, \ |
579 | .raw_init = trace_event_raw_init, \ | 582 | .raw_init = trace_event_raw_init, \ |
580 | .print_fmt = print_fmt_##template, \ | 583 | .print_fmt = print_fmt_##template, \ |
581 | .define_fields = ftrace_define_fields_##template, \ | ||
582 | }; | 584 | }; |
583 | 585 | ||
584 | #undef DEFINE_EVENT_PRINT | 586 | #undef DEFINE_EVENT_PRINT |
@@ -594,7 +596,6 @@ __attribute__((section("_ftrace_events"))) event_##call = { \ | |||
594 | .event = &ftrace_event_type_##call, \ | 596 | .event = &ftrace_event_type_##call, \ |
595 | .raw_init = trace_event_raw_init, \ | 597 | .raw_init = trace_event_raw_init, \ |
596 | .print_fmt = print_fmt_##call, \ | 598 | .print_fmt = print_fmt_##call, \ |
597 | .define_fields = ftrace_define_fields_##template, \ | ||
598 | } | 599 | } |
599 | 600 | ||
600 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | 601 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) |
diff --git a/include/trace/syscall.h b/include/trace/syscall.h index e5e5f48dbfb3..39647743cd95 100644 --- a/include/trace/syscall.h +++ b/include/trace/syscall.h | |||
@@ -25,6 +25,8 @@ struct syscall_metadata { | |||
25 | int nb_args; | 25 | int nb_args; |
26 | const char **types; | 26 | const char **types; |
27 | const char **args; | 27 | const char **args; |
28 | struct list_head enter_fields; | ||
29 | struct list_head exit_fields; | ||
28 | 30 | ||
29 | struct ftrace_event_call *enter_event; | 31 | struct ftrace_event_call *enter_event; |
30 | struct ftrace_event_call *exit_event; | 32 | struct ftrace_event_call *exit_event; |
@@ -34,8 +36,6 @@ struct syscall_metadata { | |||
34 | extern unsigned long arch_syscall_addr(int nr); | 36 | extern unsigned long arch_syscall_addr(int nr); |
35 | extern int init_syscall_trace(struct ftrace_event_call *call); | 37 | extern int init_syscall_trace(struct ftrace_event_call *call); |
36 | 38 | ||
37 | extern int syscall_enter_define_fields(struct ftrace_event_call *call); | ||
38 | extern int syscall_exit_define_fields(struct ftrace_event_call *call); | ||
39 | extern int reg_event_syscall_enter(struct ftrace_event_call *call); | 39 | extern int reg_event_syscall_enter(struct ftrace_event_call *call); |
40 | extern void unreg_event_syscall_enter(struct ftrace_event_call *call); | 40 | extern void unreg_event_syscall_enter(struct ftrace_event_call *call); |
41 | extern int reg_event_syscall_exit(struct ftrace_event_call *call); | 41 | extern int reg_event_syscall_exit(struct ftrace_event_call *call); |