| Zheng Yan | ac20de6 | 2012-06-15 14:31:39 +0800 | [diff] [blame] | 1 | %pure-parser | 
| Jiri Olsa | 46010ab | 2012-06-15 14:31:38 +0800 | [diff] [blame] | 2 | %parse-param {void *_data} | 
| Zheng Yan | ac20de6 | 2012-06-15 14:31:39 +0800 | [diff] [blame] | 3 | %parse-param {void *scanner} | 
|  | 4 | %lex-param {void* scanner} | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 5 |  | 
|  | 6 | %{ | 
|  | 7 |  | 
|  | 8 | #define YYDEBUG 1 | 
|  | 9 |  | 
|  | 10 | #include <linux/compiler.h> | 
|  | 11 | #include <linux/list.h> | 
|  | 12 | #include "types.h" | 
|  | 13 | #include "util.h" | 
|  | 14 | #include "parse-events.h" | 
| Zheng Yan | ac20de6 | 2012-06-15 14:31:39 +0800 | [diff] [blame] | 15 | #include "parse-events-bison.h" | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 16 |  | 
| Zheng Yan | ac20de6 | 2012-06-15 14:31:39 +0800 | [diff] [blame] | 17 | extern int parse_events_lex (YYSTYPE* lvalp, void* scanner); | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 18 |  | 
|  | 19 | #define ABORT_ON(val) \ | 
|  | 20 | do { \ | 
|  | 21 | if (val) \ | 
|  | 22 | YYABORT; \ | 
|  | 23 | } while (0) | 
|  | 24 |  | 
| Namhyung Kim | 97f63e4 | 2013-01-22 18:09:29 +0900 | [diff] [blame] | 25 | static inc_group_count(struct list_head *list, | 
|  | 26 | struct parse_events_evlist *data) | 
|  | 27 | { | 
|  | 28 | /* Count groups only have more than 1 members */ | 
|  | 29 | if (!list_is_last(list->next, list)) | 
|  | 30 | data->nr_groups++; | 
|  | 31 | } | 
|  | 32 |  | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 33 | %} | 
|  | 34 |  | 
| Jiri Olsa | 90e2b22 | 2012-06-15 14:31:40 +0800 | [diff] [blame] | 35 | %token PE_START_EVENTS PE_START_TERMS | 
| Jiri Olsa | cf3506d | 2012-07-04 00:00:43 +0200 | [diff] [blame] | 36 | %token PE_VALUE PE_VALUE_SYM_HW PE_VALUE_SYM_SW PE_RAW PE_TERM | 
| Robert Richter | ac2ba9f | 2012-08-16 21:10:21 +0200 | [diff] [blame] | 37 | %token PE_EVENT_NAME | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 38 | %token PE_NAME | 
|  | 39 | %token PE_MODIFIER_EVENT PE_MODIFIER_BP | 
|  | 40 | %token PE_NAME_CACHE_TYPE PE_NAME_CACHE_OP_RESULT | 
| Jiri Olsa | 89efb02 | 2012-08-08 12:14:14 +0200 | [diff] [blame] | 41 | %token PE_PREFIX_MEM PE_PREFIX_RAW PE_PREFIX_GROUP | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 42 | %token PE_ERROR | 
|  | 43 | %type <num> PE_VALUE | 
| Jiri Olsa | cf3506d | 2012-07-04 00:00:43 +0200 | [diff] [blame] | 44 | %type <num> PE_VALUE_SYM_HW | 
|  | 45 | %type <num> PE_VALUE_SYM_SW | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 46 | %type <num> PE_RAW | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 47 | %type <num> PE_TERM | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 48 | %type <str> PE_NAME | 
|  | 49 | %type <str> PE_NAME_CACHE_TYPE | 
|  | 50 | %type <str> PE_NAME_CACHE_OP_RESULT | 
|  | 51 | %type <str> PE_MODIFIER_EVENT | 
|  | 52 | %type <str> PE_MODIFIER_BP | 
| Robert Richter | ac2ba9f | 2012-08-16 21:10:21 +0200 | [diff] [blame] | 53 | %type <str> PE_EVENT_NAME | 
| Jiri Olsa | cf3506d | 2012-07-04 00:00:43 +0200 | [diff] [blame] | 54 | %type <num> value_sym | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 55 | %type <head> event_config | 
|  | 56 | %type <term> event_term | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 57 | %type <head> event_pmu | 
|  | 58 | %type <head> event_legacy_symbol | 
|  | 59 | %type <head> event_legacy_cache | 
|  | 60 | %type <head> event_legacy_mem | 
|  | 61 | %type <head> event_legacy_tracepoint | 
|  | 62 | %type <head> event_legacy_numeric | 
|  | 63 | %type <head> event_legacy_raw | 
|  | 64 | %type <head> event_def | 
| Robert Richter | ac2ba9f | 2012-08-16 21:10:21 +0200 | [diff] [blame] | 65 | %type <head> event_mod | 
|  | 66 | %type <head> event_name | 
| Jiri Olsa | 89efb02 | 2012-08-08 12:14:14 +0200 | [diff] [blame] | 67 | %type <head> event | 
|  | 68 | %type <head> events | 
|  | 69 | %type <head> group_def | 
|  | 70 | %type <head> group | 
|  | 71 | %type <head> groups | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 72 |  | 
|  | 73 | %union | 
|  | 74 | { | 
|  | 75 | char *str; | 
| Robert Richter | b527bab | 2012-08-07 19:43:13 +0200 | [diff] [blame] | 76 | u64 num; | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 77 | struct list_head *head; | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 78 | struct parse_events_term *term; | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 79 | } | 
|  | 80 | %% | 
|  | 81 |  | 
| Jiri Olsa | 90e2b22 | 2012-06-15 14:31:40 +0800 | [diff] [blame] | 82 | start: | 
| Jiri Olsa | 89efb02 | 2012-08-08 12:14:14 +0200 | [diff] [blame] | 83 | PE_START_EVENTS start_events | 
| Jiri Olsa | 90e2b22 | 2012-06-15 14:31:40 +0800 | [diff] [blame] | 84 | | | 
| Jiri Olsa | 89efb02 | 2012-08-08 12:14:14 +0200 | [diff] [blame] | 85 | PE_START_TERMS  start_terms | 
|  | 86 |  | 
|  | 87 | start_events: groups | 
|  | 88 | { | 
| Arnaldo Carvalho de Melo | 23b6339 | 2013-01-18 16:56:57 -0300 | [diff] [blame] | 89 | struct parse_events_evlist *data = _data; | 
| Jiri Olsa | 89efb02 | 2012-08-08 12:14:14 +0200 | [diff] [blame] | 90 |  | 
|  | 91 | parse_events_update_lists($1, &data->list); | 
|  | 92 | } | 
|  | 93 |  | 
|  | 94 | groups: | 
|  | 95 | groups ',' group | 
|  | 96 | { | 
|  | 97 | struct list_head *list  = $1; | 
|  | 98 | struct list_head *group = $3; | 
|  | 99 |  | 
|  | 100 | parse_events_update_lists(group, list); | 
|  | 101 | $$ = list; | 
|  | 102 | } | 
|  | 103 | | | 
|  | 104 | groups ',' event | 
|  | 105 | { | 
|  | 106 | struct list_head *list  = $1; | 
|  | 107 | struct list_head *event = $3; | 
|  | 108 |  | 
|  | 109 | parse_events_update_lists(event, list); | 
|  | 110 | $$ = list; | 
|  | 111 | } | 
|  | 112 | | | 
|  | 113 | group | 
|  | 114 | | | 
|  | 115 | event | 
|  | 116 |  | 
|  | 117 | group: | 
|  | 118 | group_def ':' PE_MODIFIER_EVENT | 
|  | 119 | { | 
|  | 120 | struct list_head *list = $1; | 
|  | 121 |  | 
|  | 122 | ABORT_ON(parse_events__modifier_group(list, $3)); | 
|  | 123 | $$ = list; | 
|  | 124 | } | 
|  | 125 | | | 
|  | 126 | group_def | 
|  | 127 |  | 
|  | 128 | group_def: | 
|  | 129 | PE_NAME '{' events '}' | 
|  | 130 | { | 
|  | 131 | struct list_head *list = $3; | 
|  | 132 |  | 
| Namhyung Kim | 97f63e4 | 2013-01-22 18:09:29 +0900 | [diff] [blame] | 133 | inc_group_count(list, _data); | 
| Arnaldo Carvalho de Melo | 63dab22 | 2012-08-14 16:35:48 -0300 | [diff] [blame] | 134 | parse_events__set_leader($1, list); | 
| Jiri Olsa | 89efb02 | 2012-08-08 12:14:14 +0200 | [diff] [blame] | 135 | $$ = list; | 
|  | 136 | } | 
|  | 137 | | | 
|  | 138 | '{' events '}' | 
|  | 139 | { | 
|  | 140 | struct list_head *list = $2; | 
|  | 141 |  | 
| Namhyung Kim | 97f63e4 | 2013-01-22 18:09:29 +0900 | [diff] [blame] | 142 | inc_group_count(list, _data); | 
| Arnaldo Carvalho de Melo | 63dab22 | 2012-08-14 16:35:48 -0300 | [diff] [blame] | 143 | parse_events__set_leader(NULL, list); | 
| Jiri Olsa | 89efb02 | 2012-08-08 12:14:14 +0200 | [diff] [blame] | 144 | $$ = list; | 
|  | 145 | } | 
| Jiri Olsa | 90e2b22 | 2012-06-15 14:31:40 +0800 | [diff] [blame] | 146 |  | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 147 | events: | 
| Jiri Olsa | 89efb02 | 2012-08-08 12:14:14 +0200 | [diff] [blame] | 148 | events ',' event | 
|  | 149 | { | 
|  | 150 | struct list_head *event = $3; | 
|  | 151 | struct list_head *list  = $1; | 
|  | 152 |  | 
|  | 153 | parse_events_update_lists(event, list); | 
|  | 154 | $$ = list; | 
|  | 155 | } | 
|  | 156 | | | 
|  | 157 | event | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 158 |  | 
| Robert Richter | ac2ba9f | 2012-08-16 21:10:21 +0200 | [diff] [blame] | 159 | event: event_mod | 
|  | 160 |  | 
|  | 161 | event_mod: | 
|  | 162 | event_name PE_MODIFIER_EVENT | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 163 | { | 
| Jiri Olsa | 89efb02 | 2012-08-08 12:14:14 +0200 | [diff] [blame] | 164 | struct list_head *list = $1; | 
| Jiri Olsa | 46010ab | 2012-06-15 14:31:38 +0800 | [diff] [blame] | 165 |  | 
| Jiri Olsa | 5d7be90 | 2012-03-20 19:15:40 +0100 | [diff] [blame] | 166 | /* | 
|  | 167 | * Apply modifier on all events added by single event definition | 
|  | 168 | * (there could be more events added for multiple tracepoint | 
|  | 169 | * definitions via '*?'. | 
|  | 170 | */ | 
| Jiri Olsa | f5b1135 | 2012-08-08 12:21:54 +0200 | [diff] [blame] | 171 | ABORT_ON(parse_events__modifier_event(list, $2, false)); | 
| Jiri Olsa | 89efb02 | 2012-08-08 12:14:14 +0200 | [diff] [blame] | 172 | $$ = list; | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 173 | } | 
|  | 174 | | | 
| Robert Richter | ac2ba9f | 2012-08-16 21:10:21 +0200 | [diff] [blame] | 175 | event_name | 
|  | 176 |  | 
|  | 177 | event_name: | 
|  | 178 | PE_EVENT_NAME event_def | 
|  | 179 | { | 
|  | 180 | ABORT_ON(parse_events_name($2, $1)); | 
|  | 181 | free($1); | 
|  | 182 | $$ = $2; | 
|  | 183 | } | 
|  | 184 | | | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 185 | event_def | 
|  | 186 |  | 
| Jiri Olsa | 5f537a2 | 2012-03-15 20:09:18 +0100 | [diff] [blame] | 187 | event_def: event_pmu | | 
|  | 188 | event_legacy_symbol | | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 189 | event_legacy_cache sep_dc | | 
|  | 190 | event_legacy_mem | | 
|  | 191 | event_legacy_tracepoint sep_dc | | 
|  | 192 | event_legacy_numeric sep_dc | | 
|  | 193 | event_legacy_raw sep_dc | 
|  | 194 |  | 
| Jiri Olsa | 5f537a2 | 2012-03-15 20:09:18 +0100 | [diff] [blame] | 195 | event_pmu: | 
|  | 196 | PE_NAME '/' event_config '/' | 
|  | 197 | { | 
| Arnaldo Carvalho de Melo | 23b6339 | 2013-01-18 16:56:57 -0300 | [diff] [blame] | 198 | struct parse_events_evlist *data = _data; | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 199 | struct list_head *list = NULL; | 
|  | 200 |  | 
| Jiri Olsa | 46010ab | 2012-06-15 14:31:38 +0800 | [diff] [blame] | 201 | ABORT_ON(parse_events_add_pmu(&list, &data->idx, $1, $3)); | 
| Jiri Olsa | 5f537a2 | 2012-03-15 20:09:18 +0100 | [diff] [blame] | 202 | parse_events__free_terms($3); | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 203 | $$ = list; | 
| Jiri Olsa | 5f537a2 | 2012-03-15 20:09:18 +0100 | [diff] [blame] | 204 | } | 
|  | 205 |  | 
| Jiri Olsa | cf3506d | 2012-07-04 00:00:43 +0200 | [diff] [blame] | 206 | value_sym: | 
|  | 207 | PE_VALUE_SYM_HW | 
|  | 208 | | | 
|  | 209 | PE_VALUE_SYM_SW | 
|  | 210 |  | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 211 | event_legacy_symbol: | 
| Jiri Olsa | cf3506d | 2012-07-04 00:00:43 +0200 | [diff] [blame] | 212 | value_sym '/' event_config '/' | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 213 | { | 
| Arnaldo Carvalho de Melo | 23b6339 | 2013-01-18 16:56:57 -0300 | [diff] [blame] | 214 | struct parse_events_evlist *data = _data; | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 215 | struct list_head *list = NULL; | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 216 | int type = $1 >> 16; | 
|  | 217 | int config = $1 & 255; | 
|  | 218 |  | 
| Jiri Olsa | 46010ab | 2012-06-15 14:31:38 +0800 | [diff] [blame] | 219 | ABORT_ON(parse_events_add_numeric(&list, &data->idx, | 
|  | 220 | type, config, $3)); | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 221 | parse_events__free_terms($3); | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 222 | $$ = list; | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 223 | } | 
|  | 224 | | | 
| Jiri Olsa | cf3506d | 2012-07-04 00:00:43 +0200 | [diff] [blame] | 225 | value_sym sep_slash_dc | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 226 | { | 
| Arnaldo Carvalho de Melo | 23b6339 | 2013-01-18 16:56:57 -0300 | [diff] [blame] | 227 | struct parse_events_evlist *data = _data; | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 228 | struct list_head *list = NULL; | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 229 | int type = $1 >> 16; | 
|  | 230 | int config = $1 & 255; | 
|  | 231 |  | 
| Jiri Olsa | 46010ab | 2012-06-15 14:31:38 +0800 | [diff] [blame] | 232 | ABORT_ON(parse_events_add_numeric(&list, &data->idx, | 
|  | 233 | type, config, NULL)); | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 234 | $$ = list; | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 235 | } | 
|  | 236 |  | 
|  | 237 | event_legacy_cache: | 
|  | 238 | PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_RESULT '-' PE_NAME_CACHE_OP_RESULT | 
|  | 239 | { | 
| Arnaldo Carvalho de Melo | 23b6339 | 2013-01-18 16:56:57 -0300 | [diff] [blame] | 240 | struct parse_events_evlist *data = _data; | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 241 | struct list_head *list = NULL; | 
|  | 242 |  | 
| Jiri Olsa | 46010ab | 2012-06-15 14:31:38 +0800 | [diff] [blame] | 243 | ABORT_ON(parse_events_add_cache(&list, &data->idx, $1, $3, $5)); | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 244 | $$ = list; | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 245 | } | 
|  | 246 | | | 
|  | 247 | PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_RESULT | 
|  | 248 | { | 
| Arnaldo Carvalho de Melo | 23b6339 | 2013-01-18 16:56:57 -0300 | [diff] [blame] | 249 | struct parse_events_evlist *data = _data; | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 250 | struct list_head *list = NULL; | 
|  | 251 |  | 
| Jiri Olsa | 46010ab | 2012-06-15 14:31:38 +0800 | [diff] [blame] | 252 | ABORT_ON(parse_events_add_cache(&list, &data->idx, $1, $3, NULL)); | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 253 | $$ = list; | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 254 | } | 
|  | 255 | | | 
|  | 256 | PE_NAME_CACHE_TYPE | 
|  | 257 | { | 
| Arnaldo Carvalho de Melo | 23b6339 | 2013-01-18 16:56:57 -0300 | [diff] [blame] | 258 | struct parse_events_evlist *data = _data; | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 259 | struct list_head *list = NULL; | 
|  | 260 |  | 
| Jiri Olsa | 46010ab | 2012-06-15 14:31:38 +0800 | [diff] [blame] | 261 | ABORT_ON(parse_events_add_cache(&list, &data->idx, $1, NULL, NULL)); | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 262 | $$ = list; | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 263 | } | 
|  | 264 |  | 
|  | 265 | event_legacy_mem: | 
|  | 266 | PE_PREFIX_MEM PE_VALUE ':' PE_MODIFIER_BP sep_dc | 
|  | 267 | { | 
| Arnaldo Carvalho de Melo | 23b6339 | 2013-01-18 16:56:57 -0300 | [diff] [blame] | 268 | struct parse_events_evlist *data = _data; | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 269 | struct list_head *list = NULL; | 
|  | 270 |  | 
| Jiri Olsa | 46010ab | 2012-06-15 14:31:38 +0800 | [diff] [blame] | 271 | ABORT_ON(parse_events_add_breakpoint(&list, &data->idx, | 
|  | 272 | (void *) $2, $4)); | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 273 | $$ = list; | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 274 | } | 
|  | 275 | | | 
|  | 276 | PE_PREFIX_MEM PE_VALUE sep_dc | 
|  | 277 | { | 
| Arnaldo Carvalho de Melo | 23b6339 | 2013-01-18 16:56:57 -0300 | [diff] [blame] | 278 | struct parse_events_evlist *data = _data; | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 279 | struct list_head *list = NULL; | 
|  | 280 |  | 
| Jiri Olsa | 46010ab | 2012-06-15 14:31:38 +0800 | [diff] [blame] | 281 | ABORT_ON(parse_events_add_breakpoint(&list, &data->idx, | 
|  | 282 | (void *) $2, NULL)); | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 283 | $$ = list; | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 284 | } | 
|  | 285 |  | 
|  | 286 | event_legacy_tracepoint: | 
|  | 287 | PE_NAME ':' PE_NAME | 
|  | 288 | { | 
| Arnaldo Carvalho de Melo | 23b6339 | 2013-01-18 16:56:57 -0300 | [diff] [blame] | 289 | struct parse_events_evlist *data = _data; | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 290 | struct list_head *list = NULL; | 
|  | 291 |  | 
| Jiri Olsa | 46010ab | 2012-06-15 14:31:38 +0800 | [diff] [blame] | 292 | ABORT_ON(parse_events_add_tracepoint(&list, &data->idx, $1, $3)); | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 293 | $$ = list; | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 294 | } | 
|  | 295 |  | 
|  | 296 | event_legacy_numeric: | 
|  | 297 | PE_VALUE ':' PE_VALUE | 
|  | 298 | { | 
| Arnaldo Carvalho de Melo | 23b6339 | 2013-01-18 16:56:57 -0300 | [diff] [blame] | 299 | struct parse_events_evlist *data = _data; | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 300 | struct list_head *list = NULL; | 
|  | 301 |  | 
| Robert Richter | b527bab | 2012-08-07 19:43:13 +0200 | [diff] [blame] | 302 | ABORT_ON(parse_events_add_numeric(&list, &data->idx, (u32)$1, $3, NULL)); | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 303 | $$ = list; | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 304 | } | 
|  | 305 |  | 
|  | 306 | event_legacy_raw: | 
|  | 307 | PE_RAW | 
|  | 308 | { | 
| Arnaldo Carvalho de Melo | 23b6339 | 2013-01-18 16:56:57 -0300 | [diff] [blame] | 309 | struct parse_events_evlist *data = _data; | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 310 | struct list_head *list = NULL; | 
|  | 311 |  | 
| Jiri Olsa | 46010ab | 2012-06-15 14:31:38 +0800 | [diff] [blame] | 312 | ABORT_ON(parse_events_add_numeric(&list, &data->idx, | 
|  | 313 | PERF_TYPE_RAW, $1, NULL)); | 
| Jiri Olsa | b847cbd | 2012-05-21 09:12:51 +0200 | [diff] [blame] | 314 | $$ = list; | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 315 | } | 
|  | 316 |  | 
| Jiri Olsa | 89efb02 | 2012-08-08 12:14:14 +0200 | [diff] [blame] | 317 | start_terms: event_config | 
| Jiri Olsa | 90e2b22 | 2012-06-15 14:31:40 +0800 | [diff] [blame] | 318 | { | 
| Arnaldo Carvalho de Melo | 23b6339 | 2013-01-18 16:56:57 -0300 | [diff] [blame] | 319 | struct parse_events_terms *data = _data; | 
| Jiri Olsa | 90e2b22 | 2012-06-15 14:31:40 +0800 | [diff] [blame] | 320 | data->terms = $1; | 
|  | 321 | } | 
|  | 322 |  | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 323 | event_config: | 
|  | 324 | event_config ',' event_term | 
|  | 325 | { | 
|  | 326 | struct list_head *head = $1; | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 327 | struct parse_events_term *term = $3; | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 328 |  | 
|  | 329 | ABORT_ON(!head); | 
|  | 330 | list_add_tail(&term->list, head); | 
|  | 331 | $$ = $1; | 
|  | 332 | } | 
|  | 333 | | | 
|  | 334 | event_term | 
|  | 335 | { | 
|  | 336 | struct list_head *head = malloc(sizeof(*head)); | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 337 | struct parse_events_term *term = $1; | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 338 |  | 
|  | 339 | ABORT_ON(!head); | 
|  | 340 | INIT_LIST_HEAD(head); | 
|  | 341 | list_add_tail(&term->list, head); | 
|  | 342 | $$ = head; | 
|  | 343 | } | 
|  | 344 |  | 
|  | 345 | event_term: | 
|  | 346 | PE_NAME '=' PE_NAME | 
|  | 347 | { | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 348 | struct parse_events_term *term; | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 349 |  | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 350 | ABORT_ON(parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER, | 
| Jiri Olsa | 16fa7e8 | 2012-04-25 18:24:57 +0200 | [diff] [blame] | 351 | $1, $3)); | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 352 | $$ = term; | 
|  | 353 | } | 
|  | 354 | | | 
|  | 355 | PE_NAME '=' PE_VALUE | 
|  | 356 | { | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 357 | struct parse_events_term *term; | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 358 |  | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 359 | ABORT_ON(parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER, | 
| Jiri Olsa | 16fa7e8 | 2012-04-25 18:24:57 +0200 | [diff] [blame] | 360 | $1, $3)); | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 361 | $$ = term; | 
|  | 362 | } | 
|  | 363 | | | 
| Jiri Olsa | 1d33d6d | 2012-10-10 14:53:17 +0200 | [diff] [blame] | 364 | PE_NAME '=' PE_VALUE_SYM_HW | 
|  | 365 | { | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 366 | struct parse_events_term *term; | 
| Jiri Olsa | 1d33d6d | 2012-10-10 14:53:17 +0200 | [diff] [blame] | 367 | int config = $3 & 255; | 
|  | 368 |  | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 369 | ABORT_ON(parse_events_term__sym_hw(&term, $1, config)); | 
| Jiri Olsa | 1d33d6d | 2012-10-10 14:53:17 +0200 | [diff] [blame] | 370 | $$ = term; | 
|  | 371 | } | 
|  | 372 | | | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 373 | PE_NAME | 
|  | 374 | { | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 375 | struct parse_events_term *term; | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 376 |  | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 377 | ABORT_ON(parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER, | 
| Jiri Olsa | 16fa7e8 | 2012-04-25 18:24:57 +0200 | [diff] [blame] | 378 | $1, 1)); | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 379 | $$ = term; | 
|  | 380 | } | 
|  | 381 | | | 
| Jiri Olsa | 1d33d6d | 2012-10-10 14:53:17 +0200 | [diff] [blame] | 382 | PE_VALUE_SYM_HW | 
|  | 383 | { | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 384 | struct parse_events_term *term; | 
| Jiri Olsa | 1d33d6d | 2012-10-10 14:53:17 +0200 | [diff] [blame] | 385 | int config = $1 & 255; | 
|  | 386 |  | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 387 | ABORT_ON(parse_events_term__sym_hw(&term, NULL, config)); | 
| Jiri Olsa | 1d33d6d | 2012-10-10 14:53:17 +0200 | [diff] [blame] | 388 | $$ = term; | 
|  | 389 | } | 
|  | 390 | | | 
| Jiri Olsa | 6b5fc39 | 2012-05-21 09:12:53 +0200 | [diff] [blame] | 391 | PE_TERM '=' PE_NAME | 
|  | 392 | { | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 393 | struct parse_events_term *term; | 
| Jiri Olsa | 6b5fc39 | 2012-05-21 09:12:53 +0200 | [diff] [blame] | 394 |  | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 395 | ABORT_ON(parse_events_term__str(&term, (int)$1, NULL, $3)); | 
| Jiri Olsa | 6b5fc39 | 2012-05-21 09:12:53 +0200 | [diff] [blame] | 396 | $$ = term; | 
|  | 397 | } | 
|  | 398 | | | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 399 | PE_TERM '=' PE_VALUE | 
|  | 400 | { | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 401 | struct parse_events_term *term; | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 402 |  | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 403 | ABORT_ON(parse_events_term__num(&term, (int)$1, NULL, $3)); | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 404 | $$ = term; | 
|  | 405 | } | 
|  | 406 | | | 
|  | 407 | PE_TERM | 
|  | 408 | { | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 409 | struct parse_events_term *term; | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 410 |  | 
| Arnaldo Carvalho de Melo | 6cee6cd | 2013-01-18 16:29:49 -0300 | [diff] [blame] | 411 | ABORT_ON(parse_events_term__num(&term, (int)$1, NULL, 1)); | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 412 | $$ = term; | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 413 | } | 
|  | 414 |  | 
|  | 415 | sep_dc: ':' | | 
|  | 416 |  | 
| Jiri Olsa | 8f707d8 | 2012-03-15 20:09:16 +0100 | [diff] [blame] | 417 | sep_slash_dc: '/' | ':' | | 
|  | 418 |  | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 419 | %% | 
|  | 420 |  | 
| Irina Tirdea | 1d037ca | 2012-09-11 01:15:03 +0300 | [diff] [blame] | 421 | void parse_events_error(void *data __maybe_unused, void *scanner __maybe_unused, | 
|  | 422 | char const *msg __maybe_unused) | 
| Jiri Olsa | 89812fc | 2012-03-15 20:09:15 +0100 | [diff] [blame] | 423 | { | 
|  | 424 | } |