diff options
Diffstat (limited to 'tools/perf/util/parse-events.l')
-rw-r--r-- | tools/perf/util/parse-events.l | 63 |
1 files changed, 32 insertions, 31 deletions
diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l index 91346b753960..343299575b30 100644 --- a/tools/perf/util/parse-events.l +++ b/tools/perf/util/parse-events.l | |||
@@ -126,6 +126,37 @@ modifier_bp [rwx]{1,3} | |||
126 | 126 | ||
127 | } | 127 | } |
128 | 128 | ||
129 | <config>{ | ||
130 | config { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG); } | ||
131 | config1 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG1); } | ||
132 | config2 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG2); } | ||
133 | name { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NAME); } | ||
134 | period { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); } | ||
135 | branch_type { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); } | ||
136 | , { return ','; } | ||
137 | "/" { BEGIN(INITIAL); return '/'; } | ||
138 | {name_minus} { return str(yyscanner, PE_NAME); } | ||
139 | } | ||
140 | |||
141 | <mem>{ | ||
142 | {modifier_bp} { return str(yyscanner, PE_MODIFIER_BP); } | ||
143 | : { return ':'; } | ||
144 | {num_dec} { return value(yyscanner, 10); } | ||
145 | {num_hex} { return value(yyscanner, 16); } | ||
146 | /* | ||
147 | * We need to separate 'mem:' scanner part, in order to get specific | ||
148 | * modifier bits parsed out. Otherwise we would need to handle PE_NAME | ||
149 | * and we'd need to parse it manually. During the escape from <mem> | ||
150 | * state we need to put the escaping char back, so we dont miss it. | ||
151 | */ | ||
152 | . { unput(*yytext); BEGIN(INITIAL); } | ||
153 | /* | ||
154 | * We destroy the scanner after reaching EOF, | ||
155 | * but anyway just to be sure get back to INIT state. | ||
156 | */ | ||
157 | <<EOF>> { BEGIN(INITIAL); } | ||
158 | } | ||
159 | |||
129 | cpu-cycles|cycles { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES); } | 160 | cpu-cycles|cycles { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES); } |
130 | stalled-cycles-frontend|idle-cycles-frontend { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND); } | 161 | stalled-cycles-frontend|idle-cycles-frontend { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND); } |
131 | stalled-cycles-backend|idle-cycles-backend { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_BACKEND); } | 162 | stalled-cycles-backend|idle-cycles-backend { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_BACKEND); } |
@@ -162,18 +193,6 @@ speculative-read|speculative-load | | |||
162 | refs|Reference|ops|access | | 193 | refs|Reference|ops|access | |
163 | misses|miss { return str(yyscanner, PE_NAME_CACHE_OP_RESULT); } | 194 | misses|miss { return str(yyscanner, PE_NAME_CACHE_OP_RESULT); } |
164 | 195 | ||
165 | <config>{ | ||
166 | config { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG); } | ||
167 | config1 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG1); } | ||
168 | config2 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG2); } | ||
169 | name { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NAME); } | ||
170 | period { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); } | ||
171 | branch_type { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); } | ||
172 | , { return ','; } | ||
173 | "/" { BEGIN(INITIAL); return '/'; } | ||
174 | {name_minus} { return str(yyscanner, PE_NAME); } | ||
175 | } | ||
176 | |||
177 | mem: { BEGIN(mem); return PE_PREFIX_MEM; } | 196 | mem: { BEGIN(mem); return PE_PREFIX_MEM; } |
178 | r{num_raw_hex} { return raw(yyscanner); } | 197 | r{num_raw_hex} { return raw(yyscanner); } |
179 | {num_dec} { return value(yyscanner, 10); } | 198 | {num_dec} { return value(yyscanner, 10); } |
@@ -189,25 +208,7 @@ r{num_raw_hex} { return raw(yyscanner); } | |||
189 | "}" { return '}'; } | 208 | "}" { return '}'; } |
190 | = { return '='; } | 209 | = { return '='; } |
191 | \n { } | 210 | \n { } |
192 | 211 | . { } | |
193 | <mem>{ | ||
194 | {modifier_bp} { return str(yyscanner, PE_MODIFIER_BP); } | ||
195 | : { return ':'; } | ||
196 | {num_dec} { return value(yyscanner, 10); } | ||
197 | {num_hex} { return value(yyscanner, 16); } | ||
198 | /* | ||
199 | * We need to separate 'mem:' scanner part, in order to get specific | ||
200 | * modifier bits parsed out. Otherwise we would need to handle PE_NAME | ||
201 | * and we'd need to parse it manually. During the escape from <mem> | ||
202 | * state we need to put the escaping char back, so we dont miss it. | ||
203 | */ | ||
204 | . { unput(*yytext); BEGIN(INITIAL); } | ||
205 | /* | ||
206 | * We destroy the scanner after reaching EOF, | ||
207 | * but anyway just to be sure get back to INIT state. | ||
208 | */ | ||
209 | <<EOF>> { BEGIN(INITIAL); } | ||
210 | } | ||
211 | 212 | ||
212 | %% | 213 | %% |
213 | 214 | ||