parse-events.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #ifndef __PERF_PARSE_EVENTS_H
  2. #define __PERF_PARSE_EVENTS_H
  3. /*
  4. * Parse symbolic events/counts passed in as options:
  5. */
  6. #include <linux/list.h>
  7. #include <stdbool.h>
  8. #include <linux/types.h>
  9. #include <linux/perf_event.h>
  10. struct list_head;
  11. struct perf_evsel;
  12. struct perf_evlist;
  13. struct parse_events_error;
  14. struct option;
  15. struct tracepoint_path {
  16. char *system;
  17. char *name;
  18. struct tracepoint_path *next;
  19. };
  20. struct tracepoint_path *tracepoint_id_to_path(u64 config);
  21. struct tracepoint_path *tracepoint_name_to_path(const char *name);
  22. bool have_tracepoints(struct list_head *evlist);
  23. const char *event_type(int type);
  24. int parse_events_option(const struct option *opt, const char *str, int unset);
  25. int parse_events(struct perf_evlist *evlist, const char *str,
  26. struct parse_events_error *error);
  27. int parse_events_terms(struct list_head *terms, const char *str);
  28. int parse_filter(const struct option *opt, const char *str, int unset);
  29. int exclude_perf(const struct option *opt, const char *arg, int unset);
  30. #define EVENTS_HELP_MAX (128*1024)
  31. enum perf_pmu_event_symbol_type {
  32. PMU_EVENT_SYMBOL_ERR, /* not a PMU EVENT */
  33. PMU_EVENT_SYMBOL, /* normal style PMU event */
  34. PMU_EVENT_SYMBOL_PREFIX, /* prefix of pre-suf style event */
  35. PMU_EVENT_SYMBOL_SUFFIX, /* suffix of pre-suf style event */
  36. };
  37. struct perf_pmu_event_symbol {
  38. char *symbol;
  39. enum perf_pmu_event_symbol_type type;
  40. };
  41. enum {
  42. PARSE_EVENTS__TERM_TYPE_NUM,
  43. PARSE_EVENTS__TERM_TYPE_STR,
  44. };
  45. enum {
  46. PARSE_EVENTS__TERM_TYPE_USER,
  47. PARSE_EVENTS__TERM_TYPE_CONFIG,
  48. PARSE_EVENTS__TERM_TYPE_CONFIG1,
  49. PARSE_EVENTS__TERM_TYPE_CONFIG2,
  50. PARSE_EVENTS__TERM_TYPE_NAME,
  51. PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD,
  52. PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ,
  53. PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE,
  54. PARSE_EVENTS__TERM_TYPE_TIME,
  55. PARSE_EVENTS__TERM_TYPE_CALLGRAPH,
  56. PARSE_EVENTS__TERM_TYPE_STACKSIZE,
  57. PARSE_EVENTS__TERM_TYPE_NOINHERIT,
  58. PARSE_EVENTS__TERM_TYPE_INHERIT,
  59. __PARSE_EVENTS__TERM_TYPE_NR,
  60. };
  61. struct parse_events_array {
  62. size_t nr_ranges;
  63. struct {
  64. unsigned int start;
  65. size_t length;
  66. } *ranges;
  67. };
  68. struct parse_events_term {
  69. char *config;
  70. struct parse_events_array array;
  71. union {
  72. char *str;
  73. u64 num;
  74. } val;
  75. int type_val;
  76. int type_term;
  77. struct list_head list;
  78. bool used;
  79. /* error string indexes for within parsed string */
  80. int err_term;
  81. int err_val;
  82. };
  83. struct parse_events_error {
  84. int idx; /* index in the parsed string */
  85. char *str; /* string to display at the index */
  86. char *help; /* optional help string */
  87. };
  88. struct parse_events_evlist {
  89. struct list_head list;
  90. int idx;
  91. int nr_groups;
  92. struct parse_events_error *error;
  93. struct perf_evlist *evlist;
  94. };
  95. struct parse_events_terms {
  96. struct list_head *terms;
  97. };
  98. void parse_events__shrink_config_terms(void);
  99. int parse_events__is_hardcoded_term(struct parse_events_term *term);
  100. int parse_events_term__num(struct parse_events_term **term,
  101. int type_term, char *config, u64 num,
  102. void *loc_term, void *loc_val);
  103. int parse_events_term__str(struct parse_events_term **term,
  104. int type_term, char *config, char *str,
  105. void *loc_term, void *loc_val);
  106. int parse_events_term__sym_hw(struct parse_events_term **term,
  107. char *config, unsigned idx);
  108. int parse_events_term__clone(struct parse_events_term **new,
  109. struct parse_events_term *term);
  110. void parse_events_terms__delete(struct list_head *terms);
  111. void parse_events_terms__purge(struct list_head *terms);
  112. void parse_events__clear_array(struct parse_events_array *a);
  113. int parse_events__modifier_event(struct list_head *list, char *str, bool add);
  114. int parse_events__modifier_group(struct list_head *list, char *event_mod);
  115. int parse_events_name(struct list_head *list, char *name);
  116. int parse_events_add_tracepoint(struct list_head *list, int *idx,
  117. char *sys, char *event,
  118. struct parse_events_error *error,
  119. struct list_head *head_config);
  120. int parse_events_load_bpf(struct parse_events_evlist *data,
  121. struct list_head *list,
  122. char *bpf_file_name,
  123. bool source,
  124. struct list_head *head_config);
  125. /* Provide this function for perf test */
  126. struct bpf_object;
  127. int parse_events_load_bpf_obj(struct parse_events_evlist *data,
  128. struct list_head *list,
  129. struct bpf_object *obj,
  130. struct list_head *head_config);
  131. int parse_events_add_numeric(struct parse_events_evlist *data,
  132. struct list_head *list,
  133. u32 type, u64 config,
  134. struct list_head *head_config);
  135. int parse_events_add_cache(struct list_head *list, int *idx,
  136. char *type, char *op_result1, char *op_result2,
  137. struct parse_events_error *error,
  138. struct list_head *head_config);
  139. int parse_events_add_breakpoint(struct list_head *list, int *idx,
  140. void *ptr, char *type, u64 len);
  141. int parse_events_add_pmu(struct parse_events_evlist *data,
  142. struct list_head *list, char *name,
  143. struct list_head *head_config);
  144. enum perf_pmu_event_symbol_type
  145. perf_pmu__parse_check(const char *name);
  146. void parse_events__set_leader(char *name, struct list_head *list);
  147. void parse_events_update_lists(struct list_head *list_event,
  148. struct list_head *list_all);
  149. void parse_events_evlist_error(struct parse_events_evlist *data,
  150. int idx, const char *str);
  151. void print_events(const char *event_glob, bool name_only);
  152. struct event_symbol {
  153. const char *symbol;
  154. const char *alias;
  155. };
  156. extern struct event_symbol event_symbols_hw[];
  157. extern struct event_symbol event_symbols_sw[];
  158. void print_symbol_events(const char *event_glob, unsigned type,
  159. struct event_symbol *syms, unsigned max,
  160. bool name_only);
  161. void print_tracepoint_events(const char *subsys_glob, const char *event_glob,
  162. bool name_only);
  163. int print_hwcache_events(const char *event_glob, bool name_only);
  164. int is_valid_tracepoint(const char *event_string);
  165. int valid_event_mount(const char *eventfs);
  166. char *parse_events_formats_error_string(char *additional_terms);
  167. #endif /* __PERF_PARSE_EVENTS_H */