diff options
author | Tom Zanussi <tzanussi@gmail.com> | 2009-10-06 02:09:50 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-10-06 09:04:45 -0400 |
commit | 26a50744b21fff65bd754874072857bee8967f4d (patch) | |
tree | 4819820f0841090232fcd2525f496f787fd411c7 /kernel/trace/trace_syscalls.c | |
parent | d9b2002c406011164f245de7a81304625989f1c9 (diff) |
tracing/events: Add 'signed' field to format files
The sign info used for filters in the kernel is also useful to
applications that process the trace stream. Add it to the format
files and make it available to userspace.
Signed-off-by: Tom Zanussi <tzanussi@gmail.com>
Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: rostedt@goodmis.org
Cc: lizf@cn.fujitsu.com
Cc: hch@infradead.org
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
LKML-Reference: <1254809398-8078-2-git-send-email-tzanussi@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/trace/trace_syscalls.c')
-rw-r--r-- | kernel/trace/trace_syscalls.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c index 527e17eae575..d99abc427c39 100644 --- a/kernel/trace/trace_syscalls.c +++ b/kernel/trace/trace_syscalls.c | |||
@@ -103,7 +103,8 @@ extern char *__bad_type_size(void); | |||
103 | #define SYSCALL_FIELD(type, name) \ | 103 | #define SYSCALL_FIELD(type, name) \ |
104 | sizeof(type) != sizeof(trace.name) ? \ | 104 | sizeof(type) != sizeof(trace.name) ? \ |
105 | __bad_type_size() : \ | 105 | __bad_type_size() : \ |
106 | #type, #name, offsetof(typeof(trace), name), sizeof(trace.name) | 106 | #type, #name, offsetof(typeof(trace), name), \ |
107 | sizeof(trace.name), is_signed_type(type) | ||
107 | 108 | ||
108 | int syscall_enter_format(struct ftrace_event_call *call, struct trace_seq *s) | 109 | int syscall_enter_format(struct ftrace_event_call *call, struct trace_seq *s) |
109 | { | 110 | { |
@@ -120,7 +121,8 @@ int syscall_enter_format(struct ftrace_event_call *call, struct trace_seq *s) | |||
120 | if (!entry) | 121 | if (!entry) |
121 | return 0; | 122 | return 0; |
122 | 123 | ||
123 | ret = trace_seq_printf(s, "\tfield:%s %s;\toffset:%zu;\tsize:%zu;\n", | 124 | ret = trace_seq_printf(s, "\tfield:%s %s;\toffset:%zu;\tsize:%zu;" |
125 | "\tsigned:%u;\n", | ||
124 | SYSCALL_FIELD(int, nr)); | 126 | SYSCALL_FIELD(int, nr)); |
125 | if (!ret) | 127 | if (!ret) |
126 | return 0; | 128 | return 0; |
@@ -130,8 +132,10 @@ int syscall_enter_format(struct ftrace_event_call *call, struct trace_seq *s) | |||
130 | entry->args[i]); | 132 | entry->args[i]); |
131 | if (!ret) | 133 | if (!ret) |
132 | return 0; | 134 | return 0; |
133 | ret = trace_seq_printf(s, "\toffset:%d;\tsize:%zu;\n", offset, | 135 | ret = trace_seq_printf(s, "\toffset:%d;\tsize:%zu;" |
134 | sizeof(unsigned long)); | 136 | "\tsigned:%u;\n", offset, |
137 | sizeof(unsigned long), | ||
138 | is_signed_type(unsigned long)); | ||
135 | if (!ret) | 139 | if (!ret) |
136 | return 0; | 140 | return 0; |
137 | offset += sizeof(unsigned long); | 141 | offset += sizeof(unsigned long); |
@@ -163,8 +167,10 @@ int syscall_exit_format(struct ftrace_event_call *call, struct trace_seq *s) | |||
163 | struct syscall_trace_exit trace; | 167 | struct syscall_trace_exit trace; |
164 | 168 | ||
165 | ret = trace_seq_printf(s, | 169 | ret = trace_seq_printf(s, |
166 | "\tfield:%s %s;\toffset:%zu;\tsize:%zu;\n" | 170 | "\tfield:%s %s;\toffset:%zu;\tsize:%zu;" |
167 | "\tfield:%s %s;\toffset:%zu;\tsize:%zu;\n", | 171 | "\tsigned:%u;\n" |
172 | "\tfield:%s %s;\toffset:%zu;\tsize:%zu;" | ||
173 | "\tsigned:%u;\n", | ||
168 | SYSCALL_FIELD(int, nr), | 174 | SYSCALL_FIELD(int, nr), |
169 | SYSCALL_FIELD(long, ret)); | 175 | SYSCALL_FIELD(long, ret)); |
170 | if (!ret) | 176 | if (!ret) |
@@ -212,7 +218,7 @@ int syscall_exit_define_fields(struct ftrace_event_call *call) | |||
212 | if (ret) | 218 | if (ret) |
213 | return ret; | 219 | return ret; |
214 | 220 | ||
215 | ret = trace_define_field(call, SYSCALL_FIELD(long, ret), 0, | 221 | ret = trace_define_field(call, SYSCALL_FIELD(long, ret), |
216 | FILTER_OTHER); | 222 | FILTER_OTHER); |
217 | 223 | ||
218 | return ret; | 224 | return ret; |