1538bafb5SSteven Rostedt /* 2538bafb5SSteven Rostedt * Copyright (C) 2009, Steven Rostedt <srostedt@redhat.com> 3538bafb5SSteven Rostedt * 4538bafb5SSteven Rostedt * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5538bafb5SSteven Rostedt * 6538bafb5SSteven Rostedt * This program is free software; you can redistribute it and/or modify 7538bafb5SSteven Rostedt * it under the terms of the GNU General Public License as published by 8538bafb5SSteven Rostedt * the Free Software Foundation; version 2 of the License (not later!) 9538bafb5SSteven Rostedt * 10538bafb5SSteven Rostedt * This program is distributed in the hope that it will be useful, 11538bafb5SSteven Rostedt * but WITHOUT ANY WARRANTY; without even the implied warranty of 12538bafb5SSteven Rostedt * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13538bafb5SSteven Rostedt * GNU General Public License for more details. 14538bafb5SSteven Rostedt * 15538bafb5SSteven Rostedt * You should have received a copy of the GNU General Public License 16538bafb5SSteven Rostedt * along with this program; if not, write to the Free Software 17538bafb5SSteven Rostedt * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18538bafb5SSteven Rostedt * 19538bafb5SSteven Rostedt * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 20538bafb5SSteven Rostedt */ 21538bafb5SSteven Rostedt #include <dirent.h> 22538bafb5SSteven Rostedt #include <stdio.h> 23538bafb5SSteven Rostedt #include <stdlib.h> 24538bafb5SSteven Rostedt #include <string.h> 25538bafb5SSteven Rostedt #include <stdarg.h> 26538bafb5SSteven Rostedt #include <sys/types.h> 27538bafb5SSteven Rostedt #include <sys/stat.h> 28538bafb5SSteven Rostedt #include <sys/wait.h> 29538bafb5SSteven Rostedt #include <sys/mman.h> 30538bafb5SSteven Rostedt #include <fcntl.h> 31538bafb5SSteven Rostedt #include <unistd.h> 32538bafb5SSteven Rostedt #include <errno.h> 33538bafb5SSteven Rostedt 341ef2ed10SFrederic Weisbecker #include "../perf.h" 35538bafb5SSteven Rostedt #include "util.h" 36538bafb5SSteven Rostedt #include "trace-event.h" 3784f5d36fSJiri Olsa #include "debug.h" 38538bafb5SSteven Rostedt 39538bafb5SSteven Rostedt static int input_fd; 40538bafb5SSteven Rostedt 41ebf3c675SNamhyung Kim static ssize_t trace_data_size; 42454c407eSTom Zanussi static bool repipe; 439215545eSTom Zanussi 444a31e565SNamhyung Kim static int __do_read(int fd, void *buf, int size) 459215545eSTom Zanussi { 469215545eSTom Zanussi int rsize = size; 479215545eSTom Zanussi 489215545eSTom Zanussi while (size) { 499215545eSTom Zanussi int ret = read(fd, buf, size); 509215545eSTom Zanussi 519215545eSTom Zanussi if (ret <= 0) 529215545eSTom Zanussi return -1; 539215545eSTom Zanussi 54454c407eSTom Zanussi if (repipe) { 55454c407eSTom Zanussi int retw = write(STDOUT_FILENO, buf, ret); 56454c407eSTom Zanussi 574a31e565SNamhyung Kim if (retw <= 0 || retw != ret) { 584a31e565SNamhyung Kim pr_debug("repiping input file"); 594a31e565SNamhyung Kim return -1; 604a31e565SNamhyung Kim } 61454c407eSTom Zanussi } 62454c407eSTom Zanussi 639215545eSTom Zanussi size -= ret; 649215545eSTom Zanussi buf += ret; 659215545eSTom Zanussi } 669215545eSTom Zanussi 679215545eSTom Zanussi return rsize; 689215545eSTom Zanussi } 699215545eSTom Zanussi 704a31e565SNamhyung Kim static int do_read(void *data, int size) 71538bafb5SSteven Rostedt { 72538bafb5SSteven Rostedt int r; 73538bafb5SSteven Rostedt 744a31e565SNamhyung Kim r = __do_read(input_fd, data, size); 754a31e565SNamhyung Kim if (r <= 0) { 764a31e565SNamhyung Kim pr_debug("reading input file (size expected=%d received=%d)", 77538bafb5SSteven Rostedt size, r); 784a31e565SNamhyung Kim return -1; 794a31e565SNamhyung Kim } 809215545eSTom Zanussi 81ebf3c675SNamhyung Kim trace_data_size += r; 829215545eSTom Zanussi 83538bafb5SSteven Rostedt return r; 84538bafb5SSteven Rostedt } 85538bafb5SSteven Rostedt 86cbb5cf7fSTom Zanussi /* If it fails, the next read will report it */ 87cbb5cf7fSTom Zanussi static void skip(int size) 88cbb5cf7fSTom Zanussi { 89cbb5cf7fSTom Zanussi char buf[BUFSIZ]; 90cbb5cf7fSTom Zanussi int r; 91cbb5cf7fSTom Zanussi 92cbb5cf7fSTom Zanussi while (size) { 93cbb5cf7fSTom Zanussi r = size > BUFSIZ ? BUFSIZ : size; 944a31e565SNamhyung Kim do_read(buf, r); 95cbb5cf7fSTom Zanussi size -= r; 96cbb5cf7fSTom Zanussi }; 97cbb5cf7fSTom Zanussi } 98cbb5cf7fSTom Zanussi 99096177a8STzvetomir Stoyanov (VMware) static unsigned int read4(struct tep_handle *pevent) 100538bafb5SSteven Rostedt { 101538bafb5SSteven Rostedt unsigned int data; 102538bafb5SSteven Rostedt 1034a31e565SNamhyung Kim if (do_read(&data, 4) < 0) 1044a31e565SNamhyung Kim return 0; 105da378962SArnaldo Carvalho de Melo return __data2host4(pevent, data); 106538bafb5SSteven Rostedt } 107538bafb5SSteven Rostedt 108096177a8STzvetomir Stoyanov (VMware) static unsigned long long read8(struct tep_handle *pevent) 109538bafb5SSteven Rostedt { 110538bafb5SSteven Rostedt unsigned long long data; 111538bafb5SSteven Rostedt 1124a31e565SNamhyung Kim if (do_read(&data, 8) < 0) 1134a31e565SNamhyung Kim return 0; 114da378962SArnaldo Carvalho de Melo return __data2host8(pevent, data); 115538bafb5SSteven Rostedt } 116538bafb5SSteven Rostedt 117538bafb5SSteven Rostedt static char *read_string(void) 118538bafb5SSteven Rostedt { 119538bafb5SSteven Rostedt char buf[BUFSIZ]; 120538bafb5SSteven Rostedt char *str = NULL; 121538bafb5SSteven Rostedt int size = 0; 122f887f301SXiao Guangrong off_t r; 1239215545eSTom Zanussi char c; 124538bafb5SSteven Rostedt 125538bafb5SSteven Rostedt for (;;) { 1269215545eSTom Zanussi r = read(input_fd, &c, 1); 127452958fdSNamhyung Kim if (r < 0) { 128452958fdSNamhyung Kim pr_debug("reading input file"); 129452958fdSNamhyung Kim goto out; 130452958fdSNamhyung Kim } 131538bafb5SSteven Rostedt 132452958fdSNamhyung Kim if (!r) { 133452958fdSNamhyung Kim pr_debug("no data"); 134452958fdSNamhyung Kim goto out; 135452958fdSNamhyung Kim } 136538bafb5SSteven Rostedt 137454c407eSTom Zanussi if (repipe) { 138454c407eSTom Zanussi int retw = write(STDOUT_FILENO, &c, 1); 139454c407eSTom Zanussi 140452958fdSNamhyung Kim if (retw <= 0 || retw != r) { 141452958fdSNamhyung Kim pr_debug("repiping input file string"); 142452958fdSNamhyung Kim goto out; 143452958fdSNamhyung Kim } 144454c407eSTom Zanussi } 145454c407eSTom Zanussi 1469215545eSTom Zanussi buf[size++] = c; 1479215545eSTom Zanussi 1489215545eSTom Zanussi if (!c) 149538bafb5SSteven Rostedt break; 150538bafb5SSteven Rostedt } 151538bafb5SSteven Rostedt 152ebf3c675SNamhyung Kim trace_data_size += size; 1539215545eSTom Zanussi 154a4c98367SNamhyung Kim str = malloc(size); 155a4c98367SNamhyung Kim if (str) 156538bafb5SSteven Rostedt memcpy(str, buf, size); 157452958fdSNamhyung Kim out: 158538bafb5SSteven Rostedt return str; 159538bafb5SSteven Rostedt } 160538bafb5SSteven Rostedt 161096177a8STzvetomir Stoyanov (VMware) static int read_proc_kallsyms(struct tep_handle *pevent) 162538bafb5SSteven Rostedt { 163538bafb5SSteven Rostedt unsigned int size; 164538bafb5SSteven Rostedt 165da378962SArnaldo Carvalho de Melo size = read4(pevent); 166538bafb5SSteven Rostedt if (!size) 167a4c98367SNamhyung Kim return 0; 1684263ceceSArnaldo Carvalho de Melo /* 1694263ceceSArnaldo Carvalho de Melo * Just skip it, now that we configure libtraceevent to use the 1704263ceceSArnaldo Carvalho de Melo * tools/perf/ symbol resolver. 1714263ceceSArnaldo Carvalho de Melo * 1724263ceceSArnaldo Carvalho de Melo * We need to skip it so that we can continue parsing old perf.data 1734263ceceSArnaldo Carvalho de Melo * files, that contains this /proc/kallsyms payload. 1744263ceceSArnaldo Carvalho de Melo * 1754263ceceSArnaldo Carvalho de Melo * Newer perf.data files will have just the 4-bytes zeros "kallsyms 1764263ceceSArnaldo Carvalho de Melo * payload", so that older tools can continue reading it and interpret 1774263ceceSArnaldo Carvalho de Melo * it as "no kallsyms payload is present". 1784263ceceSArnaldo Carvalho de Melo */ 1794263ceceSArnaldo Carvalho de Melo lseek(input_fd, size, SEEK_CUR); 1804263ceceSArnaldo Carvalho de Melo trace_data_size += size; 181a4c98367SNamhyung Kim return 0; 182538bafb5SSteven Rostedt } 183538bafb5SSteven Rostedt 184096177a8STzvetomir Stoyanov (VMware) static int read_ftrace_printk(struct tep_handle *pevent) 185538bafb5SSteven Rostedt { 186538bafb5SSteven Rostedt unsigned int size; 187538bafb5SSteven Rostedt char *buf; 188538bafb5SSteven Rostedt 1894a31e565SNamhyung Kim /* it can have 0 size */ 190da378962SArnaldo Carvalho de Melo size = read4(pevent); 191538bafb5SSteven Rostedt if (!size) 192a4c98367SNamhyung Kim return 0; 193538bafb5SSteven Rostedt 194d4b364dfSTommi Rantala buf = malloc(size + 1); 195a4c98367SNamhyung Kim if (buf == NULL) 196a4c98367SNamhyung Kim return -1; 197a4c98367SNamhyung Kim 1984a31e565SNamhyung Kim if (do_read(buf, size) < 0) { 1994a31e565SNamhyung Kim free(buf); 2004a31e565SNamhyung Kim return -1; 2014a31e565SNamhyung Kim } 202538bafb5SSteven Rostedt 203d4b364dfSTommi Rantala buf[size] = '\0'; 204d4b364dfSTommi Rantala 205da378962SArnaldo Carvalho de Melo parse_ftrace_printk(pevent, buf, size); 206538bafb5SSteven Rostedt 207538bafb5SSteven Rostedt free(buf); 208a4c98367SNamhyung Kim return 0; 209538bafb5SSteven Rostedt } 210538bafb5SSteven Rostedt 211096177a8STzvetomir Stoyanov (VMware) static int read_header_files(struct tep_handle *pevent) 212538bafb5SSteven Rostedt { 213538bafb5SSteven Rostedt unsigned long long size; 21494b4d89eSNamhyung Kim char *header_page; 215538bafb5SSteven Rostedt char buf[BUFSIZ]; 2164a31e565SNamhyung Kim int ret = 0; 217538bafb5SSteven Rostedt 2184a31e565SNamhyung Kim if (do_read(buf, 12) < 0) 2194a31e565SNamhyung Kim return -1; 220538bafb5SSteven Rostedt 221452958fdSNamhyung Kim if (memcmp(buf, "header_page", 12) != 0) { 222452958fdSNamhyung Kim pr_debug("did not read header page"); 223452958fdSNamhyung Kim return -1; 224452958fdSNamhyung Kim } 225538bafb5SSteven Rostedt 226da378962SArnaldo Carvalho de Melo size = read8(pevent); 22794b4d89eSNamhyung Kim 22894b4d89eSNamhyung Kim header_page = malloc(size); 22994b4d89eSNamhyung Kim if (header_page == NULL) 23094b4d89eSNamhyung Kim return -1; 23194b4d89eSNamhyung Kim 23294b4d89eSNamhyung Kim if (do_read(header_page, size) < 0) { 23394b4d89eSNamhyung Kim pr_debug("did not read header page"); 23494b4d89eSNamhyung Kim free(header_page); 23594b4d89eSNamhyung Kim return -1; 23694b4d89eSNamhyung Kim } 23794b4d89eSNamhyung Kim 238c60167c1STzvetomir Stoyanov (VMware) if (!tep_parse_header_page(pevent, header_page, size, 23994b4d89eSNamhyung Kim pevent_get_long_size(pevent))) { 24094b4d89eSNamhyung Kim /* 24194b4d89eSNamhyung Kim * The commit field in the page is of type long, 24294b4d89eSNamhyung Kim * use that instead, since it represents the kernel. 24394b4d89eSNamhyung Kim */ 24494b4d89eSNamhyung Kim pevent_set_long_size(pevent, pevent->header_page_size_size); 24594b4d89eSNamhyung Kim } 24694b4d89eSNamhyung Kim free(header_page); 247538bafb5SSteven Rostedt 2484a31e565SNamhyung Kim if (do_read(buf, 13) < 0) 2494a31e565SNamhyung Kim return -1; 2504a31e565SNamhyung Kim 251452958fdSNamhyung Kim if (memcmp(buf, "header_event", 13) != 0) { 252452958fdSNamhyung Kim pr_debug("did not read header event"); 253452958fdSNamhyung Kim return -1; 254452958fdSNamhyung Kim } 255538bafb5SSteven Rostedt 256da378962SArnaldo Carvalho de Melo size = read8(pevent); 2572b2efc7fSNamhyung Kim skip(size); 258a4c98367SNamhyung Kim 2594a31e565SNamhyung Kim return ret; 260538bafb5SSteven Rostedt } 261538bafb5SSteven Rostedt 262096177a8STzvetomir Stoyanov (VMware) static int read_ftrace_file(struct tep_handle *pevent, unsigned long long size) 263538bafb5SSteven Rostedt { 264a7619aefSNamhyung Kim int ret; 265538bafb5SSteven Rostedt char *buf; 266538bafb5SSteven Rostedt 267a4c98367SNamhyung Kim buf = malloc(size); 268a7619aefSNamhyung Kim if (buf == NULL) { 269a7619aefSNamhyung Kim pr_debug("memory allocation failure\n"); 2704a31e565SNamhyung Kim return -1; 2714a31e565SNamhyung Kim } 2724a31e565SNamhyung Kim 273a7619aefSNamhyung Kim ret = do_read(buf, size); 274a7619aefSNamhyung Kim if (ret < 0) { 275a7619aefSNamhyung Kim pr_debug("error reading ftrace file.\n"); 276a7619aefSNamhyung Kim goto out; 277a7619aefSNamhyung Kim } 278a7619aefSNamhyung Kim 279a7619aefSNamhyung Kim ret = parse_ftrace_file(pevent, buf, size); 280a7619aefSNamhyung Kim if (ret < 0) 281a7619aefSNamhyung Kim pr_debug("error parsing ftrace file.\n"); 282a7619aefSNamhyung Kim out: 283538bafb5SSteven Rostedt free(buf); 284a7619aefSNamhyung Kim return ret; 285538bafb5SSteven Rostedt } 286538bafb5SSteven Rostedt 287096177a8STzvetomir Stoyanov (VMware) static int read_event_file(struct tep_handle *pevent, char *sys, 288da378962SArnaldo Carvalho de Melo unsigned long long size) 289538bafb5SSteven Rostedt { 290a7619aefSNamhyung Kim int ret; 291538bafb5SSteven Rostedt char *buf; 292538bafb5SSteven Rostedt 293a4c98367SNamhyung Kim buf = malloc(size); 294a7619aefSNamhyung Kim if (buf == NULL) { 295a7619aefSNamhyung Kim pr_debug("memory allocation failure\n"); 2964a31e565SNamhyung Kim return -1; 2974a31e565SNamhyung Kim } 2984a31e565SNamhyung Kim 299a7619aefSNamhyung Kim ret = do_read(buf, size); 300a7619aefSNamhyung Kim if (ret < 0) { 301538bafb5SSteven Rostedt free(buf); 302a7619aefSNamhyung Kim goto out; 303a7619aefSNamhyung Kim } 304a7619aefSNamhyung Kim 305a7619aefSNamhyung Kim ret = parse_event_file(pevent, buf, size, sys); 306a7619aefSNamhyung Kim if (ret < 0) 307a7619aefSNamhyung Kim pr_debug("error parsing event file.\n"); 308a7619aefSNamhyung Kim out: 309a7619aefSNamhyung Kim free(buf); 310a7619aefSNamhyung Kim return ret; 311538bafb5SSteven Rostedt } 312538bafb5SSteven Rostedt 313096177a8STzvetomir Stoyanov (VMware) static int read_ftrace_files(struct tep_handle *pevent) 314538bafb5SSteven Rostedt { 315538bafb5SSteven Rostedt unsigned long long size; 316538bafb5SSteven Rostedt int count; 317538bafb5SSteven Rostedt int i; 318a4c98367SNamhyung Kim int ret; 319538bafb5SSteven Rostedt 320da378962SArnaldo Carvalho de Melo count = read4(pevent); 321538bafb5SSteven Rostedt 322538bafb5SSteven Rostedt for (i = 0; i < count; i++) { 323da378962SArnaldo Carvalho de Melo size = read8(pevent); 324a4c98367SNamhyung Kim ret = read_ftrace_file(pevent, size); 325a4c98367SNamhyung Kim if (ret) 326a4c98367SNamhyung Kim return ret; 327538bafb5SSteven Rostedt } 328a4c98367SNamhyung Kim return 0; 329538bafb5SSteven Rostedt } 330538bafb5SSteven Rostedt 331096177a8STzvetomir Stoyanov (VMware) static int read_event_files(struct tep_handle *pevent) 332538bafb5SSteven Rostedt { 333538bafb5SSteven Rostedt unsigned long long size; 334538bafb5SSteven Rostedt char *sys; 335538bafb5SSteven Rostedt int systems; 336538bafb5SSteven Rostedt int count; 337538bafb5SSteven Rostedt int i,x; 338a4c98367SNamhyung Kim int ret; 339538bafb5SSteven Rostedt 340da378962SArnaldo Carvalho de Melo systems = read4(pevent); 341538bafb5SSteven Rostedt 342538bafb5SSteven Rostedt for (i = 0; i < systems; i++) { 343538bafb5SSteven Rostedt sys = read_string(); 344a4c98367SNamhyung Kim if (sys == NULL) 345a4c98367SNamhyung Kim return -1; 346538bafb5SSteven Rostedt 347da378962SArnaldo Carvalho de Melo count = read4(pevent); 3484a31e565SNamhyung Kim 349538bafb5SSteven Rostedt for (x=0; x < count; x++) { 350da378962SArnaldo Carvalho de Melo size = read8(pevent); 351a4c98367SNamhyung Kim ret = read_event_file(pevent, sys, size); 352a4c98367SNamhyung Kim if (ret) 353a4c98367SNamhyung Kim return ret; 354538bafb5SSteven Rostedt } 355538bafb5SSteven Rostedt } 356a4c98367SNamhyung Kim return 0; 357538bafb5SSteven Rostedt } 358538bafb5SSteven Rostedt 359096177a8STzvetomir Stoyanov (VMware) static int read_saved_cmdline(struct tep_handle *pevent) 360cd4ceb63SNamhyung Kim { 361cd4ceb63SNamhyung Kim unsigned long long size; 362cd4ceb63SNamhyung Kim char *buf; 363a7619aefSNamhyung Kim int ret; 364cd4ceb63SNamhyung Kim 365cd4ceb63SNamhyung Kim /* it can have 0 size */ 366cd4ceb63SNamhyung Kim size = read8(pevent); 367cd4ceb63SNamhyung Kim if (!size) 368cd4ceb63SNamhyung Kim return 0; 369cd4ceb63SNamhyung Kim 370cd4ceb63SNamhyung Kim buf = malloc(size + 1); 371a7619aefSNamhyung Kim if (buf == NULL) { 372a7619aefSNamhyung Kim pr_debug("memory allocation failure\n"); 373cd4ceb63SNamhyung Kim return -1; 374cd4ceb63SNamhyung Kim } 375cd4ceb63SNamhyung Kim 376a7619aefSNamhyung Kim ret = do_read(buf, size); 377a7619aefSNamhyung Kim if (ret < 0) { 378a7619aefSNamhyung Kim pr_debug("error reading saved cmdlines\n"); 379a7619aefSNamhyung Kim goto out; 380a7619aefSNamhyung Kim } 381cd4ceb63SNamhyung Kim 382a7619aefSNamhyung Kim parse_saved_cmdline(pevent, buf, size); 383a7619aefSNamhyung Kim ret = 0; 384a7619aefSNamhyung Kim out: 385cd4ceb63SNamhyung Kim free(buf); 386a7619aefSNamhyung Kim return ret; 387cd4ceb63SNamhyung Kim } 388cd4ceb63SNamhyung Kim 38929f5ffd3SJiri Olsa ssize_t trace_report(int fd, struct trace_event *tevent, bool __repipe) 390538bafb5SSteven Rostedt { 391538bafb5SSteven Rostedt char buf[BUFSIZ]; 392538bafb5SSteven Rostedt char test[] = { 23, 8, 68 }; 393538bafb5SSteven Rostedt char *version; 394d9340c1dSIngo Molnar int show_version = 0; 395538bafb5SSteven Rostedt int show_funcs = 0; 396538bafb5SSteven Rostedt int show_printk = 0; 3973dce2ce3SNamhyung Kim ssize_t size = -1; 39863af28faSNamhyung Kim int file_bigendian; 39963af28faSNamhyung Kim int host_bigendian; 40059657f9cSNamhyung Kim int file_long_size; 40130f36762SNamhyung Kim int file_page_size; 402096177a8STzvetomir Stoyanov (VMware) struct tep_handle *pevent = NULL; 403a4c98367SNamhyung Kim int err; 4043dce2ce3SNamhyung Kim 405454c407eSTom Zanussi repipe = __repipe; 40603456a15SFrederic Weisbecker input_fd = fd; 407538bafb5SSteven Rostedt 4084a31e565SNamhyung Kim if (do_read(buf, 3) < 0) 4094a31e565SNamhyung Kim return -1; 410452958fdSNamhyung Kim if (memcmp(buf, test, 3) != 0) { 411452958fdSNamhyung Kim pr_debug("no trace data in the file"); 412452958fdSNamhyung Kim return -1; 413452958fdSNamhyung Kim } 414538bafb5SSteven Rostedt 4154a31e565SNamhyung Kim if (do_read(buf, 7) < 0) 4164a31e565SNamhyung Kim return -1; 417452958fdSNamhyung Kim if (memcmp(buf, "tracing", 7) != 0) { 418452958fdSNamhyung Kim pr_debug("not a trace file (missing 'tracing' tag)"); 419452958fdSNamhyung Kim return -1; 420452958fdSNamhyung Kim } 421538bafb5SSteven Rostedt 422538bafb5SSteven Rostedt version = read_string(); 423a4c98367SNamhyung Kim if (version == NULL) 424a4c98367SNamhyung Kim return -1; 425d9340c1dSIngo Molnar if (show_version) 426538bafb5SSteven Rostedt printf("version = %s\n", version); 427538bafb5SSteven Rostedt 428cd4ceb63SNamhyung Kim if (do_read(buf, 1) < 0) { 429cd4ceb63SNamhyung Kim free(version); 4304a31e565SNamhyung Kim return -1; 431cd4ceb63SNamhyung Kim } 432538bafb5SSteven Rostedt file_bigendian = buf[0]; 433538bafb5SSteven Rostedt host_bigendian = bigendian(); 434538bafb5SSteven Rostedt 43529f5ffd3SJiri Olsa if (trace_event__init(tevent)) { 43629f5ffd3SJiri Olsa pr_debug("trace_event__init failed"); 4373dce2ce3SNamhyung Kim goto out; 4383dce2ce3SNamhyung Kim } 439aaf045f7SSteven Rostedt 44029f5ffd3SJiri Olsa pevent = tevent->pevent; 44129f5ffd3SJiri Olsa 44229f5ffd3SJiri Olsa pevent_set_flag(pevent, PEVENT_NSEC_OUTPUT); 44329f5ffd3SJiri Olsa pevent_set_file_bigendian(pevent, file_bigendian); 44429f5ffd3SJiri Olsa pevent_set_host_bigendian(pevent, host_bigendian); 44529f5ffd3SJiri Olsa 4464a31e565SNamhyung Kim if (do_read(buf, 1) < 0) 4474a31e565SNamhyung Kim goto out; 44859657f9cSNamhyung Kim file_long_size = buf[0]; 449538bafb5SSteven Rostedt 45030f36762SNamhyung Kim file_page_size = read4(pevent); 45130f36762SNamhyung Kim if (!file_page_size) 4524a31e565SNamhyung Kim goto out; 453538bafb5SSteven Rostedt 45459657f9cSNamhyung Kim pevent_set_long_size(pevent, file_long_size); 45530f36762SNamhyung Kim pevent_set_page_size(pevent, file_page_size); 45630f36762SNamhyung Kim 457a4c98367SNamhyung Kim err = read_header_files(pevent); 458a4c98367SNamhyung Kim if (err) 459a4c98367SNamhyung Kim goto out; 460a4c98367SNamhyung Kim err = read_ftrace_files(pevent); 461a4c98367SNamhyung Kim if (err) 462a4c98367SNamhyung Kim goto out; 463a4c98367SNamhyung Kim err = read_event_files(pevent); 464a4c98367SNamhyung Kim if (err) 465a4c98367SNamhyung Kim goto out; 466a4c98367SNamhyung Kim err = read_proc_kallsyms(pevent); 467a4c98367SNamhyung Kim if (err) 468a4c98367SNamhyung Kim goto out; 469a4c98367SNamhyung Kim err = read_ftrace_printk(pevent); 470a4c98367SNamhyung Kim if (err) 471a4c98367SNamhyung Kim goto out; 472cd4ceb63SNamhyung Kim if (atof(version) >= 0.6) { 473cd4ceb63SNamhyung Kim err = read_saved_cmdline(pevent); 474cd4ceb63SNamhyung Kim if (err) 475cd4ceb63SNamhyung Kim goto out; 476cd4ceb63SNamhyung Kim } 477538bafb5SSteven Rostedt 478ebf3c675SNamhyung Kim size = trace_data_size; 479454c407eSTom Zanussi repipe = false; 4809215545eSTom Zanussi 481538bafb5SSteven Rostedt if (show_funcs) { 4826a48dc29STzvetomir Stoyanov (VMware) tep_print_funcs(pevent); 4833dce2ce3SNamhyung Kim } else if (show_printk) { 4846a48dc29STzvetomir Stoyanov (VMware) tep_print_printk(pevent); 485538bafb5SSteven Rostedt } 486538bafb5SSteven Rostedt 4873dce2ce3SNamhyung Kim pevent = NULL; 4883dce2ce3SNamhyung Kim 4893dce2ce3SNamhyung Kim out: 4903dce2ce3SNamhyung Kim if (pevent) 49129f5ffd3SJiri Olsa trace_event__cleanup(tevent); 492cd4ceb63SNamhyung Kim free(version); 4939215545eSTom Zanussi return size; 494538bafb5SSteven Rostedt } 495