aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/header.h
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2009-10-17 11:12:34 -0400
committerIngo Molnar <mingo@elte.hu>2009-10-19 03:26:35 -0400
commit2ba0825075e76236d22a20decd8e2346a99faabe (patch)
treee8f407d50ad0027d59369f295b04ba736b6e7b87 /tools/perf/util/header.h
parent5a116dd2797677cad48fee2f42267e3cb69f5502 (diff)
perf tools: Introduce bitmask'ed additional headers
This provides a new set of bitmasked headers. A new field is added in the perf headers that implements a bitmap storing optional features present in the perf.data file. The layout can be pictured like this: (Usual perf headers)(Features bitmap)[Feature 0][Feature n][Feature 255] If the bit n is set, then the feature n is used in this file. They are all set in order. This brings a backward and forward compatibility. The trace_info section has moved into such optional features, this is the first and only one for now. This is backward compatible with the .32 file version although it doesn't support the previous separate trace.info file. And finally it doesn't support the current interim development version. 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> Cc: Steven Rostedt <rostedt@goodmis.org> LKML-Reference: <1255792354-11304-2-git-send-email-fweisbec@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/util/header.h')
-rw-r--r--tools/perf/util/header.h30
1 files changed, 20 insertions, 10 deletions
diff --git a/tools/perf/util/header.h b/tools/perf/util/header.h
index 30aee5160dc0..0eb4a9126b7c 100644
--- a/tools/perf/util/header.h
+++ b/tools/perf/util/header.h
@@ -12,19 +12,29 @@ struct perf_header_attr {
12 off_t id_offset; 12 off_t id_offset;
13}; 13};
14 14
15#define HEADER_TRACE_INFO 1
16
17#define HEADER_FEAT_BITS 256
18
19typedef typeof(u64[HEADER_FEAT_BITS / 8]) feat_mask_t;
20
15struct perf_header { 21struct perf_header {
16 int frozen; 22 int frozen;
17 int attrs, size; 23 int attrs, size;
18 struct perf_header_attr **attr; 24 struct perf_header_attr **attr;
19 s64 attr_offset; 25 s64 attr_offset;
20 u64 data_offset; 26 u64 data_offset;
21 u64 data_size; 27 u64 data_size;
22 u64 event_offset; 28 u64 event_offset;
23 u64 event_size; 29 u64 event_size;
24 u64 trace_info_offset; 30 feat_mask_t adds_features;
25 u64 trace_info_size;
26}; 31};
27 32
33static inline unsigned long *perf_header__adds_mask(struct perf_header *self)
34{
35 return (unsigned long *)(void *)&self->adds_features;
36}
37
28struct perf_header *perf_header__read(int fd); 38struct perf_header *perf_header__read(int fd);
29void perf_header__write(struct perf_header *self, int fd); 39void perf_header__write(struct perf_header *self, int fd);
30 40
@@ -42,7 +52,7 @@ void perf_header_attr__add_id(struct perf_header_attr *self, u64 id);
42u64 perf_header__sample_type(struct perf_header *header); 52u64 perf_header__sample_type(struct perf_header *header);
43struct perf_event_attr * 53struct perf_event_attr *
44perf_header__find_attr(u64 id, struct perf_header *header); 54perf_header__find_attr(u64 id, struct perf_header *header);
45void perf_header__set_trace_info(void); 55void perf_header__feat_trace_info(struct perf_header *header);
46 56
47struct perf_header *perf_header__new(void); 57struct perf_header *perf_header__new(void);
48 58