trace-event.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. #ifndef __PERF_TRACE_EVENTS_H
  2. #define __PERF_TRACE_EVENTS_H
  3. #include "parse-events.h"
  4. #define __unused __attribute__((unused))
  5. #ifndef PAGE_MASK
  6. #define PAGE_MASK (page_size - 1)
  7. #endif
  8. enum {
  9. RINGBUF_TYPE_PADDING = 29,
  10. RINGBUF_TYPE_TIME_EXTEND = 30,
  11. RINGBUF_TYPE_TIME_STAMP = 31,
  12. };
  13. #ifndef TS_SHIFT
  14. #define TS_SHIFT 27
  15. #endif
  16. #define NSECS_PER_SEC 1000000000ULL
  17. #define NSECS_PER_USEC 1000ULL
  18. enum format_flags {
  19. FIELD_IS_ARRAY = 1,
  20. FIELD_IS_POINTER = 2,
  21. FIELD_IS_SIGNED = 4,
  22. FIELD_IS_STRING = 8,
  23. FIELD_IS_DYNAMIC = 16,
  24. };
  25. struct format_field {
  26. struct format_field *next;
  27. char *type;
  28. char *name;
  29. int offset;
  30. int size;
  31. unsigned long flags;
  32. };
  33. struct format {
  34. int nr_common;
  35. int nr_fields;
  36. struct format_field *common_fields;
  37. struct format_field *fields;
  38. };
  39. struct print_arg_atom {
  40. char *atom;
  41. };
  42. struct print_arg_string {
  43. char *string;
  44. int offset;
  45. };
  46. struct print_arg_field {
  47. char *name;
  48. struct format_field *field;
  49. };
  50. struct print_flag_sym {
  51. struct print_flag_sym *next;
  52. char *value;
  53. char *str;
  54. };
  55. struct print_arg_typecast {
  56. char *type;
  57. struct print_arg *item;
  58. };
  59. struct print_arg_flags {
  60. struct print_arg *field;
  61. char *delim;
  62. struct print_flag_sym *flags;
  63. };
  64. struct print_arg_symbol {
  65. struct print_arg *field;
  66. struct print_flag_sym *symbols;
  67. };
  68. struct print_arg;
  69. struct print_arg_op {
  70. char *op;
  71. int prio;
  72. struct print_arg *left;
  73. struct print_arg *right;
  74. };
  75. struct print_arg_func {
  76. char *name;
  77. struct print_arg *args;
  78. };
  79. enum print_arg_type {
  80. PRINT_NULL,
  81. PRINT_ATOM,
  82. PRINT_FIELD,
  83. PRINT_FLAGS,
  84. PRINT_SYMBOL,
  85. PRINT_TYPE,
  86. PRINT_STRING,
  87. PRINT_OP,
  88. };
  89. struct print_arg {
  90. struct print_arg *next;
  91. enum print_arg_type type;
  92. union {
  93. struct print_arg_atom atom;
  94. struct print_arg_field field;
  95. struct print_arg_typecast typecast;
  96. struct print_arg_flags flags;
  97. struct print_arg_symbol symbol;
  98. struct print_arg_func func;
  99. struct print_arg_string string;
  100. struct print_arg_op op;
  101. };
  102. };
  103. struct print_fmt {
  104. char *format;
  105. struct print_arg *args;
  106. };
  107. struct event {
  108. struct event *next;
  109. char *name;
  110. int id;
  111. int flags;
  112. struct format format;
  113. struct print_fmt print_fmt;
  114. char *system;
  115. };
  116. enum {
  117. EVENT_FL_ISFTRACE = 0x01,
  118. EVENT_FL_ISPRINT = 0x02,
  119. EVENT_FL_ISBPRINT = 0x04,
  120. EVENT_FL_ISFUNC = 0x08,
  121. EVENT_FL_ISFUNCENT = 0x10,
  122. EVENT_FL_ISFUNCRET = 0x20,
  123. EVENT_FL_FAILED = 0x80000000
  124. };
  125. struct record {
  126. unsigned long long ts;
  127. int size;
  128. void *data;
  129. };
  130. struct record *trace_peek_data(int cpu);
  131. struct record *trace_read_data(int cpu);
  132. void parse_set_info(int nr_cpus, int long_sz);
  133. void trace_report(int fd);
  134. void *malloc_or_die(unsigned int size);
  135. void parse_cmdlines(char *file, int size);
  136. void parse_proc_kallsyms(char *file, unsigned int size);
  137. void parse_ftrace_printk(char *file, unsigned int size);
  138. void print_funcs(void);
  139. void print_printk(void);
  140. int parse_ftrace_file(char *buf, unsigned long size);
  141. int parse_event_file(char *buf, unsigned long size, char *sys);
  142. void print_event(int cpu, void *data, int size, unsigned long long nsecs,
  143. char *comm);
  144. extern int file_bigendian;
  145. extern int host_bigendian;
  146. int bigendian(void);
  147. static inline unsigned short __data2host2(unsigned short data)
  148. {
  149. unsigned short swap;
  150. if (host_bigendian == file_bigendian)
  151. return data;
  152. swap = ((data & 0xffULL) << 8) |
  153. ((data & (0xffULL << 8)) >> 8);
  154. return swap;
  155. }
  156. static inline unsigned int __data2host4(unsigned int data)
  157. {
  158. unsigned int swap;
  159. if (host_bigendian == file_bigendian)
  160. return data;
  161. swap = ((data & 0xffULL) << 24) |
  162. ((data & (0xffULL << 8)) << 8) |
  163. ((data & (0xffULL << 16)) >> 8) |
  164. ((data & (0xffULL << 24)) >> 24);
  165. return swap;
  166. }
  167. static inline unsigned long long __data2host8(unsigned long long data)
  168. {
  169. unsigned long long swap;
  170. if (host_bigendian == file_bigendian)
  171. return data;
  172. swap = ((data & 0xffULL) << 56) |
  173. ((data & (0xffULL << 8)) << 40) |
  174. ((data & (0xffULL << 16)) << 24) |
  175. ((data & (0xffULL << 24)) << 8) |
  176. ((data & (0xffULL << 32)) >> 8) |
  177. ((data & (0xffULL << 40)) >> 24) |
  178. ((data & (0xffULL << 48)) >> 40) |
  179. ((data & (0xffULL << 56)) >> 56);
  180. return swap;
  181. }
  182. #define data2host2(ptr) __data2host2(*(unsigned short *)ptr)
  183. #define data2host4(ptr) __data2host4(*(unsigned int *)ptr)
  184. #define data2host8(ptr) __data2host8(*(unsigned long long *)ptr)
  185. extern int header_page_ts_offset;
  186. extern int header_page_ts_size;
  187. extern int header_page_size_offset;
  188. extern int header_page_size_size;
  189. extern int header_page_data_offset;
  190. extern int header_page_data_size;
  191. extern int latency_format;
  192. int parse_header_page(char *buf, unsigned long size);
  193. int trace_parse_common_type(void *data);
  194. struct event *trace_find_event(int id);
  195. unsigned long long
  196. raw_field_value(struct event *event, const char *name, void *data);
  197. void *raw_field_ptr(struct event *event, const char *name, void *data);
  198. int read_tracing_data(int fd, struct perf_event_attr *pattrs, int nb_events);
  199. /* taken from kernel/trace/trace.h */
  200. enum trace_flag_type {
  201. TRACE_FLAG_IRQS_OFF = 0x01,
  202. TRACE_FLAG_IRQS_NOSUPPORT = 0x02,
  203. TRACE_FLAG_NEED_RESCHED = 0x04,
  204. TRACE_FLAG_HARDIRQ = 0x08,
  205. TRACE_FLAG_SOFTIRQ = 0x10,
  206. };
  207. #endif /* __PERF_TRACE_EVENTS_H */