18b40f521SJohn Kacur #ifndef __PERF_HEADER_H 28b40f521SJohn Kacur #define __PERF_HEADER_H 37c6a1c65SPeter Zijlstra 4cdd6c482SIngo Molnar #include "../../../include/linux/perf_event.h" 57c6a1c65SPeter Zijlstra #include <sys/types.h> 68d06367fSArnaldo Carvalho de Melo #include <stdbool.h> 77c6a1c65SPeter Zijlstra #include "types.h" 8ef12a141SArnaldo Carvalho de Melo #include "event.h" 97c6a1c65SPeter Zijlstra 10db9f11e3SFrederic Weisbecker #include <linux/bitmap.h> 11db9f11e3SFrederic Weisbecker 127c6a1c65SPeter Zijlstra struct perf_header_attr { 13cdd6c482SIngo Molnar struct perf_event_attr attr; 147c6a1c65SPeter Zijlstra int ids, size; 157c6a1c65SPeter Zijlstra u64 *id; 167c6a1c65SPeter Zijlstra off_t id_offset; 177c6a1c65SPeter Zijlstra }; 187c6a1c65SPeter Zijlstra 1937562eacSArnaldo Carvalho de Melo enum { 2037562eacSArnaldo Carvalho de Melo HEADER_TRACE_INFO = 1, 2137562eacSArnaldo Carvalho de Melo HEADER_BUILD_ID, 2237562eacSArnaldo Carvalho de Melo HEADER_LAST_FEATURE, 2337562eacSArnaldo Carvalho de Melo }; 242ba08250SFrederic Weisbecker 252ba08250SFrederic Weisbecker #define HEADER_FEAT_BITS 256 262ba08250SFrederic Weisbecker 2737562eacSArnaldo Carvalho de Melo struct perf_file_section { 2837562eacSArnaldo Carvalho de Melo u64 offset; 2937562eacSArnaldo Carvalho de Melo u64 size; 3037562eacSArnaldo Carvalho de Melo }; 3137562eacSArnaldo Carvalho de Melo 3237562eacSArnaldo Carvalho de Melo struct perf_file_header { 3337562eacSArnaldo Carvalho de Melo u64 magic; 3437562eacSArnaldo Carvalho de Melo u64 size; 3537562eacSArnaldo Carvalho de Melo u64 attr_size; 3637562eacSArnaldo Carvalho de Melo struct perf_file_section attrs; 3737562eacSArnaldo Carvalho de Melo struct perf_file_section data; 3837562eacSArnaldo Carvalho de Melo struct perf_file_section event_types; 3937562eacSArnaldo Carvalho de Melo DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS); 4037562eacSArnaldo Carvalho de Melo }; 4137562eacSArnaldo Carvalho de Melo 428dc58101STom Zanussi struct perf_pipe_file_header { 438dc58101STom Zanussi u64 magic; 448dc58101STom Zanussi u64 size; 458dc58101STom Zanussi }; 468dc58101STom Zanussi 4737562eacSArnaldo Carvalho de Melo struct perf_header; 4837562eacSArnaldo Carvalho de Melo 4937562eacSArnaldo Carvalho de Melo int perf_file_header__read(struct perf_file_header *self, 5037562eacSArnaldo Carvalho de Melo struct perf_header *ph, int fd); 5137562eacSArnaldo Carvalho de Melo 527c6a1c65SPeter Zijlstra struct perf_header { 537c6a1c65SPeter Zijlstra int frozen; 547c6a1c65SPeter Zijlstra int attrs, size; 55eed05fe7SArnaldo Carvalho de Melo bool needs_swap; 567c6a1c65SPeter Zijlstra struct perf_header_attr **attr; 57dfe5a504SArjan van de Ven s64 attr_offset; 587c6a1c65SPeter Zijlstra u64 data_offset; 597c6a1c65SPeter Zijlstra u64 data_size; 608755a8f2SArjan van de Ven u64 event_offset; 618755a8f2SArjan van de Ven u64 event_size; 62db9f11e3SFrederic Weisbecker DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS); 637c6a1c65SPeter Zijlstra }; 647c6a1c65SPeter Zijlstra 6594c744b6SArnaldo Carvalho de Melo int perf_header__init(struct perf_header *self); 6694c744b6SArnaldo Carvalho de Melo void perf_header__exit(struct perf_header *self); 674dc0a04bSArnaldo Carvalho de Melo 68361c99a6SArnaldo Carvalho de Melo struct perf_evlist; 69361c99a6SArnaldo Carvalho de Melo 708dc58101STom Zanussi int perf_header__read(struct perf_session *session, int fd); 71361c99a6SArnaldo Carvalho de Melo int perf_header__write(struct perf_header *self, struct perf_evlist *evlist, 72361c99a6SArnaldo Carvalho de Melo int fd, bool at_exit); 738dc58101STom Zanussi int perf_header__write_pipe(int fd); 747c6a1c65SPeter Zijlstra 7511deb1f9SArnaldo Carvalho de Melo int perf_header__add_attr(struct perf_header *self, 767c6a1c65SPeter Zijlstra struct perf_header_attr *attr); 777c6a1c65SPeter Zijlstra 78ae99fb2cSArnaldo Carvalho de Melo int perf_header__push_event(u64 id, const char *name); 798755a8f2SArjan van de Ven char *perf_header__find_event(u64 id); 808755a8f2SArjan van de Ven 81dc79c0fcSArnaldo Carvalho de Melo struct perf_header_attr *perf_header_attr__new(struct perf_event_attr *attr); 8211deb1f9SArnaldo Carvalho de Melo void perf_header_attr__delete(struct perf_header_attr *self); 8311deb1f9SArnaldo Carvalho de Melo 8458754121SArnaldo Carvalho de Melo int perf_header_attr__add_id(struct perf_header_attr *self, u64 id); 857c6a1c65SPeter Zijlstra 860d3a5c88SFrederic Weisbecker u64 perf_header__sample_type(struct perf_header *header); 879c90a61cSArnaldo Carvalho de Melo bool perf_header__sample_id_all(const struct perf_header *header); 88cdd6c482SIngo Molnar struct perf_event_attr * 890d3a5c88SFrederic Weisbecker perf_header__find_attr(u64 id, struct perf_header *header); 908d06367fSArnaldo Carvalho de Melo void perf_header__set_feat(struct perf_header *self, int feat); 91baa2f6ceSArnaldo Carvalho de Melo void perf_header__clear_feat(struct perf_header *self, int feat); 928d06367fSArnaldo Carvalho de Melo bool perf_header__has_feat(const struct perf_header *self, int feat); 937c6a1c65SPeter Zijlstra 9437562eacSArnaldo Carvalho de Melo int perf_header__process_sections(struct perf_header *self, int fd, 9537562eacSArnaldo Carvalho de Melo int (*process)(struct perf_file_section *self, 96ba21594cSArnaldo Carvalho de Melo struct perf_header *ph, 9737562eacSArnaldo Carvalho de Melo int feat, int fd)); 9837562eacSArnaldo Carvalho de Melo 99ef12a141SArnaldo Carvalho de Melo int build_id_cache__add_s(const char *sbuild_id, const char *debugdir, 100ef12a141SArnaldo Carvalho de Melo const char *name, bool is_kallsyms); 101ef12a141SArnaldo Carvalho de Melo int build_id_cache__remove_s(const char *sbuild_id, const char *debugdir); 102ef12a141SArnaldo Carvalho de Melo 1038115d60cSArnaldo Carvalho de Melo int perf_event__synthesize_attr(struct perf_event_attr *attr, u16 ids, u64 *id, 1048115d60cSArnaldo Carvalho de Melo perf_event__handler_t process, 1052c46dbb5STom Zanussi struct perf_session *session); 1068115d60cSArnaldo Carvalho de Melo int perf_event__synthesize_attrs(struct perf_header *self, 1078115d60cSArnaldo Carvalho de Melo perf_event__handler_t process, 1082c46dbb5STom Zanussi struct perf_session *session); 1098115d60cSArnaldo Carvalho de Melo int perf_event__process_attr(union perf_event *event, struct perf_session *session); 1102c46dbb5STom Zanussi 1118115d60cSArnaldo Carvalho de Melo int perf_event__synthesize_event_type(u64 event_id, char *name, 1128115d60cSArnaldo Carvalho de Melo perf_event__handler_t process, 113cd19a035STom Zanussi struct perf_session *session); 1148115d60cSArnaldo Carvalho de Melo int perf_event__synthesize_event_types(perf_event__handler_t process, 115cd19a035STom Zanussi struct perf_session *session); 1168115d60cSArnaldo Carvalho de Melo int perf_event__process_event_type(union perf_event *event, 117cd19a035STom Zanussi struct perf_session *session); 118cd19a035STom Zanussi 1198115d60cSArnaldo Carvalho de Melo int perf_event__synthesize_tracing_data(int fd, struct perf_evlist *evlist, 1208115d60cSArnaldo Carvalho de Melo perf_event__handler_t process, 1219215545eSTom Zanussi struct perf_session *session); 1228115d60cSArnaldo Carvalho de Melo int perf_event__process_tracing_data(union perf_event *event, 1239215545eSTom Zanussi struct perf_session *session); 124cd19a035STom Zanussi 1258115d60cSArnaldo Carvalho de Melo int perf_event__synthesize_build_id(struct dso *pos, u16 misc, 1268115d60cSArnaldo Carvalho de Melo perf_event__handler_t process, 12723346f21SArnaldo Carvalho de Melo struct machine *machine, 128c7929e47STom Zanussi struct perf_session *session); 1298115d60cSArnaldo Carvalho de Melo int perf_event__process_build_id(union perf_event *event, 1308115d60cSArnaldo Carvalho de Melo struct perf_session *session); 1318b40f521SJohn Kacur #endif /* __PERF_HEADER_H */ 132