Linux Perf
parse-events.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __PERF_PARSE_EVENTS_H
3 #define __PERF_PARSE_EVENTS_H
4 /*
5  * Parse symbolic events/counts passed in as options:
6  */
7 
8 #include <linux/list.h>
9 #include <stdbool.h>
10 #include <linux/types.h>
11 #include <linux/perf_event.h>
12 #include <string.h>
13 
14 struct list_head;
15 struct perf_evsel;
16 struct perf_evlist;
17 struct parse_events_error;
18 
19 struct option;
20 
22  char *system;
23  char *name;
25 };
26 
28 struct tracepoint_path *tracepoint_name_to_path(const char *name);
29 bool have_tracepoints(struct list_head *evlist);
30 
31 const char *event_type(int type);
32 
33 int parse_events_option(const struct option *opt, const char *str, int unset);
34 int parse_events(struct perf_evlist *evlist, const char *str,
35  struct parse_events_error *error);
36 int parse_events_terms(struct list_head *terms, const char *str);
37 int parse_filter(const struct option *opt, const char *str, int unset);
38 int exclude_perf(const struct option *opt, const char *arg, int unset);
39 
40 #define EVENTS_HELP_MAX (128*1024)
41 
43  PMU_EVENT_SYMBOL_ERR, /* not a PMU EVENT */
44  PMU_EVENT_SYMBOL, /* normal style PMU event */
45  PMU_EVENT_SYMBOL_PREFIX, /* prefix of pre-suf style event */
46  PMU_EVENT_SYMBOL_SUFFIX, /* suffix of pre-suf style event */
47 };
48 
50  char *symbol;
52 };
53 
54 enum {
57 };
58 
59 enum {
78 };
79 
81  size_t nr_ranges;
82  struct {
83  unsigned int start;
84  size_t length;
85  } *ranges;
86 };
87 
89  char *config;
91  union {
92  char *str;
93  u64 num;
94  } val;
95  int type_val;
96  int type_term;
97  struct list_head list;
98  bool used;
99  bool no_value;
100 
101  /* error string indexes for within parsed string */
102  int err_term;
103  int err_val;
104 
105  /* Coming from implicit alias */
106  bool weak;
107 };
108 
110  int idx; /* index in the parsed string */
111  char *str; /* string to display at the index */
112  char *help; /* optional help string */
113 };
114 
116  struct list_head list;
117  int idx;
121  struct list_head *terms;
122 };
123 
127  int type_term, char *config, u64 num,
128  bool novalue,
129  void *loc_term, void *loc_val);
131  int type_term, char *config, char *str,
132  void *loc_term, void *loc_val);
134  char *config, unsigned idx);
136  struct parse_events_term *term);
137 void parse_events_terms__delete(struct list_head *terms);
138 void parse_events_terms__purge(struct list_head *terms);
140 int parse_events__modifier_event(struct list_head *list, char *str, bool add);
141 int parse_events__modifier_group(struct list_head *list, char *event_mod);
142 int parse_events_name(struct list_head *list, char *name);
143 int parse_events_add_tracepoint(struct list_head *list, int *idx,
144  const char *sys, const char *event,
145  struct parse_events_error *error,
146  struct list_head *head_config);
147 int parse_events_load_bpf(struct parse_events_state *parse_state,
148  struct list_head *list,
149  char *bpf_file_name,
150  bool source,
151  struct list_head *head_config);
152 /* Provide this function for perf test */
153 struct bpf_object;
154 int parse_events_load_bpf_obj(struct parse_events_state *parse_state,
155  struct list_head *list,
156  struct bpf_object *obj,
157  struct list_head *head_config);
158 int parse_events_add_numeric(struct parse_events_state *parse_state,
159  struct list_head *list,
160  u32 type, u64 config,
161  struct list_head *head_config);
162 int parse_events_add_cache(struct list_head *list, int *idx,
163  char *type, char *op_result1, char *op_result2,
164  struct parse_events_error *error,
165  struct list_head *head_config);
166 int parse_events_add_breakpoint(struct list_head *list, int *idx,
167  void *ptr, char *type, u64 len);
168 int parse_events_add_pmu(struct parse_events_state *parse_state,
169  struct list_head *list, char *name,
170  struct list_head *head_config,
171  bool auto_merge_stats,
172  bool use_alias);
173 
174 int parse_events_multi_pmu_add(struct parse_events_state *parse_state,
175  char *str,
176  struct list_head **listp);
177 
178 int parse_events_copy_term_list(struct list_head *old,
179  struct list_head **new);
180 
182 perf_pmu__parse_check(const char *name);
183 void parse_events__set_leader(char *name, struct list_head *list,
184  struct parse_events_state *parse_state);
185 void parse_events_update_lists(struct list_head *list_event,
186  struct list_head *list_all);
187 void parse_events_evlist_error(struct parse_events_state *parse_state,
188  int idx, const char *str);
189 
190 void print_events(const char *event_glob, bool name_only, bool quiet,
191  bool long_desc, bool details_flag);
192 
193 struct event_symbol {
194  const char *symbol;
195  const char *alias;
196 };
197 extern struct event_symbol event_symbols_hw[];
198 extern struct event_symbol event_symbols_sw[];
199 void print_symbol_events(const char *event_glob, unsigned type,
200  struct event_symbol *syms, unsigned max,
201  bool name_only);
202 void print_tracepoint_events(const char *subsys_glob, const char *event_glob,
203  bool name_only);
204 int print_hwcache_events(const char *event_glob, bool name_only);
205 void print_sdt_events(const char *subsys_glob, const char *event_glob,
206  bool name_only);
207 int is_valid_tracepoint(const char *event_string);
208 
209 int valid_event_mount(const char *eventfs);
210 char *parse_events_formats_error_string(char *additional_terms);
211 
213  const char *event);
214 
215 #ifdef HAVE_LIBELF_SUPPORT
216 /*
217  * If the probe point starts with '%',
218  * or starts with "sdt_" and has a ':' but no '=',
219  * then it should be a SDT/cached probe point.
220  */
221 static inline bool is_sdt_event(char *str)
222 {
223  return (str[0] == '%' ||
224  (!strncmp(str, "sdt_", 4) &&
225  !!strchr(str, ':') && !strchr(str, '=')));
226 }
227 #else
228 static inline bool is_sdt_event(char *str __maybe_unused)
229 {
230  return false;
231 }
232 #endif /* HAVE_LIBELF_SUPPORT */
233 
234 #endif /* __PERF_PARSE_EVENTS_H */
void parse_events_terms__delete(struct list_head *terms)
void parse_events_terms__purge(struct list_head *terms)
char * parse_events_formats_error_string(char *additional_terms)
int exclude_perf(const struct option *opt, const char *arg, int unset)
void print_tracepoint_events(const char *subsys_glob, const char *event_glob, bool name_only)
void print_symbol_events(const char *event_glob, unsigned type, struct event_symbol *syms, unsigned max, bool name_only)
int int err
Definition: 5sec.c:44
int parse_events__is_hardcoded_term(struct parse_events_term *term)
#define config
int parse_events_name(struct list_head *list, char *name)
const char * alias
Definition: parse-events.h:195
static int term(yyscan_t scanner, int type)
const char * symbol
Definition: parse-events.h:194
struct perf_evlist * evlist
Definition: parse-events.h:120
int parse_events_add_cache(struct list_head *list, int *idx, char *type, char *op_result1, char *op_result2, struct parse_events_error *error, struct list_head *head_config)
Definition: parse-events.c:383
int valid_event_mount(const char *eventfs)
static bool details_flag
Definition: builtin-list.c:23
int parse_events_load_bpf(struct parse_events_state *parse_state, struct list_head *list, char *bpf_file_name, bool source, struct list_head *head_config)
Definition: parse-events.c:780
struct tracepoint_path * tracepoint_id_to_path(u64 config)
Definition: parse-events.c:183
void print_events(const char *event_glob, bool name_only, bool quiet, bool long_desc, bool details_flag)
struct tracepoint_path * tracepoint_name_to_path(const char *name)
Definition: parse-events.c:253
unsigned int start
Definition: parse-events.h:83
struct tracepoint_path * next
Definition: parse-events.h:24
void parse_events_print_error(struct parse_events_error *err, const char *event)
int parse_filter(const struct option *opt, const char *str, int unset)
void parse_events__shrink_config_terms(void)
Definition: parse-events.c:965
struct parse_events_error * error
Definition: parse-events.h:119
void parse_events_evlist_error(struct parse_events_state *parse_state, int idx, const char *str)
int parse_events__modifier_group(struct list_head *list, char *event_mod)
static int str(yyscan_t scanner, int token)
enum perf_pmu_event_symbol_type perf_pmu__parse_check(const char *name)
struct event_symbol event_symbols_hw[]
Definition: parse-events.c:55
int parse_events_term__str(struct parse_events_term **term, int type_term, char *config, char *str, void *loc_term, void *loc_val)
#define event
const char * source
Definition: llvm.c:32
int print_hwcache_events(const char *event_glob, bool name_only)
int parse_events_load_bpf_obj(struct parse_events_state *parse_state, struct list_head *list, struct bpf_object *obj, struct list_head *head_config)
Definition: parse-events.c:650
#define array
int parse_events_term__num(struct parse_events_term **term, int type_term, char *config, u64 num, bool novalue, void *loc_term, void *loc_val)
int parse_events_add_tracepoint(struct list_head *list, int *idx, const char *sys, const char *event, struct parse_events_error *error, struct list_head *head_config)
int is_valid_tracepoint(const char *event_string)
perf_pmu_event_symbol_type
Definition: parse-events.h:42
void parse_events__clear_array(struct parse_events_array *a)
bool have_tracepoints(struct list_head *evlist)
int parse_events(struct perf_evlist *evlist, const char *str, struct parse_events_error *error)
const char * event_type(int type)
Definition: parse-events.c:275
void parse_events_update_lists(struct list_head *list_event, struct list_head *list_all)
struct list_head * terms
Definition: parse-events.h:121
void print_sdt_events(const char *subsys_glob, const char *event_glob, bool name_only)
struct event_symbol event_symbols_sw[]
Definition: parse-events.c:98
int parse_events_multi_pmu_add(struct parse_events_state *parse_state, char *str, struct list_head **listp)
int parse_events_term__sym_hw(struct parse_events_term **term, char *config, unsigned idx)
int parse_events_option(const struct option *opt, const char *str, int unset)
int parse_events_add_breakpoint(struct list_head *list, int *idx, void *ptr, char *type, u64 len)
Definition: parse-events.c:867
int parse_events_terms(struct list_head *terms, const char *str)
struct fake_sym * syms
Definition: hists_common.c:74
int parse_events__modifier_event(struct list_head *list, char *str, bool add)
int parse_events_add_pmu(struct parse_events_state *parse_state, struct list_head *list, char *name, struct list_head *head_config, bool auto_merge_stats, bool use_alias)
int parse_events_copy_term_list(struct list_head *old, struct list_head **new)
void parse_events__set_leader(char *name, struct list_head *list, struct parse_events_state *parse_state)
static bool is_sdt_event(char *str __maybe_unused)
Definition: parse-events.h:228
int parse_events_add_numeric(struct parse_events_state *parse_state, struct list_head *list, u32 type, u64 config, struct list_head *head_config)
int parse_events_term__clone(struct parse_events_term **new, struct parse_events_term *term)
bool quiet
Definition: builtin-probe.c:54