diff options
Diffstat (limited to 'tools/perf/util/trace-event-parse.c')
-rw-r--r-- | tools/perf/util/trace-event-parse.c | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c index 0715c843c2e7..3aabcd687cd5 100644 --- a/tools/perf/util/trace-event-parse.c +++ b/tools/perf/util/trace-event-parse.c | |||
@@ -162,25 +162,16 @@ int trace_parse_common_pid(struct pevent *pevent, void *data) | |||
162 | return pevent_data_pid(pevent, &record); | 162 | return pevent_data_pid(pevent, &record); |
163 | } | 163 | } |
164 | 164 | ||
165 | unsigned long long read_size(struct pevent *pevent, void *ptr, int size) | 165 | unsigned long long read_size(struct event_format *event, void *ptr, int size) |
166 | { | 166 | { |
167 | return pevent_read_number(pevent, ptr, size); | 167 | return pevent_read_number(event->pevent, ptr, size); |
168 | } | 168 | } |
169 | 169 | ||
170 | void print_trace_event(struct pevent *pevent, int cpu, void *data, int size) | 170 | void event_format__print(struct event_format *event, |
171 | int cpu, void *data, int size) | ||
171 | { | 172 | { |
172 | struct event_format *event; | ||
173 | struct pevent_record record; | 173 | struct pevent_record record; |
174 | struct trace_seq s; | 174 | struct trace_seq s; |
175 | int type; | ||
176 | |||
177 | type = trace_parse_common_type(pevent, data); | ||
178 | |||
179 | event = pevent_find_event(pevent, type); | ||
180 | if (!event) { | ||
181 | warning("ug! no event found for type %d", type); | ||
182 | return; | ||
183 | } | ||
184 | 175 | ||
185 | memset(&record, 0, sizeof(record)); | 176 | memset(&record, 0, sizeof(record)); |
186 | record.cpu = cpu; | 177 | record.cpu = cpu; |
@@ -192,6 +183,19 @@ void print_trace_event(struct pevent *pevent, int cpu, void *data, int size) | |||
192 | trace_seq_do_printf(&s); | 183 | trace_seq_do_printf(&s); |
193 | } | 184 | } |
194 | 185 | ||
186 | void print_trace_event(struct pevent *pevent, int cpu, void *data, int size) | ||
187 | { | ||
188 | int type = trace_parse_common_type(pevent, data); | ||
189 | struct event_format *event = pevent_find_event(pevent, type); | ||
190 | |||
191 | if (!event) { | ||
192 | warning("ug! no event found for type %d", type); | ||
193 | return; | ||
194 | } | ||
195 | |||
196 | event_format__print(event, cpu, data, size); | ||
197 | } | ||
198 | |||
195 | void print_event(struct pevent *pevent, int cpu, void *data, int size, | 199 | void print_event(struct pevent *pevent, int cpu, void *data, int size, |
196 | unsigned long long nsecs, char *comm) | 200 | unsigned long long nsecs, char *comm) |
197 | { | 201 | { |
@@ -217,7 +221,7 @@ void print_event(struct pevent *pevent, int cpu, void *data, int size, | |||
217 | } | 221 | } |
218 | 222 | ||
219 | void parse_proc_kallsyms(struct pevent *pevent, | 223 | void parse_proc_kallsyms(struct pevent *pevent, |
220 | char *file, unsigned int size __unused) | 224 | char *file, unsigned int size __maybe_unused) |
221 | { | 225 | { |
222 | unsigned long long addr; | 226 | unsigned long long addr; |
223 | char *func; | 227 | char *func; |
@@ -225,31 +229,29 @@ void parse_proc_kallsyms(struct pevent *pevent, | |||
225 | char *next = NULL; | 229 | char *next = NULL; |
226 | char *addr_str; | 230 | char *addr_str; |
227 | char *mod; | 231 | char *mod; |
228 | char ch; | 232 | char *fmt; |
229 | 233 | ||
230 | line = strtok_r(file, "\n", &next); | 234 | line = strtok_r(file, "\n", &next); |
231 | while (line) { | 235 | while (line) { |
232 | mod = NULL; | 236 | mod = NULL; |
233 | sscanf(line, "%as %c %as\t[%as", | 237 | addr_str = strtok_r(line, " ", &fmt); |
234 | (float *)(void *)&addr_str, /* workaround gcc warning */ | ||
235 | &ch, (float *)(void *)&func, (float *)(void *)&mod); | ||
236 | addr = strtoull(addr_str, NULL, 16); | 238 | addr = strtoull(addr_str, NULL, 16); |
237 | free(addr_str); | 239 | /* skip character */ |
238 | 240 | strtok_r(NULL, " ", &fmt); | |
239 | /* truncate the extra ']' */ | 241 | func = strtok_r(NULL, "\t", &fmt); |
242 | mod = strtok_r(NULL, "]", &fmt); | ||
243 | /* truncate the extra '[' */ | ||
240 | if (mod) | 244 | if (mod) |
241 | mod[strlen(mod) - 1] = 0; | 245 | mod = mod + 1; |
242 | 246 | ||
243 | pevent_register_function(pevent, func, addr, mod); | 247 | pevent_register_function(pevent, func, addr, mod); |
244 | free(func); | ||
245 | free(mod); | ||
246 | 248 | ||
247 | line = strtok_r(NULL, "\n", &next); | 249 | line = strtok_r(NULL, "\n", &next); |
248 | } | 250 | } |
249 | } | 251 | } |
250 | 252 | ||
251 | void parse_ftrace_printk(struct pevent *pevent, | 253 | void parse_ftrace_printk(struct pevent *pevent, |
252 | char *file, unsigned int size __unused) | 254 | char *file, unsigned int size __maybe_unused) |
253 | { | 255 | { |
254 | unsigned long long addr; | 256 | unsigned long long addr; |
255 | char *printk; | 257 | char *printk; |
@@ -289,7 +291,7 @@ struct event_format *trace_find_next_event(struct pevent *pevent, | |||
289 | { | 291 | { |
290 | static int idx; | 292 | static int idx; |
291 | 293 | ||
292 | if (!pevent->events) | 294 | if (!pevent || !pevent->events) |
293 | return NULL; | 295 | return NULL; |
294 | 296 | ||
295 | if (!event) { | 297 | if (!event) { |