diff options
Diffstat (limited to 'tools/perf/util/header.c')
-rw-r--r-- | tools/perf/util/header.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index c3e5a3b817ab..369c03648f88 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include "vdso.h" | 22 | #include "vdso.h" |
23 | #include "strbuf.h" | 23 | #include "strbuf.h" |
24 | #include "build-id.h" | 24 | #include "build-id.h" |
25 | #include "data.h" | ||
25 | 26 | ||
26 | static bool no_buildid_cache = false; | 27 | static bool no_buildid_cache = false; |
27 | 28 | ||
@@ -2189,7 +2190,7 @@ int perf_header__fprintf_info(struct perf_session *session, FILE *fp, bool full) | |||
2189 | { | 2190 | { |
2190 | struct header_print_data hd; | 2191 | struct header_print_data hd; |
2191 | struct perf_header *header = &session->header; | 2192 | struct perf_header *header = &session->header; |
2192 | int fd = session->fd; | 2193 | int fd = perf_data_file__fd(session->file); |
2193 | hd.fp = fp; | 2194 | hd.fp = fp; |
2194 | hd.full = full; | 2195 | hd.full = full; |
2195 | 2196 | ||
@@ -2650,7 +2651,8 @@ static int perf_header__read_pipe(struct perf_session *session) | |||
2650 | struct perf_header *header = &session->header; | 2651 | struct perf_header *header = &session->header; |
2651 | struct perf_pipe_file_header f_header; | 2652 | struct perf_pipe_file_header f_header; |
2652 | 2653 | ||
2653 | if (perf_file_header__read_pipe(&f_header, header, session->fd, | 2654 | if (perf_file_header__read_pipe(&f_header, header, |
2655 | perf_data_file__fd(session->file), | ||
2654 | session->repipe) < 0) { | 2656 | session->repipe) < 0) { |
2655 | pr_debug("incompatible file format\n"); | 2657 | pr_debug("incompatible file format\n"); |
2656 | return -EINVAL; | 2658 | return -EINVAL; |
@@ -2751,18 +2753,19 @@ static int perf_evlist__prepare_tracepoint_events(struct perf_evlist *evlist, | |||
2751 | 2753 | ||
2752 | int perf_session__read_header(struct perf_session *session) | 2754 | int perf_session__read_header(struct perf_session *session) |
2753 | { | 2755 | { |
2756 | struct perf_data_file *file = session->file; | ||
2754 | struct perf_header *header = &session->header; | 2757 | struct perf_header *header = &session->header; |
2755 | struct perf_file_header f_header; | 2758 | struct perf_file_header f_header; |
2756 | struct perf_file_attr f_attr; | 2759 | struct perf_file_attr f_attr; |
2757 | u64 f_id; | 2760 | u64 f_id; |
2758 | int nr_attrs, nr_ids, i, j; | 2761 | int nr_attrs, nr_ids, i, j; |
2759 | int fd = session->fd; | 2762 | int fd = perf_data_file__fd(file); |
2760 | 2763 | ||
2761 | session->evlist = perf_evlist__new(); | 2764 | session->evlist = perf_evlist__new(); |
2762 | if (session->evlist == NULL) | 2765 | if (session->evlist == NULL) |
2763 | return -ENOMEM; | 2766 | return -ENOMEM; |
2764 | 2767 | ||
2765 | if (session->fd_pipe) | 2768 | if (perf_data_file__is_pipe(file)) |
2766 | return perf_header__read_pipe(session); | 2769 | return perf_header__read_pipe(session); |
2767 | 2770 | ||
2768 | if (perf_file_header__read(&f_header, header, fd) < 0) | 2771 | if (perf_file_header__read(&f_header, header, fd) < 0) |
@@ -2777,7 +2780,7 @@ int perf_session__read_header(struct perf_session *session) | |||
2777 | if (f_header.data.size == 0) { | 2780 | if (f_header.data.size == 0) { |
2778 | pr_warning("WARNING: The %s file's data size field is 0 which is unexpected.\n" | 2781 | pr_warning("WARNING: The %s file's data size field is 0 which is unexpected.\n" |
2779 | "Was the 'perf record' command properly terminated?\n", | 2782 | "Was the 'perf record' command properly terminated?\n", |
2780 | session->filename); | 2783 | file->path); |
2781 | } | 2784 | } |
2782 | 2785 | ||
2783 | nr_attrs = f_header.attrs.size / f_header.attr_size; | 2786 | nr_attrs = f_header.attrs.size / f_header.attr_size; |
@@ -2794,7 +2797,7 @@ int perf_session__read_header(struct perf_session *session) | |||
2794 | perf_event__attr_swap(&f_attr.attr); | 2797 | perf_event__attr_swap(&f_attr.attr); |
2795 | 2798 | ||
2796 | tmp = lseek(fd, 0, SEEK_CUR); | 2799 | tmp = lseek(fd, 0, SEEK_CUR); |
2797 | evsel = perf_evsel__new(&f_attr.attr, i); | 2800 | evsel = perf_evsel__new(&f_attr.attr); |
2798 | 2801 | ||
2799 | if (evsel == NULL) | 2802 | if (evsel == NULL) |
2800 | goto out_delete_evlist; | 2803 | goto out_delete_evlist; |
@@ -2913,7 +2916,7 @@ int perf_event__process_attr(struct perf_tool *tool __maybe_unused, | |||
2913 | return -ENOMEM; | 2916 | return -ENOMEM; |
2914 | } | 2917 | } |
2915 | 2918 | ||
2916 | evsel = perf_evsel__new(&event->attr.attr, evlist->nr_entries); | 2919 | evsel = perf_evsel__new(&event->attr.attr); |
2917 | if (evsel == NULL) | 2920 | if (evsel == NULL) |
2918 | return -ENOMEM; | 2921 | return -ENOMEM; |
2919 | 2922 | ||
@@ -2990,18 +2993,19 @@ int perf_event__process_tracing_data(struct perf_tool *tool __maybe_unused, | |||
2990 | struct perf_session *session) | 2993 | struct perf_session *session) |
2991 | { | 2994 | { |
2992 | ssize_t size_read, padding, size = event->tracing_data.size; | 2995 | ssize_t size_read, padding, size = event->tracing_data.size; |
2993 | off_t offset = lseek(session->fd, 0, SEEK_CUR); | 2996 | int fd = perf_data_file__fd(session->file); |
2997 | off_t offset = lseek(fd, 0, SEEK_CUR); | ||
2994 | char buf[BUFSIZ]; | 2998 | char buf[BUFSIZ]; |
2995 | 2999 | ||
2996 | /* setup for reading amidst mmap */ | 3000 | /* setup for reading amidst mmap */ |
2997 | lseek(session->fd, offset + sizeof(struct tracing_data_event), | 3001 | lseek(fd, offset + sizeof(struct tracing_data_event), |
2998 | SEEK_SET); | 3002 | SEEK_SET); |
2999 | 3003 | ||
3000 | size_read = trace_report(session->fd, &session->pevent, | 3004 | size_read = trace_report(fd, &session->pevent, |
3001 | session->repipe); | 3005 | session->repipe); |
3002 | padding = PERF_ALIGN(size_read, sizeof(u64)) - size_read; | 3006 | padding = PERF_ALIGN(size_read, sizeof(u64)) - size_read; |
3003 | 3007 | ||
3004 | if (readn(session->fd, buf, padding) < 0) { | 3008 | if (readn(fd, buf, padding) < 0) { |
3005 | pr_err("%s: reading input file", __func__); | 3009 | pr_err("%s: reading input file", __func__); |
3006 | return -1; | 3010 | return -1; |
3007 | } | 3011 | } |