summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2009-10-08 22:07:29 +0200
committerIngo Molnar <mingo@elte.hu>2009-10-08 22:11:02 +0200
commit26dd2cb074d9dc41c9e3cddd7bf175fd0a41febc (patch)
tree05c0188d5ecf806e4079181989f971efa3c44d47 /tools
parent97ea1a7fa62af0d8d49a0fc12796b0073537c9d8 (diff)
downloadlinux-3.10-26dd2cb074d9dc41c9e3cddd7bf175fd0a41febc.tar.gz
linux-3.10-26dd2cb074d9dc41c9e3cddd7bf175fd0a41febc.tar.bz2
linux-3.10-26dd2cb074d9dc41c9e3cddd7bf175fd0a41febc.zip
perf tools: Provide backward compatibility with previous perf.data version
We have merged the trace.info file into perf.data by adding one section in the perf headers. This makes it incompatible with previous version: the new perf tools can't read the older perf.data. To support the previous format, we check the headers size. If they have the same size than in the previous format, then ignore the trace info section that doesn't exist. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> LKML-Reference: <1255032449-12022-1-git-send-email-fweisbec@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/util/header.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 212fade7ee7..9aae360c0f2 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -287,10 +287,16 @@ struct perf_header *perf_header__read(int fd)
do_read(fd, &f_header, sizeof(f_header));
if (f_header.magic != PERF_MAGIC ||
- f_header.size != sizeof(f_header) ||
f_header.attr_size != sizeof(f_attr))
die("incompatible file format");
+ if (f_header.size != sizeof(f_header)) {
+ /* Support the previous format */
+ if (f_header.size == offsetof(typeof(f_header), trace_info))
+ f_header.trace_info.size = 0;
+ else
+ die("incompatible file format");
+ }
nr_attrs = f_header.attrs.size / sizeof(f_attr);
lseek(fd, f_header.attrs.offset, SEEK_SET);