aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/trace-event-read.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util/trace-event-read.c')
-rw-r--r--tools/perf/util/trace-event-read.c52
1 files changed, 31 insertions, 21 deletions
diff --git a/tools/perf/util/trace-event-read.c b/tools/perf/util/trace-event-read.c
index af215c0d2379..f2112270c663 100644
--- a/tools/perf/util/trace-event-read.c
+++ b/tools/perf/util/trace-event-read.c
@@ -39,10 +39,6 @@
39 39
40static int input_fd; 40static int input_fd;
41 41
42int file_bigendian;
43int host_bigendian;
44static int long_size;
45
46static ssize_t trace_data_size; 42static ssize_t trace_data_size;
47static bool repipe; 43static bool repipe;
48 44
@@ -216,7 +212,7 @@ static int read_ftrace_printk(struct pevent *pevent)
216static int read_header_files(struct pevent *pevent) 212static int read_header_files(struct pevent *pevent)
217{ 213{
218 unsigned long long size; 214 unsigned long long size;
219 char *header_event; 215 char *header_page;
220 char buf[BUFSIZ]; 216 char buf[BUFSIZ];
221 int ret = 0; 217 int ret = 0;
222 218
@@ -229,13 +225,26 @@ static int read_header_files(struct pevent *pevent)
229 } 225 }
230 226
231 size = read8(pevent); 227 size = read8(pevent);
232 skip(size);
233 228
234 /* 229 header_page = malloc(size);
235 * The size field in the page is of type long, 230 if (header_page == NULL)
236 * use that instead, since it represents the kernel. 231 return -1;
237 */ 232
238 long_size = header_page_size_size; 233 if (do_read(header_page, size) < 0) {
234 pr_debug("did not read header page");
235 free(header_page);
236 return -1;
237 }
238
239 if (!pevent_parse_header_page(pevent, header_page, size,
240 pevent_get_long_size(pevent))) {
241 /*
242 * The commit field in the page is of type long,
243 * use that instead, since it represents the kernel.
244 */
245 pevent_set_long_size(pevent, pevent->header_page_size_size);
246 }
247 free(header_page);
239 248
240 if (do_read(buf, 13) < 0) 249 if (do_read(buf, 13) < 0)
241 return -1; 250 return -1;
@@ -246,14 +255,8 @@ static int read_header_files(struct pevent *pevent)
246 } 255 }
247 256
248 size = read8(pevent); 257 size = read8(pevent);
249 header_event = malloc(size); 258 skip(size);
250 if (header_event == NULL)
251 return -1;
252
253 if (do_read(header_event, size) < 0)
254 ret = -1;
255 259
256 free(header_event);
257 return ret; 260 return ret;
258} 261}
259 262
@@ -349,6 +352,10 @@ ssize_t trace_report(int fd, struct pevent **ppevent, bool __repipe)
349 int show_funcs = 0; 352 int show_funcs = 0;
350 int show_printk = 0; 353 int show_printk = 0;
351 ssize_t size = -1; 354 ssize_t size = -1;
355 int file_bigendian;
356 int host_bigendian;
357 int file_long_size;
358 int file_page_size;
352 struct pevent *pevent; 359 struct pevent *pevent;
353 int err; 360 int err;
354 361
@@ -391,12 +398,15 @@ ssize_t trace_report(int fd, struct pevent **ppevent, bool __repipe)
391 398
392 if (do_read(buf, 1) < 0) 399 if (do_read(buf, 1) < 0)
393 goto out; 400 goto out;
394 long_size = buf[0]; 401 file_long_size = buf[0];
395 402
396 page_size = read4(pevent); 403 file_page_size = read4(pevent);
397 if (!page_size) 404 if (!file_page_size)
398 goto out; 405 goto out;
399 406
407 pevent_set_long_size(pevent, file_long_size);
408 pevent_set_page_size(pevent, file_page_size);
409
400 err = read_header_files(pevent); 410 err = read_header_files(pevent);
401 if (err) 411 if (err)
402 goto out; 412 goto out;