diff options
Diffstat (limited to 'tools/perf/util/header.h')
-rw-r--r-- | tools/perf/util/header.h | 76 |
1 files changed, 57 insertions, 19 deletions
diff --git a/tools/perf/util/header.h b/tools/perf/util/header.h index a0761bc7863c..d1dbe2b79c42 100644 --- a/tools/perf/util/header.h +++ b/tools/perf/util/header.h | |||
@@ -1,10 +1,13 @@ | |||
1 | #ifndef _PERF_HEADER_H | 1 | #ifndef __PERF_HEADER_H |
2 | #define _PERF_HEADER_H | 2 | #define __PERF_HEADER_H |
3 | 3 | ||
4 | #include "../../../include/linux/perf_event.h" | 4 | #include "../../../include/linux/perf_event.h" |
5 | #include <sys/types.h> | 5 | #include <sys/types.h> |
6 | #include <stdbool.h> | ||
6 | #include "types.h" | 7 | #include "types.h" |
7 | 8 | ||
9 | #include <linux/bitmap.h> | ||
10 | |||
8 | struct perf_header_attr { | 11 | struct perf_header_attr { |
9 | struct perf_event_attr attr; | 12 | struct perf_event_attr attr; |
10 | int ids, size; | 13 | int ids, size; |
@@ -12,36 +15,71 @@ struct perf_header_attr { | |||
12 | off_t id_offset; | 15 | off_t id_offset; |
13 | }; | 16 | }; |
14 | 17 | ||
18 | enum { | ||
19 | HEADER_TRACE_INFO = 1, | ||
20 | HEADER_BUILD_ID, | ||
21 | HEADER_LAST_FEATURE, | ||
22 | }; | ||
23 | |||
24 | #define HEADER_FEAT_BITS 256 | ||
25 | |||
26 | struct perf_file_section { | ||
27 | u64 offset; | ||
28 | u64 size; | ||
29 | }; | ||
30 | |||
31 | struct perf_file_header { | ||
32 | u64 magic; | ||
33 | u64 size; | ||
34 | u64 attr_size; | ||
35 | struct perf_file_section attrs; | ||
36 | struct perf_file_section data; | ||
37 | struct perf_file_section event_types; | ||
38 | DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS); | ||
39 | }; | ||
40 | |||
41 | struct perf_header; | ||
42 | |||
43 | int perf_file_header__read(struct perf_file_header *self, | ||
44 | struct perf_header *ph, int fd); | ||
45 | |||
15 | struct perf_header { | 46 | struct perf_header { |
16 | int frozen; | 47 | int frozen; |
17 | int attrs, size; | 48 | int attrs, size; |
18 | struct perf_header_attr **attr; | 49 | struct perf_header_attr **attr; |
19 | s64 attr_offset; | 50 | s64 attr_offset; |
20 | u64 data_offset; | 51 | u64 data_offset; |
21 | u64 data_size; | 52 | u64 data_size; |
22 | u64 event_offset; | 53 | u64 event_offset; |
23 | u64 event_size; | 54 | u64 event_size; |
55 | DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS); | ||
24 | }; | 56 | }; |
25 | 57 | ||
26 | struct perf_header *perf_header__read(int fd); | 58 | struct perf_header *perf_header__new(void); |
27 | void perf_header__write(struct perf_header *self, int fd); | 59 | void perf_header__delete(struct perf_header *self); |
28 | 60 | ||
29 | void perf_header__add_attr(struct perf_header *self, | 61 | int perf_header__read(struct perf_header *self, int fd); |
30 | struct perf_header_attr *attr); | 62 | int perf_header__write(struct perf_header *self, int fd, bool at_exit); |
63 | |||
64 | int perf_header__add_attr(struct perf_header *self, | ||
65 | struct perf_header_attr *attr); | ||
31 | 66 | ||
32 | void perf_header__push_event(u64 id, const char *name); | 67 | void perf_header__push_event(u64 id, const char *name); |
33 | char *perf_header__find_event(u64 id); | 68 | char *perf_header__find_event(u64 id); |
34 | 69 | ||
70 | struct perf_header_attr *perf_header_attr__new(struct perf_event_attr *attr); | ||
71 | void perf_header_attr__delete(struct perf_header_attr *self); | ||
35 | 72 | ||
36 | struct perf_header_attr * | 73 | int perf_header_attr__add_id(struct perf_header_attr *self, u64 id); |
37 | perf_header_attr__new(struct perf_event_attr *attr); | ||
38 | void perf_header_attr__add_id(struct perf_header_attr *self, u64 id); | ||
39 | 74 | ||
40 | u64 perf_header__sample_type(struct perf_header *header); | 75 | u64 perf_header__sample_type(struct perf_header *header); |
41 | struct perf_event_attr * | 76 | struct perf_event_attr * |
42 | perf_header__find_attr(u64 id, struct perf_header *header); | 77 | perf_header__find_attr(u64 id, struct perf_header *header); |
78 | void perf_header__set_feat(struct perf_header *self, int feat); | ||
79 | bool perf_header__has_feat(const struct perf_header *self, int feat); | ||
43 | 80 | ||
81 | int perf_header__process_sections(struct perf_header *self, int fd, | ||
82 | int (*process)(struct perf_file_section *self, | ||
83 | int feat, int fd)); | ||
44 | 84 | ||
45 | struct perf_header *perf_header__new(void); | 85 | #endif /* __PERF_HEADER_H */ |
46 | |||
47 | #endif /* _PERF_HEADER_H */ | ||