header.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #ifndef __PERF_HEADER_H
  2. #define __PERF_HEADER_H
  3. #include "../../../include/linux/perf_event.h"
  4. #include <sys/types.h>
  5. #include <stdbool.h>
  6. #include "types.h"
  7. #include "event.h"
  8. #include <linux/bitmap.h>
  9. struct perf_header_attr {
  10. struct perf_event_attr attr;
  11. int ids, size;
  12. u64 *id;
  13. off_t id_offset;
  14. };
  15. enum {
  16. HEADER_TRACE_INFO = 1,
  17. HEADER_BUILD_ID,
  18. HEADER_LAST_FEATURE,
  19. };
  20. #define HEADER_FEAT_BITS 256
  21. struct perf_file_section {
  22. u64 offset;
  23. u64 size;
  24. };
  25. struct perf_file_header {
  26. u64 magic;
  27. u64 size;
  28. u64 attr_size;
  29. struct perf_file_section attrs;
  30. struct perf_file_section data;
  31. struct perf_file_section event_types;
  32. DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS);
  33. };
  34. struct perf_pipe_file_header {
  35. u64 magic;
  36. u64 size;
  37. };
  38. struct perf_header;
  39. int perf_file_header__read(struct perf_file_header *self,
  40. struct perf_header *ph, int fd);
  41. struct perf_header {
  42. int frozen;
  43. int attrs, size;
  44. bool needs_swap;
  45. struct perf_header_attr **attr;
  46. s64 attr_offset;
  47. u64 data_offset;
  48. u64 data_size;
  49. u64 event_offset;
  50. u64 event_size;
  51. DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS);
  52. };
  53. int perf_header__init(struct perf_header *self);
  54. void perf_header__exit(struct perf_header *self);
  55. int perf_header__read(struct perf_session *session, int fd);
  56. int perf_header__write(struct perf_header *self, int fd, bool at_exit);
  57. int perf_header__write_pipe(int fd);
  58. int perf_header__add_attr(struct perf_header *self,
  59. struct perf_header_attr *attr);
  60. int perf_header__push_event(u64 id, const char *name);
  61. char *perf_header__find_event(u64 id);
  62. struct perf_header_attr *perf_header_attr__new(struct perf_event_attr *attr);
  63. void perf_header_attr__delete(struct perf_header_attr *self);
  64. int perf_header_attr__add_id(struct perf_header_attr *self, u64 id);
  65. u64 perf_header__sample_type(struct perf_header *header);
  66. struct perf_event_attr *
  67. perf_header__find_attr(u64 id, struct perf_header *header);
  68. void perf_header__set_feat(struct perf_header *self, int feat);
  69. bool perf_header__has_feat(const struct perf_header *self, int feat);
  70. int perf_header__process_sections(struct perf_header *self, int fd,
  71. int (*process)(struct perf_file_section *self,
  72. struct perf_header *ph,
  73. int feat, int fd));
  74. int build_id_cache__add_s(const char *sbuild_id, const char *debugdir,
  75. const char *name, bool is_kallsyms);
  76. int build_id_cache__remove_s(const char *sbuild_id, const char *debugdir);
  77. int event__synthesize_attr(struct perf_event_attr *attr, u16 ids, u64 *id,
  78. event__handler_t process,
  79. struct perf_session *session);
  80. int event__synthesize_attrs(struct perf_header *self,
  81. event__handler_t process,
  82. struct perf_session *session);
  83. int event__process_attr(event_t *self, struct perf_session *session);
  84. int event__synthesize_event_type(u64 event_id, char *name,
  85. event__handler_t process,
  86. struct perf_session *session);
  87. int event__synthesize_event_types(event__handler_t process,
  88. struct perf_session *session);
  89. int event__process_event_type(event_t *self,
  90. struct perf_session *session);
  91. int event__synthesize_tracing_data(int fd, struct perf_event_attr *pattrs,
  92. int nb_events,
  93. event__handler_t process,
  94. struct perf_session *session);
  95. int event__process_tracing_data(event_t *self,
  96. struct perf_session *session);
  97. int event__synthesize_build_id(struct dso *pos, u16 misc,
  98. event__handler_t process,
  99. struct machine *machine,
  100. struct perf_session *session);
  101. int event__process_build_id(event_t *self, struct perf_session *session);
  102. #endif /* __PERF_HEADER_H */