header.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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_header;
  35. int perf_file_header__read(struct perf_file_header *self,
  36. struct perf_header *ph, int fd);
  37. struct perf_header {
  38. int frozen;
  39. int attrs, size;
  40. struct perf_header_attr **attr;
  41. s64 attr_offset;
  42. u64 data_offset;
  43. u64 data_size;
  44. u64 event_offset;
  45. u64 event_size;
  46. bool needs_swap;
  47. DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS);
  48. };
  49. int perf_header__init(struct perf_header *self);
  50. void perf_header__exit(struct perf_header *self);
  51. int perf_header__read(struct perf_header *self, int fd);
  52. int perf_header__write(struct perf_header *self, int fd, bool at_exit);
  53. int perf_header__add_attr(struct perf_header *self,
  54. struct perf_header_attr *attr);
  55. int perf_header__push_event(u64 id, const char *name);
  56. char *perf_header__find_event(u64 id);
  57. struct perf_header_attr *perf_header_attr__new(struct perf_event_attr *attr);
  58. void perf_header_attr__delete(struct perf_header_attr *self);
  59. int perf_header_attr__add_id(struct perf_header_attr *self, u64 id);
  60. u64 perf_header__sample_type(struct perf_header *header);
  61. struct perf_event_attr *
  62. perf_header__find_attr(u64 id, struct perf_header *header);
  63. void perf_header__set_feat(struct perf_header *self, int feat);
  64. bool perf_header__has_feat(const struct perf_header *self, int feat);
  65. int perf_header__process_sections(struct perf_header *self, int fd,
  66. int (*process)(struct perf_file_section *self,
  67. struct perf_header *ph,
  68. int feat, int fd));
  69. int build_id_cache__add_s(const char *sbuild_id, const char *debugdir,
  70. const char *name, bool is_kallsyms);
  71. int build_id_cache__remove_s(const char *sbuild_id, const char *debugdir);
  72. #endif /* __PERF_HEADER_H */