diff options
author | Jiri Olsa <jolsa@redhat.com> | 2012-03-15 15:09:16 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-03-16 13:26:06 -0400 |
commit | 8f707d843c2f4023490a873dbc182f632a3a5906 (patch) | |
tree | e4c6d509756aa869314888de0d5873c4a20a7e92 /tools | |
parent | 89812fc81f8d62d70433a8ff63d26819f372e8ec (diff) |
perf tools: Add config options support for event parsing
Adding a new rule to the event grammar to be able to specify
values of additional attributes of symbolic event.
The new syntax for event symbolic definition is:
event_legacy_symbol: PE_NAME_SYM '/' event_config '/' |
PE_NAME_SYM sep_slash_dc
event_config: event_config ',' event_term | event_term
event_term: PE_NAME '=' PE_NAME |
PE_NAME '=' PE_VALUE
PE_NAME
sep_slash_dc: '/' | ':' |
At the moment the config options are hardcoded to be used for legacy
symbol events to define several perf_event_attr fields. It is:
'config' to define perf_event_attr::config
'config1' to define perf_event_attr::config1
'config2' to define perf_event_attr::config2
'period' to define perf_event_attr::sample_period
Legacy events could be now specified as:
cycles/period=100000/
If term is specified without the value assignment, then 1 is
assigned by default.
Acked-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/n/tip-mgkavww9790jbt2jdkooyv4q@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/builtin-test.c | 22 | ||||
-rw-r--r-- | tools/perf/util/parse-events-bison.c | 310 | ||||
-rw-r--r-- | tools/perf/util/parse-events-bison.h | 23 | ||||
-rw-r--r-- | tools/perf/util/parse-events-flex.c | 713 | ||||
-rw-r--r-- | tools/perf/util/parse-events-flex.h | 2 | ||||
-rw-r--r-- | tools/perf/util/parse-events.c | 99 | ||||
-rw-r--r-- | tools/perf/util/parse-events.h | 31 | ||||
-rw-r--r-- | tools/perf/util/parse-events.l | 19 | ||||
-rw-r--r-- | tools/perf/util/parse-events.y | 94 |
9 files changed, 866 insertions, 447 deletions
diff --git a/tools/perf/builtin-test.c b/tools/perf/builtin-test.c index 844c53a49a5a..8b5359506505 100644 --- a/tools/perf/builtin-test.c +++ b/tools/perf/builtin-test.c | |||
@@ -677,6 +677,24 @@ static int test__checkevent_symbolic_name(struct perf_evlist *evlist) | |||
677 | return 0; | 677 | return 0; |
678 | } | 678 | } |
679 | 679 | ||
680 | static int test__checkevent_symbolic_name_config(struct perf_evlist *evlist) | ||
681 | { | ||
682 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
683 | struct perf_evsel, node); | ||
684 | |||
685 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
686 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
687 | TEST_ASSERT_VAL("wrong config", | ||
688 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | ||
689 | TEST_ASSERT_VAL("wrong period", | ||
690 | 100000 == evsel->attr.sample_period); | ||
691 | TEST_ASSERT_VAL("wrong config1", | ||
692 | 0 == evsel->attr.config1); | ||
693 | TEST_ASSERT_VAL("wrong config2", | ||
694 | 1 == evsel->attr.config2); | ||
695 | return 0; | ||
696 | } | ||
697 | |||
680 | static int test__checkevent_symbolic_alias(struct perf_evlist *evlist) | 698 | static int test__checkevent_symbolic_alias(struct perf_evlist *evlist) |
681 | { | 699 | { |
682 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 700 | struct perf_evsel *evsel = list_entry(evlist->entries.next, |
@@ -884,6 +902,10 @@ static struct test__event_st { | |||
884 | .check = test__checkevent_symbolic_name, | 902 | .check = test__checkevent_symbolic_name, |
885 | }, | 903 | }, |
886 | { | 904 | { |
905 | .name = "cycles/period=100000,config2/", | ||
906 | .check = test__checkevent_symbolic_name_config, | ||
907 | }, | ||
908 | { | ||
887 | .name = "faults", | 909 | .name = "faults", |
888 | .check = test__checkevent_symbolic_alias, | 910 | .check = test__checkevent_symbolic_alias, |
889 | }, | 911 | }, |
diff --git a/tools/perf/util/parse-events-bison.c b/tools/perf/util/parse-events-bison.c index 20fca2635664..ace593a25182 100644 --- a/tools/perf/util/parse-events-bison.c +++ b/tools/perf/util/parse-events-bison.c | |||
@@ -127,14 +127,15 @@ do { \ | |||
127 | PE_VALUE = 258, | 127 | PE_VALUE = 258, |
128 | PE_VALUE_SYM = 259, | 128 | PE_VALUE_SYM = 259, |
129 | PE_RAW = 260, | 129 | PE_RAW = 260, |
130 | PE_NAME = 261, | 130 | PE_TERM = 261, |
131 | PE_MODIFIER_EVENT = 262, | 131 | PE_NAME = 262, |
132 | PE_MODIFIER_BP = 263, | 132 | PE_MODIFIER_EVENT = 263, |
133 | PE_NAME_CACHE_TYPE = 264, | 133 | PE_MODIFIER_BP = 264, |
134 | PE_NAME_CACHE_OP_RESULT = 265, | 134 | PE_NAME_CACHE_TYPE = 265, |
135 | PE_PREFIX_MEM = 266, | 135 | PE_NAME_CACHE_OP_RESULT = 266, |
136 | PE_PREFIX_RAW = 267, | 136 | PE_PREFIX_MEM = 267, |
137 | PE_ERROR = 268 | 137 | PE_PREFIX_RAW = 268, |
138 | PE_ERROR = 269 | ||
138 | }; | 139 | }; |
139 | #endif | 140 | #endif |
140 | 141 | ||
@@ -145,15 +146,17 @@ typedef union YYSTYPE | |||
145 | { | 146 | { |
146 | 147 | ||
147 | /* Line 214 of yacc.c */ | 148 | /* Line 214 of yacc.c */ |
148 | #line 42 "util/parse-events.y" | 149 | #line 45 "util/parse-events.y" |
149 | 150 | ||
150 | char *str; | 151 | char *str; |
151 | unsigned long num; | 152 | unsigned long num; |
153 | struct list_head *head; | ||
154 | struct parse_events__term *term; | ||
152 | 155 | ||
153 | 156 | ||
154 | 157 | ||
155 | /* Line 214 of yacc.c */ | 158 | /* Line 214 of yacc.c */ |
156 | #line 157 "util/parse-events-bison.c" | 159 | #line 160 "util/parse-events-bison.c" |
157 | } YYSTYPE; | 160 | } YYSTYPE; |
158 | # define YYSTYPE_IS_TRIVIAL 1 | 161 | # define YYSTYPE_IS_TRIVIAL 1 |
159 | # define yystype YYSTYPE /* obsolescent; will be withdrawn */ | 162 | # define yystype YYSTYPE /* obsolescent; will be withdrawn */ |
@@ -165,7 +168,7 @@ typedef union YYSTYPE | |||
165 | 168 | ||
166 | 169 | ||
167 | /* Line 264 of yacc.c */ | 170 | /* Line 264 of yacc.c */ |
168 | #line 169 "util/parse-events-bison.c" | 171 | #line 172 "util/parse-events-bison.c" |
169 | 172 | ||
170 | #ifdef short | 173 | #ifdef short |
171 | # undef short | 174 | # undef short |
@@ -378,22 +381,22 @@ union yyalloc | |||
378 | #endif | 381 | #endif |
379 | 382 | ||
380 | /* YYFINAL -- State number of the termination state. */ | 383 | /* YYFINAL -- State number of the termination state. */ |
381 | #define YYFINAL 20 | 384 | #define YYFINAL 23 |
382 | /* YYLAST -- Last index in YYTABLE. */ | 385 | /* YYLAST -- Last index in YYTABLE. */ |
383 | #define YYLAST 27 | 386 | #define YYLAST 38 |
384 | 387 | ||
385 | /* YYNTOKENS -- Number of terminals. */ | 388 | /* YYNTOKENS -- Number of terminals. */ |
386 | #define YYNTOKENS 17 | 389 | #define YYNTOKENS 20 |
387 | /* YYNNTS -- Number of nonterminals. */ | 390 | /* YYNNTS -- Number of nonterminals. */ |
388 | #define YYNNTS 11 | 391 | #define YYNNTS 14 |
389 | /* YYNRULES -- Number of rules. */ | 392 | /* YYNRULES -- Number of rules. */ |
390 | #define YYNRULES 22 | 393 | #define YYNRULES 33 |
391 | /* YYNRULES -- Number of states. */ | 394 | /* YYNRULES -- Number of states. */ |
392 | #define YYNSTATES 39 | 395 | #define YYNSTATES 53 |
393 | 396 | ||
394 | /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ | 397 | /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ |
395 | #define YYUNDEFTOK 2 | 398 | #define YYUNDEFTOK 2 |
396 | #define YYMAXUTOK 268 | 399 | #define YYMAXUTOK 269 |
397 | 400 | ||
398 | #define YYTRANSLATE(YYX) \ | 401 | #define YYTRANSLATE(YYX) \ |
399 | ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) | 402 | ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) |
@@ -405,9 +408,9 @@ static const yytype_uint8 yytranslate[] = | |||
405 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | 408 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
406 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | 409 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
407 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | 410 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
408 | 2, 2, 2, 2, 14, 15, 2, 2, 2, 2, | 411 | 2, 2, 2, 2, 15, 17, 2, 16, 2, 2, |
409 | 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, | 412 | 2, 2, 2, 2, 2, 2, 2, 2, 18, 2, |
410 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | 413 | 2, 19, 2, 2, 2, 2, 2, 2, 2, 2, |
411 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | 414 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
412 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | 415 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
413 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | 416 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
@@ -427,7 +430,7 @@ static const yytype_uint8 yytranslate[] = | |||
427 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | 430 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
428 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | 431 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
429 | 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, | 432 | 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, |
430 | 5, 6, 7, 8, 9, 10, 11, 12, 13 | 433 | 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 |
431 | }; | 434 | }; |
432 | 435 | ||
433 | #if YYDEBUG | 436 | #if YYDEBUG |
@@ -435,29 +438,34 @@ static const yytype_uint8 yytranslate[] = | |||
435 | YYRHS. */ | 438 | YYRHS. */ |
436 | static const yytype_uint8 yyprhs[] = | 439 | static const yytype_uint8 yyprhs[] = |
437 | { | 440 | { |
438 | 0, 0, 3, 7, 9, 12, 14, 17, 20, 22, | 441 | 0, 0, 3, 7, 9, 12, 14, 16, 19, 21, |
439 | 25, 28, 31, 33, 39, 43, 45, 51, 55, 59, | 442 | 24, 27, 30, 35, 38, 44, 48, 50, 56, 60, |
440 | 63, 65, 67 | 443 | 64, 68, 70, 74, 76, 80, 84, 86, 90, 92, |
444 | 94, 95, 97, 99 | ||
441 | }; | 445 | }; |
442 | 446 | ||
443 | /* YYRHS -- A `-1'-separated list of the rules' RHS. */ | 447 | /* YYRHS -- A `-1'-separated list of the rules' RHS. */ |
444 | static const yytype_int8 yyrhs[] = | 448 | static const yytype_int8 yyrhs[] = |
445 | { | 449 | { |
446 | 18, 0, -1, 18, 14, 19, -1, 19, -1, 20, | 450 | 21, 0, -1, 21, 15, 22, -1, 22, -1, 23, |
447 | 7, -1, 20, -1, 21, 27, -1, 22, 27, -1, | 451 | 8, -1, 23, -1, 24, -1, 25, 32, -1, 26, |
448 | 23, -1, 24, 27, -1, 25, 27, -1, 26, 27, | 452 | -1, 27, 32, -1, 28, 32, -1, 29, 32, -1, |
449 | -1, 4, -1, 9, 15, 10, 15, 10, -1, 9, | 453 | 4, 16, 30, 16, -1, 4, 33, -1, 10, 17, |
450 | 15, 10, -1, 9, -1, 11, 3, 16, 8, 27, | 454 | 11, 17, 11, -1, 10, 17, 11, -1, 10, -1, |
451 | -1, 11, 3, 27, -1, 6, 16, 6, -1, 3, | 455 | 12, 3, 18, 9, 32, -1, 12, 3, 32, -1, |
452 | 16, 3, -1, 5, -1, 16, -1, -1 | 456 | 7, 18, 7, -1, 3, 18, 3, -1, 5, -1, |
457 | 30, 15, 31, -1, 31, -1, 7, 19, 7, -1, | ||
458 | 7, 19, 3, -1, 7, -1, 6, 19, 3, -1, | ||
459 | 6, -1, 18, -1, -1, 16, -1, 18, -1, -1 | ||
453 | }; | 460 | }; |
454 | 461 | ||
455 | /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ | 462 | /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ |
456 | static const yytype_uint8 yyrline[] = | 463 | static const yytype_uint8 yyrline[] = |
457 | { | 464 | { |
458 | 0, 49, 49, 49, 52, 57, 59, 60, 61, 62, | 465 | 0, 54, 54, 54, 57, 62, 64, 65, 66, 67, |
459 | 63, 64, 67, 76, 81, 86, 92, 97, 103, 109, | 466 | 68, 69, 72, 81, 90, 95, 100, 106, 111, 117, |
460 | 115, 120, 120 | 467 | 123, 129, 135, 145, 157, 166, 175, 184, 192, 200, |
468 | 200, 202, 202, 202 | ||
461 | }; | 469 | }; |
462 | #endif | 470 | #endif |
463 | 471 | ||
@@ -467,12 +475,13 @@ static const yytype_uint8 yyrline[] = | |||
467 | static const char *const yytname[] = | 475 | static const char *const yytname[] = |
468 | { | 476 | { |
469 | "$end", "error", "$undefined", "PE_VALUE", "PE_VALUE_SYM", "PE_RAW", | 477 | "$end", "error", "$undefined", "PE_VALUE", "PE_VALUE_SYM", "PE_RAW", |
470 | "PE_NAME", "PE_MODIFIER_EVENT", "PE_MODIFIER_BP", "PE_NAME_CACHE_TYPE", | 478 | "PE_TERM", "PE_NAME", "PE_MODIFIER_EVENT", "PE_MODIFIER_BP", |
471 | "PE_NAME_CACHE_OP_RESULT", "PE_PREFIX_MEM", "PE_PREFIX_RAW", "PE_ERROR", | 479 | "PE_NAME_CACHE_TYPE", "PE_NAME_CACHE_OP_RESULT", "PE_PREFIX_MEM", |
472 | "','", "'-'", "':'", "$accept", "events", "event", "event_def", | 480 | "PE_PREFIX_RAW", "PE_ERROR", "','", "'/'", "'-'", "':'", "'='", |
473 | "event_legacy_symbol", "event_legacy_cache", "event_legacy_mem", | 481 | "$accept", "events", "event", "event_def", "event_legacy_symbol", |
474 | "event_legacy_tracepoint", "event_legacy_numeric", "event_legacy_raw", | 482 | "event_legacy_cache", "event_legacy_mem", "event_legacy_tracepoint", |
475 | "sep_dc", 0 | 483 | "event_legacy_numeric", "event_legacy_raw", "event_config", "event_term", |
484 | "sep_dc", "sep_slash_dc", 0 | ||
476 | }; | 485 | }; |
477 | #endif | 486 | #endif |
478 | 487 | ||
@@ -482,24 +491,26 @@ static const char *const yytname[] = | |||
482 | static const yytype_uint16 yytoknum[] = | 491 | static const yytype_uint16 yytoknum[] = |
483 | { | 492 | { |
484 | 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, | 493 | 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, |
485 | 265, 266, 267, 268, 44, 45, 58 | 494 | 265, 266, 267, 268, 269, 44, 47, 45, 58, 61 |
486 | }; | 495 | }; |
487 | # endif | 496 | # endif |
488 | 497 | ||
489 | /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ | 498 | /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ |
490 | static const yytype_uint8 yyr1[] = | 499 | static const yytype_uint8 yyr1[] = |
491 | { | 500 | { |
492 | 0, 17, 18, 18, 19, 19, 20, 20, 20, 20, | 501 | 0, 20, 21, 21, 22, 22, 23, 23, 23, 23, |
493 | 20, 20, 21, 22, 22, 22, 23, 23, 24, 25, | 502 | 23, 23, 24, 24, 25, 25, 25, 26, 26, 27, |
494 | 26, 27, 27 | 503 | 28, 29, 30, 30, 31, 31, 31, 31, 31, 32, |
504 | 32, 33, 33, 33 | ||
495 | }; | 505 | }; |
496 | 506 | ||
497 | /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ | 507 | /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ |
498 | static const yytype_uint8 yyr2[] = | 508 | static const yytype_uint8 yyr2[] = |
499 | { | 509 | { |
500 | 0, 2, 3, 1, 2, 1, 2, 2, 1, 2, | 510 | 0, 2, 3, 1, 2, 1, 1, 2, 1, 2, |
501 | 2, 2, 1, 5, 3, 1, 5, 3, 3, 3, | 511 | 2, 2, 4, 2, 5, 3, 1, 5, 3, 3, |
502 | 1, 1, 0 | 512 | 3, 1, 3, 1, 3, 3, 1, 3, 1, 1, |
513 | 0, 1, 1, 0 | ||
503 | }; | 514 | }; |
504 | 515 | ||
505 | /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state | 516 | /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state |
@@ -507,35 +518,39 @@ static const yytype_uint8 yyr2[] = | |||
507 | means the default is an error. */ | 518 | means the default is an error. */ |
508 | static const yytype_uint8 yydefact[] = | 519 | static const yytype_uint8 yydefact[] = |
509 | { | 520 | { |
510 | 0, 0, 12, 20, 0, 15, 0, 0, 3, 5, | 521 | 0, 0, 33, 21, 0, 16, 0, 0, 3, 5, |
511 | 22, 22, 8, 22, 22, 22, 0, 0, 0, 22, | 522 | 6, 30, 8, 30, 30, 30, 0, 31, 32, 13, |
512 | 1, 0, 4, 21, 6, 7, 9, 10, 11, 19, | 523 | 0, 0, 30, 1, 0, 4, 29, 7, 9, 10, |
513 | 18, 14, 21, 17, 2, 0, 22, 13, 16 | 524 | 11, 20, 28, 26, 0, 23, 19, 15, 29, 18, |
525 | 2, 0, 0, 0, 12, 0, 30, 27, 25, 24, | ||
526 | 22, 14, 17 | ||
514 | }; | 527 | }; |
515 | 528 | ||
516 | /* YYDEFGOTO[NTERM-NUM]. */ | 529 | /* YYDEFGOTO[NTERM-NUM]. */ |
517 | static const yytype_int8 yydefgoto[] = | 530 | static const yytype_int8 yydefgoto[] = |
518 | { | 531 | { |
519 | -1, 7, 8, 9, 10, 11, 12, 13, 14, 15, | 532 | -1, 7, 8, 9, 10, 11, 12, 13, 14, 15, |
520 | 24 | 533 | 34, 35, 27, 19 |
521 | }; | 534 | }; |
522 | 535 | ||
523 | /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing | 536 | /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing |
524 | STATE-NUM. */ | 537 | STATE-NUM. */ |
525 | #define YYPACT_NINF -12 | 538 | #define YYPACT_NINF -14 |
526 | static const yytype_int8 yypact[] = | 539 | static const yytype_int8 yypact[] = |
527 | { | 540 | { |
528 | 7, -10, -12, -12, -9, -6, 2, 1, -12, 10, | 541 | 1, -11, -1, -14, -6, 8, 20, 3, -14, 16, |
529 | -2, -2, -12, -2, -2, -2, 16, 14, 11, 6, | 542 | -14, -2, -14, -2, -2, -2, 23, 13, -14, -14, |
530 | -12, 7, -12, -12, -12, -12, -12, -12, -12, -12, | 543 | 21, 18, 9, -14, 1, -14, -14, -14, -14, -14, |
531 | -12, 8, 18, -12, -12, 17, -2, -12, -12 | 544 | -14, -14, 11, 12, 6, -14, -14, 15, 25, -14, |
545 | -14, 32, 7, 13, -14, 26, -2, -14, -14, -14, | ||
546 | -14, -14, -14 | ||
532 | }; | 547 | }; |
533 | 548 | ||
534 | /* YYPGOTO[NTERM-NUM]. */ | 549 | /* YYPGOTO[NTERM-NUM]. */ |
535 | static const yytype_int8 yypgoto[] = | 550 | static const yytype_int8 yypgoto[] = |
536 | { | 551 | { |
537 | -12, -12, 3, -12, -12, -12, -12, -12, -12, -12, | 552 | -14, -14, 14, -14, -14, -14, -14, -14, -14, -14, |
538 | -11 | 553 | -14, -7, -13, -14 |
539 | }; | 554 | }; |
540 | 555 | ||
541 | /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If | 556 | /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If |
@@ -545,26 +560,30 @@ static const yytype_int8 yypgoto[] = | |||
545 | #define YYTABLE_NINF -1 | 560 | #define YYTABLE_NINF -1 |
546 | static const yytype_uint8 yytable[] = | 561 | static const yytype_uint8 yytable[] = |
547 | { | 562 | { |
548 | 25, 20, 26, 27, 28, 19, 16, 17, 33, 18, | 563 | 28, 29, 30, 23, 1, 2, 3, 16, 4, 39, |
549 | 1, 2, 3, 4, 23, 21, 5, 22, 6, 29, | 564 | 48, 5, 20, 6, 49, 17, 26, 18, 24, 32, |
550 | 30, 31, 32, 35, 34, 38, 36, 37 | 565 | 33, 43, 44, 22, 25, 21, 31, 38, 36, 37, |
566 | 41, 42, 45, 52, 46, 47, 50, 51, 40 | ||
551 | }; | 567 | }; |
552 | 568 | ||
553 | static const yytype_uint8 yycheck[] = | 569 | static const yytype_uint8 yycheck[] = |
554 | { | 570 | { |
555 | 11, 0, 13, 14, 15, 3, 16, 16, 19, 15, | 571 | 13, 14, 15, 0, 3, 4, 5, 18, 7, 22, |
556 | 3, 4, 5, 6, 16, 14, 9, 7, 11, 3, | 572 | 3, 10, 18, 12, 7, 16, 18, 18, 15, 6, |
557 | 6, 10, 16, 15, 21, 36, 8, 10 | 573 | 7, 15, 16, 3, 8, 17, 3, 18, 7, 11, |
574 | 19, 19, 17, 46, 9, 3, 43, 11, 24 | ||
558 | }; | 575 | }; |
559 | 576 | ||
560 | /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing | 577 | /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing |
561 | symbol of state STATE-NUM. */ | 578 | symbol of state STATE-NUM. */ |
562 | static const yytype_uint8 yystos[] = | 579 | static const yytype_uint8 yystos[] = |
563 | { | 580 | { |
564 | 0, 3, 4, 5, 6, 9, 11, 18, 19, 20, | 581 | 0, 3, 4, 5, 7, 10, 12, 21, 22, 23, |
565 | 21, 22, 23, 24, 25, 26, 16, 16, 15, 3, | 582 | 24, 25, 26, 27, 28, 29, 18, 16, 18, 33, |
566 | 0, 14, 7, 16, 27, 27, 27, 27, 27, 3, | 583 | 18, 17, 3, 0, 15, 8, 18, 32, 32, 32, |
567 | 6, 10, 16, 27, 19, 15, 8, 10, 27 | 584 | 32, 3, 6, 7, 30, 31, 7, 11, 18, 32, |
585 | 22, 19, 19, 15, 16, 17, 9, 3, 3, 7, | ||
586 | 31, 11, 32 | ||
568 | }; | 587 | }; |
569 | 588 | ||
570 | #define yyerrok (yyerrstatus = 0) | 589 | #define yyerrok (yyerrstatus = 0) |
@@ -1400,7 +1419,7 @@ yyreduce: | |||
1400 | case 4: | 1419 | case 4: |
1401 | 1420 | ||
1402 | /* Line 1464 of yacc.c */ | 1421 | /* Line 1464 of yacc.c */ |
1403 | #line 53 "util/parse-events.y" | 1422 | #line 58 "util/parse-events.y" |
1404 | { | 1423 | { |
1405 | ABORT_ON(parse_events_modifier(list, (yyvsp[(2) - (2)].str))); | 1424 | ABORT_ON(parse_events_modifier(list, (yyvsp[(2) - (2)].str))); |
1406 | ;} | 1425 | ;} |
@@ -1409,91 +1428,196 @@ yyreduce: | |||
1409 | case 12: | 1428 | case 12: |
1410 | 1429 | ||
1411 | /* Line 1464 of yacc.c */ | 1430 | /* Line 1464 of yacc.c */ |
1412 | #line 68 "util/parse-events.y" | 1431 | #line 73 "util/parse-events.y" |
1413 | { | 1432 | { |
1414 | int type = (yyvsp[(1) - (1)].num) >> 16; | 1433 | int type = (yyvsp[(1) - (4)].num) >> 16; |
1415 | int config = (yyvsp[(1) - (1)].num) & 255; | 1434 | int config = (yyvsp[(1) - (4)].num) & 255; |
1416 | 1435 | ||
1417 | ABORT_ON(parse_events_add_numeric(list, idx, type, config)); | 1436 | ABORT_ON(parse_events_add_numeric(list, idx, type, config, (yyvsp[(3) - (4)].head))); |
1437 | parse_events__free_terms((yyvsp[(3) - (4)].head)); | ||
1418 | ;} | 1438 | ;} |
1419 | break; | 1439 | break; |
1420 | 1440 | ||
1421 | case 13: | 1441 | case 13: |
1422 | 1442 | ||
1423 | /* Line 1464 of yacc.c */ | 1443 | /* Line 1464 of yacc.c */ |
1424 | #line 77 "util/parse-events.y" | 1444 | #line 82 "util/parse-events.y" |
1425 | { | 1445 | { |
1426 | ABORT_ON(parse_events_add_cache(list, idx, (yyvsp[(1) - (5)].str), (yyvsp[(3) - (5)].str), (yyvsp[(5) - (5)].str))); | 1446 | int type = (yyvsp[(1) - (2)].num) >> 16; |
1447 | int config = (yyvsp[(1) - (2)].num) & 255; | ||
1448 | |||
1449 | ABORT_ON(parse_events_add_numeric(list, idx, type, config, NULL)); | ||
1427 | ;} | 1450 | ;} |
1428 | break; | 1451 | break; |
1429 | 1452 | ||
1430 | case 14: | 1453 | case 14: |
1431 | 1454 | ||
1432 | /* Line 1464 of yacc.c */ | 1455 | /* Line 1464 of yacc.c */ |
1433 | #line 82 "util/parse-events.y" | 1456 | #line 91 "util/parse-events.y" |
1434 | { | 1457 | { |
1435 | ABORT_ON(parse_events_add_cache(list, idx, (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str), NULL)); | 1458 | ABORT_ON(parse_events_add_cache(list, idx, (yyvsp[(1) - (5)].str), (yyvsp[(3) - (5)].str), (yyvsp[(5) - (5)].str))); |
1436 | ;} | 1459 | ;} |
1437 | break; | 1460 | break; |
1438 | 1461 | ||
1439 | case 15: | 1462 | case 15: |
1440 | 1463 | ||
1441 | /* Line 1464 of yacc.c */ | 1464 | /* Line 1464 of yacc.c */ |
1442 | #line 87 "util/parse-events.y" | 1465 | #line 96 "util/parse-events.y" |
1443 | { | 1466 | { |
1444 | ABORT_ON(parse_events_add_cache(list, idx, (yyvsp[(1) - (1)].str), NULL, NULL)); | 1467 | ABORT_ON(parse_events_add_cache(list, idx, (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str), NULL)); |
1445 | ;} | 1468 | ;} |
1446 | break; | 1469 | break; |
1447 | 1470 | ||
1448 | case 16: | 1471 | case 16: |
1449 | 1472 | ||
1450 | /* Line 1464 of yacc.c */ | 1473 | /* Line 1464 of yacc.c */ |
1451 | #line 93 "util/parse-events.y" | 1474 | #line 101 "util/parse-events.y" |
1452 | { | 1475 | { |
1453 | ABORT_ON(parse_events_add_breakpoint(list, idx, (void *) (yyvsp[(2) - (5)].num), (yyvsp[(4) - (5)].str))); | 1476 | ABORT_ON(parse_events_add_cache(list, idx, (yyvsp[(1) - (1)].str), NULL, NULL)); |
1454 | ;} | 1477 | ;} |
1455 | break; | 1478 | break; |
1456 | 1479 | ||
1457 | case 17: | 1480 | case 17: |
1458 | 1481 | ||
1459 | /* Line 1464 of yacc.c */ | 1482 | /* Line 1464 of yacc.c */ |
1460 | #line 98 "util/parse-events.y" | 1483 | #line 107 "util/parse-events.y" |
1461 | { | 1484 | { |
1462 | ABORT_ON(parse_events_add_breakpoint(list, idx, (void *) (yyvsp[(2) - (3)].num), NULL)); | 1485 | ABORT_ON(parse_events_add_breakpoint(list, idx, (void *) (yyvsp[(2) - (5)].num), (yyvsp[(4) - (5)].str))); |
1463 | ;} | 1486 | ;} |
1464 | break; | 1487 | break; |
1465 | 1488 | ||
1466 | case 18: | 1489 | case 18: |
1467 | 1490 | ||
1468 | /* Line 1464 of yacc.c */ | 1491 | /* Line 1464 of yacc.c */ |
1469 | #line 104 "util/parse-events.y" | 1492 | #line 112 "util/parse-events.y" |
1470 | { | 1493 | { |
1471 | ABORT_ON(parse_events_add_tracepoint(list, idx, (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str))); | 1494 | ABORT_ON(parse_events_add_breakpoint(list, idx, (void *) (yyvsp[(2) - (3)].num), NULL)); |
1472 | ;} | 1495 | ;} |
1473 | break; | 1496 | break; |
1474 | 1497 | ||
1475 | case 19: | 1498 | case 19: |
1476 | 1499 | ||
1477 | /* Line 1464 of yacc.c */ | 1500 | /* Line 1464 of yacc.c */ |
1478 | #line 110 "util/parse-events.y" | 1501 | #line 118 "util/parse-events.y" |
1479 | { | 1502 | { |
1480 | ABORT_ON(parse_events_add_numeric(list, idx, (yyvsp[(1) - (3)].num), (yyvsp[(3) - (3)].num))); | 1503 | ABORT_ON(parse_events_add_tracepoint(list, idx, (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str))); |
1481 | ;} | 1504 | ;} |
1482 | break; | 1505 | break; |
1483 | 1506 | ||
1484 | case 20: | 1507 | case 20: |
1485 | 1508 | ||
1486 | /* Line 1464 of yacc.c */ | 1509 | /* Line 1464 of yacc.c */ |
1487 | #line 116 "util/parse-events.y" | 1510 | #line 124 "util/parse-events.y" |
1511 | { | ||
1512 | ABORT_ON(parse_events_add_numeric(list, idx, (yyvsp[(1) - (3)].num), (yyvsp[(3) - (3)].num), NULL)); | ||
1513 | ;} | ||
1514 | break; | ||
1515 | |||
1516 | case 21: | ||
1517 | |||
1518 | /* Line 1464 of yacc.c */ | ||
1519 | #line 130 "util/parse-events.y" | ||
1520 | { | ||
1521 | ABORT_ON(parse_events_add_numeric(list, idx, PERF_TYPE_RAW, (yyvsp[(1) - (1)].num), NULL)); | ||
1522 | ;} | ||
1523 | break; | ||
1524 | |||
1525 | case 22: | ||
1526 | |||
1527 | /* Line 1464 of yacc.c */ | ||
1528 | #line 136 "util/parse-events.y" | ||
1488 | { | 1529 | { |
1489 | ABORT_ON(parse_events_add_numeric(list, idx, PERF_TYPE_RAW, (yyvsp[(1) - (1)].num))); | 1530 | struct list_head *head = (yyvsp[(1) - (3)].head); |
1531 | struct parse_events__term *term = (yyvsp[(3) - (3)].term); | ||
1532 | |||
1533 | ABORT_ON(!head); | ||
1534 | list_add_tail(&term->list, head); | ||
1535 | (yyval.head) = (yyvsp[(1) - (3)].head); | ||
1536 | ;} | ||
1537 | break; | ||
1538 | |||
1539 | case 23: | ||
1540 | |||
1541 | /* Line 1464 of yacc.c */ | ||
1542 | #line 146 "util/parse-events.y" | ||
1543 | { | ||
1544 | struct list_head *head = malloc(sizeof(*head)); | ||
1545 | struct parse_events__term *term = (yyvsp[(1) - (1)].term); | ||
1546 | |||
1547 | ABORT_ON(!head); | ||
1548 | INIT_LIST_HEAD(head); | ||
1549 | list_add_tail(&term->list, head); | ||
1550 | (yyval.head) = head; | ||
1551 | ;} | ||
1552 | break; | ||
1553 | |||
1554 | case 24: | ||
1555 | |||
1556 | /* Line 1464 of yacc.c */ | ||
1557 | #line 158 "util/parse-events.y" | ||
1558 | { | ||
1559 | struct parse_events__term *term; | ||
1560 | |||
1561 | ABORT_ON(parse_events__new_term(&term, PARSE_EVENTS__TERM_TYPE_STR, | ||
1562 | (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str), 0)); | ||
1563 | (yyval.term) = term; | ||
1564 | ;} | ||
1565 | break; | ||
1566 | |||
1567 | case 25: | ||
1568 | |||
1569 | /* Line 1464 of yacc.c */ | ||
1570 | #line 167 "util/parse-events.y" | ||
1571 | { | ||
1572 | struct parse_events__term *term; | ||
1573 | |||
1574 | ABORT_ON(parse_events__new_term(&term, PARSE_EVENTS__TERM_TYPE_NUM, | ||
1575 | (yyvsp[(1) - (3)].str), NULL, (yyvsp[(3) - (3)].num))); | ||
1576 | (yyval.term) = term; | ||
1577 | ;} | ||
1578 | break; | ||
1579 | |||
1580 | case 26: | ||
1581 | |||
1582 | /* Line 1464 of yacc.c */ | ||
1583 | #line 176 "util/parse-events.y" | ||
1584 | { | ||
1585 | struct parse_events__term *term; | ||
1586 | |||
1587 | ABORT_ON(parse_events__new_term(&term, PARSE_EVENTS__TERM_TYPE_NUM, | ||
1588 | (yyvsp[(1) - (1)].str), NULL, 1)); | ||
1589 | (yyval.term) = term; | ||
1590 | ;} | ||
1591 | break; | ||
1592 | |||
1593 | case 27: | ||
1594 | |||
1595 | /* Line 1464 of yacc.c */ | ||
1596 | #line 185 "util/parse-events.y" | ||
1597 | { | ||
1598 | struct parse_events__term *term; | ||
1599 | |||
1600 | ABORT_ON(parse_events__new_term(&term, (yyvsp[(1) - (3)].num), NULL, NULL, (yyvsp[(3) - (3)].num))); | ||
1601 | (yyval.term) = term; | ||
1602 | ;} | ||
1603 | break; | ||
1604 | |||
1605 | case 28: | ||
1606 | |||
1607 | /* Line 1464 of yacc.c */ | ||
1608 | #line 193 "util/parse-events.y" | ||
1609 | { | ||
1610 | struct parse_events__term *term; | ||
1611 | |||
1612 | ABORT_ON(parse_events__new_term(&term, (yyvsp[(1) - (1)].num), NULL, NULL, 1)); | ||
1613 | (yyval.term) = term; | ||
1490 | ;} | 1614 | ;} |
1491 | break; | 1615 | break; |
1492 | 1616 | ||
1493 | 1617 | ||
1494 | 1618 | ||
1495 | /* Line 1464 of yacc.c */ | 1619 | /* Line 1464 of yacc.c */ |
1496 | #line 1497 "util/parse-events-bison.c" | 1620 | #line 1621 "util/parse-events-bison.c" |
1497 | default: break; | 1621 | default: break; |
1498 | } | 1622 | } |
1499 | YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); | 1623 | YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); |
@@ -1705,7 +1829,7 @@ yyreturn: | |||
1705 | 1829 | ||
1706 | 1830 | ||
1707 | /* Line 1684 of yacc.c */ | 1831 | /* Line 1684 of yacc.c */ |
1708 | #line 122 "util/parse-events.y" | 1832 | #line 204 "util/parse-events.y" |
1709 | 1833 | ||
1710 | 1834 | ||
1711 | void parse_events_error(struct list_head *list __used, int *idx __used, | 1835 | void parse_events_error(struct list_head *list __used, int *idx __used, |
diff --git a/tools/perf/util/parse-events-bison.h b/tools/perf/util/parse-events-bison.h index 097a6323e6a9..c58b76584f92 100644 --- a/tools/perf/util/parse-events-bison.h +++ b/tools/perf/util/parse-events-bison.h | |||
@@ -41,14 +41,15 @@ | |||
41 | PE_VALUE = 258, | 41 | PE_VALUE = 258, |
42 | PE_VALUE_SYM = 259, | 42 | PE_VALUE_SYM = 259, |
43 | PE_RAW = 260, | 43 | PE_RAW = 260, |
44 | PE_NAME = 261, | 44 | PE_TERM = 261, |
45 | PE_MODIFIER_EVENT = 262, | 45 | PE_NAME = 262, |
46 | PE_MODIFIER_BP = 263, | 46 | PE_MODIFIER_EVENT = 263, |
47 | PE_NAME_CACHE_TYPE = 264, | 47 | PE_MODIFIER_BP = 264, |
48 | PE_NAME_CACHE_OP_RESULT = 265, | 48 | PE_NAME_CACHE_TYPE = 265, |
49 | PE_PREFIX_MEM = 266, | 49 | PE_NAME_CACHE_OP_RESULT = 266, |
50 | PE_PREFIX_RAW = 267, | 50 | PE_PREFIX_MEM = 267, |
51 | PE_ERROR = 268 | 51 | PE_PREFIX_RAW = 268, |
52 | PE_ERROR = 269 | ||
52 | }; | 53 | }; |
53 | #endif | 54 | #endif |
54 | 55 | ||
@@ -59,15 +60,17 @@ typedef union YYSTYPE | |||
59 | { | 60 | { |
60 | 61 | ||
61 | /* Line 1685 of yacc.c */ | 62 | /* Line 1685 of yacc.c */ |
62 | #line 42 "util/parse-events.y" | 63 | #line 45 "util/parse-events.y" |
63 | 64 | ||
64 | char *str; | 65 | char *str; |
65 | unsigned long num; | 66 | unsigned long num; |
67 | struct list_head *head; | ||
68 | struct parse_events__term *term; | ||
66 | 69 | ||
67 | 70 | ||
68 | 71 | ||
69 | /* Line 1685 of yacc.c */ | 72 | /* Line 1685 of yacc.c */ |
70 | #line 71 "util/parse-events-bison.h" | 73 | #line 74 "util/parse-events-bison.h" |
71 | } YYSTYPE; | 74 | } YYSTYPE; |
72 | # define YYSTYPE_IS_TRIVIAL 1 | 75 | # define YYSTYPE_IS_TRIVIAL 1 |
73 | # define yystype YYSTYPE /* obsolescent; will be withdrawn */ | 76 | # define yystype YYSTYPE /* obsolescent; will be withdrawn */ |
diff --git a/tools/perf/util/parse-events-flex.c b/tools/perf/util/parse-events-flex.c index 9e77ed6a0ecf..34cfc85c4f79 100644 --- a/tools/perf/util/parse-events-flex.c +++ b/tools/perf/util/parse-events-flex.c | |||
@@ -378,8 +378,8 @@ static void yy_fatal_error (yyconst char msg[] ); | |||
378 | *yy_cp = '\0'; \ | 378 | *yy_cp = '\0'; \ |
379 | (yy_c_buf_p) = yy_cp; | 379 | (yy_c_buf_p) = yy_cp; |
380 | 380 | ||
381 | #define YY_NUM_RULES 44 | 381 | #define YY_NUM_RULES 49 |
382 | #define YY_END_OF_BUFFER 45 | 382 | #define YY_END_OF_BUFFER 50 |
383 | /* This struct is not used in this scanner, | 383 | /* This struct is not used in this scanner, |
384 | but its presence is necessary. */ | 384 | but its presence is necessary. */ |
385 | struct yy_trans_info | 385 | struct yy_trans_info |
@@ -387,55 +387,56 @@ struct yy_trans_info | |||
387 | flex_int32_t yy_verify; | 387 | flex_int32_t yy_verify; |
388 | flex_int32_t yy_nxt; | 388 | flex_int32_t yy_nxt; |
389 | }; | 389 | }; |
390 | static yyconst flex_int16_t yy_accept[425] = | 390 | static yyconst flex_int16_t yy_accept[440] = |
391 | { 0, | 391 | { 0, |
392 | 0, 0, 45, 44, 38, 41, 40, 39, 34, 34, | 392 | 0, 0, 50, 49, 43, 46, 45, 44, 39, 39, |
393 | 42, 43, 38, 38, 38, 38, 38, 38, 38, 38, | 393 | 47, 48, 43, 43, 43, 43, 43, 43, 43, 43, |
394 | 38, 38, 36, 38, 38, 38, 38, 38, 36, 37, | 394 | 43, 43, 41, 43, 43, 43, 43, 43, 41, 42, |
395 | 38, 38, 37, 37, 38, 34, 0, 38, 38, 38, | 395 | 43, 43, 42, 42, 43, 39, 0, 43, 43, 43, |
396 | 21, 38, 38, 38, 38, 38, 38, 38, 38, 38, | 396 | 21, 43, 43, 43, 43, 43, 43, 43, 43, 43, |
397 | 38, 38, 15, 38, 0, 38, 38, 38, 36, 0, | 397 | 43, 43, 15, 43, 0, 43, 43, 43, 41, 0, |
398 | 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, | 398 | 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, |
399 | 38, 38, 33, 33, 38, 38, 38, 38, 35, 38, | 399 | 43, 43, 43, 38, 38, 43, 43, 43, 43, 40, |
400 | 38, 0, 38, 38, 38, 24, 38, 38, 38, 38, | 400 | 43, 43, 0, 43, 43, 43, 24, 43, 43, 43, |
401 | 38, 38, 0, 38, 38, 38, 36, 0, 38, 38, | 401 | 43, 43, 43, 0, 43, 43, 43, 41, 0, 43, |
402 | 402 | ||
403 | 38, 0, 19, 20, 38, 38, 38, 38, 38, 38, | 403 | 43, 43, 0, 19, 20, 43, 43, 43, 43, 43, |
404 | 38, 30, 38, 38, 33, 33, 38, 38, 38, 38, | 404 | 43, 43, 30, 43, 43, 43, 38, 38, 43, 43, |
405 | 38, 38, 38, 0, 0, 38, 38, 38, 38, 0, | 405 | 43, 43, 43, 43, 43, 0, 0, 43, 43, 43, |
406 | 38, 38, 0, 38, 0, 22, 38, 38, 36, 0, | 406 | 43, 0, 43, 43, 43, 0, 43, 0, 22, 43, |
407 | 23, 38, 38, 19, 20, 26, 38, 32, 38, 38, | 407 | 43, 41, 0, 23, 43, 43, 19, 20, 26, 43, |
408 | 31, 25, 38, 38, 26, 38, 38, 38, 38, 38, | 408 | 37, 43, 43, 31, 25, 43, 43, 43, 26, 43, |
409 | 0, 38, 0, 0, 0, 0, 38, 38, 38, 38, | 409 | 43, 43, 43, 43, 0, 43, 0, 0, 0, 0, |
410 | 0, 38, 38, 0, 0, 38, 22, 38, 38, 36, | 410 | 43, 43, 43, 43, 0, 43, 43, 43, 0, 0, |
411 | 23, 0, 38, 26, 38, 38, 38, 38, 0, 38, | 411 | 43, 22, 43, 43, 41, 23, 0, 43, 26, 43, |
412 | 38, 38, 27, 0, 27, 0, 38, 0, 0, 0, | 412 | 43, 43, 43, 0, 43, 43, 43, 43, 27, 0, |
413 | 413 | ||
414 | 0, 38, 38, 24, 0, 0, 38, 0, 0, 0, | 414 | 27, 0, 43, 0, 0, 0, 0, 43, 43, 24, |
415 | 1, 38, 12, 0, 38, 0, 38, 0, 31, 0, | 415 | 0, 0, 32, 43, 0, 0, 0, 1, 43, 12, |
416 | 38, 38, 38, 0, 0, 38, 0, 0, 0, 38, | 416 | 0, 43, 0, 43, 0, 31, 0, 35, 43, 43, |
417 | 38, 0, 38, 0, 0, 0, 38, 0, 0, 0, | 417 | 43, 0, 0, 43, 0, 0, 0, 43, 43, 0, |
418 | 38, 0, 38, 0, 38, 0, 0, 38, 38, 38, | 418 | 43, 43, 0, 0, 0, 33, 34, 43, 0, 0, |
419 | 0, 38, 0, 0, 0, 38, 38, 0, 0, 7, | 419 | 0, 43, 0, 43, 0, 43, 0, 0, 43, 43, |
420 | 0, 0, 0, 0, 0, 0, 0, 38, 0, 38, | 420 | 43, 0, 43, 0, 0, 0, 43, 43, 0, 0, |
421 | 0, 38, 0, 0, 28, 38, 0, 0, 38, 0, | 421 | 43, 7, 0, 0, 0, 0, 0, 0, 0, 43, |
422 | 38, 0, 0, 0, 0, 0, 0, 10, 0, 0, | 422 | 0, 43, 0, 43, 0, 0, 28, 43, 0, 0, |
423 | 38, 0, 38, 0, 38, 0, 0, 38, 38, 0, | 423 | 43, 0, 43, 0, 0, 43, 0, 0, 0, 0, |
424 | 424 | ||
425 | 0, 38, 0, 0, 0, 0, 9, 0, 0, 0, | 425 | 10, 0, 0, 43, 0, 43, 0, 43, 0, 0, |
426 | 1, 0, 0, 0, 38, 0, 16, 0, 0, 28, | 426 | 43, 43, 0, 0, 43, 0, 0, 0, 0, 43, |
427 | 38, 0, 11, 38, 0, 0, 0, 0, 0, 0, | 427 | 9, 0, 0, 0, 1, 0, 0, 0, 43, 0, |
428 | 0, 0, 0, 0, 38, 0, 0, 12, 38, 0, | 428 | 16, 0, 0, 28, 43, 0, 11, 43, 0, 0, |
429 | 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, | 429 | 0, 0, 36, 0, 0, 0, 0, 0, 0, 43, |
430 | 0, 4, 14, 13, 0, 0, 0, 0, 0, 0, | 430 | 0, 0, 12, 43, 0, 0, 0, 0, 0, 0, |
431 | 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 431 | 6, 0, 0, 0, 0, 0, 4, 14, 13, 0, |
432 | 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, | 432 | 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, |
433 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 433 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
434 | 0, 0, 17, 0, 5, 15, 18, 0, 0, 29, | 434 | 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
435 | 435 | ||
436 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 436 | 0, 0, 0, 0, 0, 0, 0, 17, 0, 5, |
437 | 0, 0, 7, 3, 0, 0, 0, 2, 0, 0, | 437 | 15, 18, 0, 0, 29, 0, 0, 0, 0, 0, |
438 | 0, 0, 0, 0 | 438 | 0, 0, 0, 0, 0, 0, 0, 7, 3, 0, |
439 | 0, 0, 2, 0, 0, 0, 0, 0, 0 | ||
439 | } ; | 440 | } ; |
440 | 441 | ||
441 | static yyconst flex_int32_t yy_ec[256] = | 442 | static yyconst flex_int32_t yy_ec[256] = |
@@ -449,11 +450,11 @@ static yyconst flex_int32_t yy_ec[256] = | |||
449 | 11, 1, 2, 1, 12, 13, 14, 15, 12, 12, | 450 | 11, 1, 2, 1, 12, 13, 14, 15, 12, 12, |
450 | 2, 2, 16, 2, 2, 17, 2, 2, 2, 2, | 451 | 2, 2, 16, 2, 2, 17, 2, 2, 2, 2, |
451 | 2, 18, 2, 19, 2, 2, 2, 2, 2, 2, | 452 | 2, 18, 2, 19, 2, 2, 2, 2, 2, 2, |
452 | 1, 1, 1, 1, 2, 1, 20, 21, 22, 23, | 453 | 1, 1, 1, 1, 20, 1, 21, 22, 23, 24, |
453 | 454 | ||
454 | 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, | 455 | 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, |
455 | 34, 35, 2, 36, 37, 38, 39, 40, 41, 42, | 456 | 35, 36, 2, 37, 38, 39, 40, 41, 42, 43, |
456 | 43, 2, 1, 1, 1, 1, 1, 1, 1, 1, | 457 | 44, 2, 1, 1, 1, 1, 1, 1, 1, 1, |
457 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 458 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
458 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 459 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
459 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 460 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
@@ -470,241 +471,249 @@ static yyconst flex_int32_t yy_ec[256] = | |||
470 | 1, 1, 1, 1, 1 | 471 | 1, 1, 1, 1, 1 |
471 | } ; | 472 | } ; |
472 | 473 | ||
473 | static yyconst flex_int32_t yy_meta[44] = | 474 | static yyconst flex_int32_t yy_meta[45] = |
474 | { 0, | 475 | { 0, |
475 | 1, 2, 1, 1, 1, 3, 3, 3, 3, 1, | 476 | 1, 2, 1, 1, 1, 3, 3, 3, 3, 1, |
476 | 1, 3, 3, 3, 3, 2, 2, 2, 2, 3, | 477 | 1, 3, 3, 3, 3, 2, 2, 2, 2, 2, |
477 | 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, | 478 | 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, |
478 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | 479 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
479 | 2, 2, 2 | 480 | 2, 2, 2, 2 |
480 | } ; | 481 | } ; |
481 | 482 | ||
482 | static yyconst flex_int16_t yy_base[427] = | 483 | static yyconst flex_int16_t yy_base[442] = |
483 | { 0, | 484 | { 0, |
484 | 0, 0, 494, 495, 0, 495, 495, 495, 38, 42, | 485 | 0, 0, 510, 511, 0, 511, 511, 511, 39, 43, |
485 | 495, 495, 473, 459, 45, 467, 32, 20, 40, 53, | 486 | 511, 511, 488, 474, 46, 482, 32, 20, 37, 57, |
486 | 458, 469, 34, 62, 58, 58, 454, 452, 64, 98, | 487 | 473, 484, 34, 64, 59, 64, 469, 467, 78, 113, |
487 | 32, 466, 449, 0, 0, 81, 0, 446, 446, 478, | 488 | 41, 481, 464, 0, 0, 104, 0, 461, 461, 494, |
488 | 0, 467, 455, 457, 450, 54, 457, 455, 438, 452, | 489 | 0, 483, 470, 472, 465, 44, 472, 470, 453, 467, |
489 | 440, 433, 0, 449, 432, 452, 429, 428, 97, 428, | 490 | 455, 448, 0, 464, 447, 468, 444, 443, 64, 443, |
490 | 448, 433, 426, 105, 442, 432, 428, 104, 436, 421, | 491 | 464, 448, 441, 67, 457, 447, 443, 52, 451, 436, |
491 | 431, 432, 431, 77, 430, 95, 416, 424, 0, 431, | 492 | 446, 435, 446, 445, 76, 444, 95, 430, 438, 0, |
492 | 412, 103, 425, 424, 421, 0, 413, 441, 417, 405, | 493 | 445, 426, 100, 439, 438, 435, 0, 427, 456, 431, |
493 | 438, 410, 409, 426, 407, 406, 108, 405, 422, 410, | 494 | 105, 454, 425, 424, 442, 422, 421, 112, 420, 438, |
494 | 495 | ||
495 | 395, 111, 0, 0, 409, 397, 420, 393, 394, 390, | 496 | 425, 410, 117, 0, 0, 424, 412, 436, 408, 409, |
496 | 402, 0, 401, 399, 93, 116, 401, 391, 385, 390, | 497 | 405, 417, 0, 416, 411, 413, 83, 107, 415, 405, |
497 | 381, 414, 381, 76, 46, 380, 378, 381, 391, 390, | 498 | 399, 404, 395, 429, 395, 126, 119, 394, 392, 395, |
498 | 387, 386, 120, 385, 387, 0, 387, 368, 119, 384, | 499 | 405, 404, 401, 396, 399, 100, 398, 400, 0, 400, |
499 | 0, 400, 367, 495, 495, 365, 365, 495, 380, 363, | 500 | 381, 123, 397, 0, 414, 380, 511, 511, 378, 378, |
500 | 374, 0, 393, 372, 371, 355, 362, 368, 387, 366, | 501 | 511, 393, 376, 387, 0, 407, 375, 384, 383, 367, |
501 | 370, 349, 349, 366, 365, 347, 359, 345, 349, 353, | 502 | 374, 380, 400, 378, 383, 361, 361, 378, 377, 359, |
502 | 336, 374, 335, 113, 348, 338, 495, 336, 336, 0, | 503 | 371, 357, 361, 365, 348, 387, 363, 346, 73, 359, |
503 | 495, 350, 332, 0, 366, 331, 364, 330, 341, 327, | 504 | 349, 511, 347, 347, 0, 511, 361, 343, 0, 378, |
504 | 333, 339, 325, 339, 0, 343, 337, 338, 335, 334, | 505 | 342, 376, 341, 352, 353, 337, 343, 349, 335, 349, |
505 | 506 | ||
506 | 317, 321, 329, 121, 330, 119, 313, 316, 327, 322, | 507 | 0, 354, 347, 348, 345, 344, 327, 331, 339, 146, |
507 | 0, 319, 0, 303, 323, 319, 315, 317, 0, 321, | 508 | 340, 123, 150, 323, 326, 337, 332, 0, 329, 0, |
508 | 318, 319, 315, 306, 323, 297, 307, 306, 296, 309, | 509 | 313, 333, 329, 325, 327, 0, 331, 0, 328, 329, |
509 | 297, 129, 292, 297, 299, 302, 321, 302, 292, 286, | 510 | 325, 316, 334, 307, 317, 316, 306, 319, 307, 132, |
510 | 287, 298, 281, 298, 283, 296, 276, 287, 275, 308, | 511 | 301, 301, 306, 308, 311, 0, 0, 331, 311, 301, |
511 | 277, 282, 285, 284, 268, 282, 267, 271, 275, 0, | 512 | 295, 296, 307, 290, 307, 292, 305, 285, 296, 284, |
512 | 278, 264, 275, 262, 268, 273, 276, 262, 263, 265, | 513 | 318, 286, 291, 294, 293, 277, 291, 276, 280, 284, |
513 | 253, 258, 251, 258, 264, 259, 264, 263, 250, 261, | 514 | 268, 0, 286, 272, 283, 270, 276, 281, 284, 270, |
514 | 278, 244, 243, 242, 241, 253, 235, 495, 238, 236, | 515 | 271, 273, 261, 266, 259, 266, 272, 267, 272, 271, |
515 | 269, 248, 237, 239, 232, 237, 229, 229, 225, 221, | 516 | 258, 269, 287, 252, 251, 252, 249, 248, 260, 242, |
516 | 517 | ||
517 | 233, 229, 223, 235, 221, 221, 495, 233, 220, 227, | 518 | 511, 245, 243, 277, 255, 244, 246, 239, 244, 236, |
518 | 495, 226, 228, 215, 218, 212, 0, 211, 211, 0, | 519 | 236, 232, 228, 240, 236, 230, 242, 228, 228, 240, |
519 | 223, 224, 495, 241, 216, 223, 206, 217, 203, 215, | 520 | 511, 239, 226, 233, 511, 232, 234, 221, 224, 218, |
520 | 200, 203, 216, 231, 197, 196, 195, 495, 227, 199, | 521 | 0, 217, 217, 0, 229, 230, 511, 248, 222, 229, |
521 | 210, 194, 188, 187, 188, 495, 191, 201, 189, 182, | 522 | 212, 223, 0, 209, 221, 206, 209, 222, 238, 203, |
522 | 138, 0, 495, 495, 129, 196, 202, 185, 186, 194, | 523 | 202, 201, 511, 234, 205, 217, 200, 194, 193, 194, |
523 | 495, 193, 187, 176, 181, 191, 174, 175, 184, 170, | 524 | 511, 197, 207, 195, 188, 142, 0, 511, 511, 130, |
524 | 193, 167, 166, 179, 178, 495, 163, 178, 165, 178, | 525 | 202, 209, 191, 192, 200, 511, 199, 193, 182, 187, |
525 | 177, 192, 158, 166, 156, 155, 154, 160, 156, 165, | 526 | 197, 180, 181, 190, 176, 200, 173, 172, 185, 184, |
526 | 164, 141, 495, 152, 495, 495, 495, 161, 146, 495, | 527 | 511, 169, 184, 171, 184, 183, 199, 164, 172, 162, |
527 | 528 | ||
528 | 163, 146, 148, 147, 155, 156, 143, 139, 152, 141, | 529 | 161, 160, 166, 162, 171, 170, 147, 511, 158, 511, |
529 | 143, 139, 495, 495, 148, 146, 131, 495, 131, 126, | 530 | 511, 511, 167, 152, 511, 169, 152, 154, 153, 161, |
530 | 125, 81, 85, 495, 165, 68 | 531 | 162, 149, 145, 158, 147, 149, 145, 511, 511, 154, |
532 | 152, 137, 511, 138, 145, 131, 53, 54, 511, 172, | ||
533 | 66 | ||
531 | } ; | 534 | } ; |
532 | 535 | ||
533 | static yyconst flex_int16_t yy_def[427] = | 536 | static yyconst flex_int16_t yy_def[442] = |
534 | { 0, | 537 | { 0, |
535 | 424, 1, 424, 424, 425, 424, 424, 424, 424, 424, | 538 | 439, 1, 439, 439, 440, 439, 439, 439, 439, 439, |
536 | 424, 424, 425, 425, 425, 425, 425, 425, 425, 425, | 539 | 439, 439, 440, 440, 440, 440, 440, 440, 440, 440, |
537 | 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, | 540 | 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, |
538 | 425, 425, 425, 425, 425, 424, 426, 425, 425, 425, | 541 | 440, 440, 440, 440, 440, 439, 441, 440, 440, 440, |
539 | 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, | 542 | 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, |
540 | 425, 425, 425, 425, 424, 425, 425, 425, 425, 424, | 543 | 440, 440, 440, 440, 439, 440, 440, 440, 440, 439, |
541 | 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, | 544 | 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, |
542 | 425, 425, 30, 30, 425, 425, 425, 425, 426, 425, | 545 | 440, 440, 440, 30, 30, 440, 440, 440, 440, 441, |
543 | 425, 424, 425, 425, 425, 425, 425, 425, 425, 425, | 546 | 440, 440, 439, 440, 440, 440, 440, 440, 440, 440, |
544 | 425, 425, 424, 425, 425, 425, 425, 424, 425, 425, | 547 | 440, 440, 440, 439, 440, 440, 440, 440, 439, 440, |
545 | 548 | ||
546 | 425, 424, 425, 425, 425, 425, 425, 425, 425, 425, | 549 | 440, 440, 439, 440, 440, 440, 440, 440, 440, 440, |
547 | 425, 425, 425, 425, 30, 30, 425, 425, 425, 425, | 550 | 440, 440, 440, 440, 440, 440, 30, 30, 440, 440, |
548 | 425, 425, 425, 424, 424, 425, 425, 425, 425, 424, | 551 | 440, 440, 440, 440, 440, 439, 439, 440, 440, 440, |
549 | 425, 425, 424, 425, 424, 425, 425, 425, 425, 424, | 552 | 440, 439, 440, 440, 440, 439, 440, 439, 440, 440, |
550 | 425, 425, 425, 424, 424, 425, 425, 424, 425, 425, | 553 | 440, 440, 439, 440, 440, 440, 439, 439, 440, 440, |
551 | 425, 425, 425, 425, 30, 425, 425, 425, 425, 425, | 554 | 439, 440, 440, 440, 440, 440, 440, 440, 30, 440, |
552 | 424, 425, 424, 424, 424, 424, 425, 425, 425, 425, | 555 | 440, 440, 440, 440, 439, 440, 439, 439, 439, 439, |
553 | 424, 425, 425, 424, 424, 425, 424, 425, 425, 425, | 556 | 440, 440, 440, 440, 439, 440, 440, 440, 439, 439, |
554 | 424, 424, 425, 425, 425, 425, 425, 425, 424, 425, | 557 | 440, 439, 440, 440, 440, 439, 439, 440, 440, 440, |
555 | 425, 425, 425, 424, 425, 424, 425, 424, 424, 424, | 558 | 440, 440, 440, 439, 440, 440, 440, 440, 440, 439, |
556 | 559 | ||
557 | 424, 425, 425, 425, 424, 424, 425, 424, 424, 424, | 560 | 440, 439, 440, 439, 439, 439, 439, 440, 440, 440, |
558 | 425, 425, 425, 424, 425, 424, 425, 424, 425, 424, | 561 | 439, 439, 440, 440, 439, 439, 439, 440, 440, 440, |
559 | 425, 425, 425, 424, 424, 425, 424, 424, 424, 425, | 562 | 439, 440, 439, 440, 439, 440, 439, 440, 440, 440, |
560 | 425, 424, 425, 424, 424, 424, 425, 424, 424, 424, | 563 | 440, 439, 439, 440, 439, 439, 439, 440, 440, 439, |
561 | 425, 424, 425, 424, 425, 424, 424, 425, 425, 425, | 564 | 440, 440, 439, 439, 439, 440, 440, 440, 439, 439, |
562 | 424, 425, 424, 424, 424, 425, 425, 424, 424, 425, | 565 | 439, 440, 439, 440, 439, 440, 439, 439, 440, 440, |
563 | 424, 424, 424, 424, 424, 424, 424, 425, 424, 425, | 566 | 440, 439, 440, 439, 439, 439, 440, 440, 439, 439, |
564 | 424, 425, 424, 424, 425, 425, 424, 424, 425, 424, | 567 | 440, 440, 439, 439, 439, 439, 439, 439, 439, 440, |
565 | 425, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 568 | 439, 440, 439, 440, 439, 439, 440, 440, 439, 439, |
566 | 425, 424, 425, 424, 425, 424, 424, 425, 425, 424, | 569 | 440, 439, 440, 439, 439, 440, 439, 439, 439, 439, |
567 | 570 | ||
568 | 424, 425, 424, 424, 424, 424, 424, 424, 424, 424, | 571 | 439, 439, 439, 440, 439, 440, 439, 440, 439, 439, |
569 | 424, 424, 424, 424, 425, 424, 425, 424, 424, 425, | 572 | 440, 440, 439, 439, 440, 439, 439, 439, 439, 440, |
570 | 425, 424, 424, 425, 424, 424, 424, 424, 424, 424, | 573 | 439, 439, 439, 439, 439, 439, 439, 439, 440, 439, |
571 | 424, 424, 424, 424, 425, 424, 424, 424, 425, 424, | 574 | 440, 439, 439, 440, 440, 439, 439, 440, 439, 439, |
572 | 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 575 | 439, 439, 440, 439, 439, 439, 439, 439, 439, 440, |
573 | 424, 425, 424, 424, 424, 424, 424, 424, 424, 424, | 576 | 439, 439, 439, 440, 439, 439, 439, 439, 439, 439, |
574 | 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 577 | 439, 439, 439, 439, 439, 439, 440, 439, 439, 439, |
575 | 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 578 | 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, |
576 | 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 579 | 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, |
577 | 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 580 | 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, |
578 | 581 | ||
579 | 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 582 | 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, |
580 | 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 583 | 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, |
581 | 424, 424, 424, 0, 424, 424 | 584 | 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, |
585 | 439, 439, 439, 439, 439, 439, 439, 439, 0, 439, | ||
586 | 439 | ||
582 | } ; | 587 | } ; |
583 | 588 | ||
584 | static yyconst flex_int16_t yy_nxt[539] = | 589 | static yyconst flex_int16_t yy_nxt[556] = |
585 | { 0, | 590 | { 0, |
586 | 4, 5, 6, 7, 8, 9, 10, 10, 10, 11, | 591 | 4, 5, 6, 7, 8, 9, 10, 10, 10, 11, |
587 | 12, 5, 5, 5, 13, 14, 15, 16, 5, 17, | 592 | 12, 5, 5, 5, 13, 14, 15, 16, 5, 5, |
588 | 18, 19, 20, 21, 22, 5, 23, 24, 5, 23, | 593 | 17, 18, 19, 20, 21, 22, 5, 23, 24, 5, |
589 | 25, 26, 27, 28, 29, 30, 31, 32, 23, 5, | 594 | 23, 25, 26, 27, 28, 29, 30, 31, 32, 23, |
590 | 33, 34, 5, 36, 36, 36, 36, 36, 36, 36, | 595 | 5, 33, 34, 5, 36, 36, 36, 36, 36, 36, |
591 | 36, 40, 41, 44, 46, 47, 55, 48, 49, 50, | 596 | 36, 36, 40, 41, 44, 46, 47, 50, 48, 49, |
592 | 59, 42, 45, 59, 64, 60, 75, 165, 59, 76, | 597 | 55, 59, 42, 45, 59, 64, 87, 60, 80, 59, |
593 | 79, 56, 59, 51, 52, 86, 53, 66, 166, 37, | 598 | 103, 51, 52, 59, 53, 56, 76, 433, 109, 77, |
594 | 61, 67, 54, 71, 62, 68, 36, 36, 36, 36, | 599 | 54, 37, 61, 87, 66, 110, 438, 62, 67, 111, |
595 | 59, 65, 86, 59, 63, 163, 115, 164, 59, 72, | 600 | 104, 98, 68, 65, 98, 105, 117, 63, 71, 98, |
596 | 601 | ||
597 | 73, 116, 59, 73, 73, 73, 73, 418, 102, 73, | 602 | 74, 118, 72, 98, 215, 59, 159, 74, 59, 36, |
598 | 73, 73, 73, 423, 118, 155, 73, 73, 73, 73, | 603 | 36, 36, 36, 59, 73, 120, 216, 59, 74, 74, |
599 | 73, 74, 73, 97, 232, 124, 97, 103, 119, 108, | 604 | 74, 74, 179, 126, 74, 74, 74, 74, 127, 121, |
600 | 125, 97, 104, 144, 139, 97, 109, 139, 145, 73, | 605 | 134, 74, 180, 74, 74, 74, 74, 75, 74, 142, |
601 | 110, 174, 139, 208, 233, 180, 139, 414, 180, 422, | 606 | 147, 169, 142, 135, 113, 148, 167, 142, 168, 240, |
602 | 235, 175, 112, 180, 236, 209, 258, 180, 366, 368, | 607 | 185, 142, 170, 185, 429, 244, 246, 247, 185, 245, |
603 | 259, 401, 367, 421, 369, 402, 35, 35, 420, 419, | 608 | 269, 383, 185, 381, 270, 241, 384, 382, 416, 437, |
604 | 418, 417, 416, 415, 414, 413, 412, 411, 410, 409, | 609 | 242, 436, 417, 35, 35, 435, 434, 433, 432, 431, |
605 | 408, 407, 406, 405, 404, 403, 400, 400, 399, 398, | 610 | 430, 429, 428, 427, 426, 425, 424, 423, 422, 421, |
606 | 397, 396, 395, 394, 393, 392, 391, 390, 389, 388, | 611 | 420, 419, 418, 415, 415, 414, 413, 412, 411, 410, |
607 | 612 | ||
608 | 387, 386, 385, 384, 383, 181, 382, 381, 380, 379, | 613 | 409, 408, 407, 406, 405, 404, 403, 402, 401, 400, |
609 | 378, 377, 376, 375, 374, 373, 372, 145, 371, 370, | 614 | 399, 398, 186, 397, 396, 395, 394, 393, 392, 391, |
610 | 365, 364, 363, 362, 361, 360, 359, 358, 357, 356, | 615 | 390, 389, 388, 387, 148, 386, 385, 380, 379, 378, |
611 | 355, 354, 353, 352, 351, 350, 349, 348, 347, 346, | 616 | 377, 376, 375, 374, 373, 372, 371, 370, 369, 368, |
612 | 345, 344, 343, 342, 341, 340, 339, 338, 337, 336, | 617 | 367, 366, 365, 364, 363, 362, 361, 360, 359, 358, |
613 | 335, 334, 333, 332, 331, 330, 329, 328, 327, 326, | 618 | 357, 356, 355, 354, 353, 352, 351, 350, 349, 348, |
614 | 325, 324, 323, 322, 321, 320, 319, 318, 317, 316, | 619 | 347, 346, 345, 344, 343, 342, 341, 340, 339, 338, |
615 | 315, 314, 313, 312, 311, 310, 309, 308, 307, 306, | 620 | 337, 336, 335, 334, 333, 332, 331, 330, 329, 328, |
616 | 305, 304, 303, 302, 301, 300, 299, 298, 297, 296, | 621 | 327, 326, 325, 324, 323, 322, 321, 320, 319, 318, |
617 | 295, 294, 293, 292, 291, 290, 289, 288, 287, 286, | 622 | 317, 316, 315, 314, 313, 312, 311, 310, 309, 308, |
618 | 623 | ||
619 | 285, 284, 283, 282, 281, 112, 280, 145, 144, 279, | 624 | 307, 306, 305, 304, 303, 302, 301, 300, 299, 298, |
620 | 278, 277, 276, 275, 274, 273, 272, 271, 270, 269, | 625 | 297, 296, 295, 294, 293, 113, 292, 148, 147, 291, |
621 | 268, 267, 266, 265, 264, 263, 262, 261, 260, 257, | 626 | 290, 289, 288, 287, 286, 285, 284, 283, 282, 281, |
622 | 256, 255, 254, 253, 252, 177, 251, 250, 249, 248, | 627 | 280, 279, 278, 277, 276, 275, 274, 273, 272, 271, |
623 | 247, 246, 245, 244, 243, 242, 241, 240, 239, 238, | 628 | 268, 267, 266, 265, 264, 263, 182, 262, 261, 260, |
624 | 237, 234, 231, 230, 229, 228, 227, 144, 226, 225, | 629 | 259, 258, 257, 256, 255, 254, 253, 252, 251, 250, |
625 | 224, 195, 223, 222, 221, 220, 219, 218, 217, 216, | 630 | 249, 248, 243, 239, 238, 237, 236, 235, 147, 234, |
626 | 215, 214, 213, 212, 211, 210, 207, 206, 205, 204, | 631 | 233, 232, 201, 231, 230, 229, 228, 227, 226, 225, |
627 | 203, 112, 202, 201, 200, 199, 198, 197, 196, 195, | 632 | 224, 223, 222, 221, 220, 219, 218, 217, 214, 213, |
628 | 194, 193, 192, 191, 73, 190, 189, 188, 187, 186, | 633 | 212, 211, 210, 209, 113, 208, 207, 206, 205, 204, |
629 | 634 | ||
630 | 185, 184, 183, 182, 181, 179, 178, 177, 176, 173, | 635 | 203, 202, 201, 200, 199, 198, 197, 74, 196, 195, |
631 | 172, 171, 170, 169, 168, 167, 162, 161, 160, 159, | 636 | 194, 193, 192, 191, 190, 189, 188, 187, 186, 184, |
632 | 158, 157, 156, 154, 153, 152, 151, 150, 149, 148, | 637 | 183, 182, 181, 178, 177, 176, 175, 174, 173, 172, |
633 | 147, 146, 143, 142, 141, 140, 138, 137, 136, 135, | 638 | 171, 166, 165, 164, 163, 162, 161, 160, 158, 157, |
634 | 134, 133, 132, 131, 130, 129, 128, 127, 126, 123, | 639 | 156, 155, 154, 153, 152, 151, 150, 149, 146, 145, |
635 | 122, 121, 120, 117, 73, 114, 113, 112, 111, 107, | 640 | 144, 143, 141, 140, 139, 138, 137, 136, 133, 132, |
636 | 106, 105, 101, 100, 99, 98, 96, 95, 94, 93, | 641 | 131, 130, 129, 128, 125, 124, 123, 122, 119, 74, |
637 | 92, 91, 90, 89, 88, 86, 87, 85, 84, 83, | 642 | 116, 115, 114, 113, 112, 108, 107, 106, 102, 101, |
638 | 41, 82, 81, 80, 78, 77, 70, 69, 58, 57, | 643 | 100, 99, 97, 96, 95, 94, 93, 92, 91, 90, |
639 | 43, 39, 38, 424, 3, 424, 424, 424, 424, 424, | 644 | 89, 87, 88, 86, 85, 84, 41, 83, 82, 81, |
640 | 645 | ||
641 | 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 646 | 79, 78, 70, 69, 58, 57, 43, 39, 38, 439, |
642 | 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 647 | 3, 439, 439, 439, 439, 439, 439, 439, 439, 439, |
643 | 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 648 | 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, |
644 | 424, 424, 424, 424, 424, 424, 424, 424 | 649 | 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, |
650 | 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, | ||
651 | 439, 439, 439, 439, 439 | ||
645 | } ; | 652 | } ; |
646 | 653 | ||
647 | static yyconst flex_int16_t yy_chk[539] = | 654 | static yyconst flex_int16_t yy_chk[556] = |
648 | { 0, | 655 | { 0, |
649 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 656 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
650 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 657 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
651 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 658 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
652 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 659 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
653 | 1, 1, 1, 9, 9, 9, 9, 10, 10, 10, | 660 | 1, 1, 1, 1, 9, 9, 9, 9, 10, 10, |
654 | 10, 15, 15, 17, 18, 18, 20, 18, 18, 19, | 661 | 10, 10, 15, 15, 17, 18, 18, 19, 18, 18, |
655 | 23, 15, 17, 23, 25, 24, 31, 125, 23, 31, | 662 | 20, 23, 15, 17, 23, 25, 46, 24, 441, 23, |
656 | 426, 20, 23, 19, 19, 46, 19, 26, 125, 9, | 663 | 64, 19, 19, 23, 19, 20, 31, 438, 68, 31, |
657 | 24, 26, 19, 29, 24, 26, 36, 36, 36, 36, | 664 | 19, 9, 24, 46, 26, 68, 437, 24, 26, 68, |
658 | 29, 25, 46, 29, 24, 124, 74, 124, 29, 29, | 665 | 64, 59, 26, 25, 59, 64, 75, 24, 29, 59, |
659 | 666 | ||
660 | 74, 74, 29, 30, 30, 30, 30, 423, 64, 30, | 667 | 75, 75, 29, 59, 179, 29, 117, 117, 29, 36, |
661 | 30, 30, 30, 422, 76, 115, 115, 30, 30, 30, | 668 | 36, 36, 36, 29, 29, 77, 179, 29, 30, 30, |
662 | 30, 30, 30, 59, 204, 82, 59, 64, 76, 68, | 669 | 30, 30, 136, 83, 30, 30, 30, 30, 83, 77, |
663 | 82, 59, 64, 102, 97, 59, 68, 97, 102, 116, | 670 | 91, 118, 136, 30, 30, 30, 30, 30, 30, 98, |
664 | 68, 133, 97, 174, 204, 139, 97, 421, 139, 420, | 671 | 103, 127, 98, 91, 118, 103, 126, 98, 126, 210, |
665 | 206, 133, 116, 139, 206, 174, 232, 139, 351, 355, | 672 | 142, 98, 127, 142, 436, 212, 213, 213, 142, 212, |
666 | 232, 392, 351, 419, 355, 392, 425, 425, 417, 416, | 673 | 240, 370, 142, 366, 240, 210, 370, 366, 407, 435, |
667 | 415, 412, 411, 410, 409, 408, 407, 406, 405, 404, | 674 | 210, 434, 407, 440, 440, 432, 431, 430, 427, 426, |
668 | 403, 402, 401, 399, 398, 394, 391, 390, 389, 388, | 675 | 425, 424, 423, 422, 421, 420, 419, 418, 417, 416, |
669 | 387, 386, 385, 384, 383, 382, 381, 380, 379, 378, | 676 | 414, 413, 409, 406, 405, 404, 403, 402, 401, 400, |
670 | 677 | ||
671 | 377, 375, 374, 373, 372, 371, 370, 369, 368, 367, | 678 | 399, 398, 397, 396, 395, 394, 393, 392, 390, 389, |
672 | 366, 365, 364, 363, 362, 360, 359, 358, 357, 356, | 679 | 388, 387, 386, 385, 384, 383, 382, 381, 380, 379, |
673 | 350, 349, 348, 347, 345, 344, 343, 342, 341, 340, | 680 | 378, 377, 375, 374, 373, 372, 371, 365, 364, 363, |
674 | 339, 337, 336, 335, 334, 333, 332, 331, 330, 329, | 681 | 362, 360, 359, 358, 357, 356, 355, 354, 352, 351, |
675 | 328, 327, 326, 325, 324, 322, 321, 319, 318, 316, | 682 | 350, 349, 348, 347, 346, 345, 344, 342, 341, 340, |
676 | 315, 314, 313, 312, 310, 309, 308, 306, 305, 304, | 683 | 339, 338, 336, 335, 333, 332, 330, 329, 328, 327, |
677 | 303, 302, 301, 300, 299, 298, 297, 296, 295, 294, | 684 | 326, 324, 323, 322, 320, 319, 318, 317, 316, 315, |
678 | 293, 292, 291, 290, 289, 287, 286, 285, 284, 283, | 685 | 314, 313, 312, 311, 310, 309, 308, 307, 306, 305, |
679 | 282, 281, 280, 279, 278, 277, 276, 275, 274, 273, | 686 | 304, 303, 302, 300, 299, 298, 297, 296, 295, 294, |
680 | 272, 271, 270, 269, 268, 267, 266, 265, 264, 263, | 687 | 293, 292, 291, 290, 289, 288, 287, 286, 285, 284, |
681 | 688 | ||
682 | 262, 261, 259, 258, 257, 256, 255, 254, 253, 252, | 689 | 283, 282, 281, 280, 279, 278, 277, 276, 275, 274, |
683 | 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, | 690 | 273, 271, 270, 269, 268, 267, 266, 265, 264, 263, |
684 | 241, 240, 239, 238, 237, 236, 235, 234, 233, 231, | 691 | 262, 261, 260, 259, 258, 257, 256, 255, 254, 253, |
685 | 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, | 692 | 252, 251, 250, 249, 248, 245, 244, 243, 242, 241, |
686 | 220, 218, 217, 216, 215, 214, 212, 210, 209, 208, | 693 | 239, 238, 237, 236, 235, 234, 233, 232, 231, 230, |
687 | 207, 205, 203, 202, 201, 200, 199, 198, 197, 196, | 694 | 229, 227, 225, 224, 223, 222, 221, 219, 217, 216, |
688 | 194, 193, 192, 191, 190, 189, 188, 187, 186, 185, | 695 | 215, 214, 211, 209, 208, 207, 206, 205, 204, 203, |
689 | 183, 182, 179, 178, 176, 175, 173, 172, 171, 170, | 696 | 202, 200, 199, 198, 197, 196, 195, 194, 193, 192, |
690 | 169, 168, 167, 166, 165, 164, 163, 162, 161, 160, | 697 | 191, 190, 188, 187, 184, 183, 181, 180, 178, 177, |
691 | 159, 158, 157, 156, 155, 154, 153, 151, 150, 149, | 698 | 176, 175, 174, 173, 172, 171, 170, 169, 168, 167, |
692 | 699 | ||
693 | 147, 146, 143, 142, 140, 138, 137, 135, 134, 132, | 700 | 166, 165, 164, 163, 162, 161, 160, 159, 158, 157, |
694 | 131, 130, 129, 128, 127, 126, 123, 122, 121, 120, | 701 | 156, 154, 153, 152, 150, 149, 146, 145, 143, 141, |
695 | 119, 118, 117, 114, 113, 111, 110, 109, 108, 107, | 702 | 140, 138, 137, 135, 134, 133, 132, 131, 130, 129, |
696 | 106, 105, 101, 100, 99, 98, 96, 95, 94, 93, | 703 | 128, 125, 124, 123, 122, 121, 120, 119, 116, 115, |
697 | 92, 91, 90, 89, 88, 87, 85, 84, 83, 81, | 704 | 114, 112, 111, 110, 109, 108, 107, 106, 102, 101, |
698 | 80, 78, 77, 75, 73, 72, 71, 70, 69, 67, | 705 | 100, 99, 97, 96, 95, 94, 93, 92, 90, 89, |
699 | 66, 65, 63, 62, 61, 60, 58, 57, 56, 55, | 706 | 88, 86, 85, 84, 82, 81, 79, 78, 76, 74, |
700 | 54, 52, 51, 50, 49, 48, 47, 45, 44, 43, | 707 | 73, 72, 71, 70, 69, 67, 66, 65, 63, 62, |
701 | 42, 40, 39, 38, 33, 32, 28, 27, 22, 21, | 708 | 61, 60, 58, 57, 56, 55, 54, 52, 51, 50, |
702 | 16, 14, 13, 3, 424, 424, 424, 424, 424, 424, | 709 | 49, 48, 47, 45, 44, 43, 42, 40, 39, 38, |
703 | 710 | ||
704 | 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 711 | 33, 32, 28, 27, 22, 21, 16, 14, 13, 3, |
705 | 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 712 | 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, |
706 | 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, | 713 | 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, |
707 | 424, 424, 424, 424, 424, 424, 424, 424 | 714 | 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, |
715 | 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, | ||
716 | 439, 439, 439, 439, 439 | ||
708 | } ; | 717 | } ; |
709 | 718 | ||
710 | static yy_state_type yy_last_accepting_state; | 719 | static yy_state_type yy_last_accepting_state; |
@@ -726,6 +735,7 @@ char *parse_events_text; | |||
726 | #include <errno.h> | 735 | #include <errno.h> |
727 | #include "../perf.h" | 736 | #include "../perf.h" |
728 | #include "parse-events-bison.h" | 737 | #include "parse-events-bison.h" |
738 | #include "parse-events.h" | ||
729 | 739 | ||
730 | static int __value(char *str, int base, int token) | 740 | static int __value(char *str, int base, int token) |
731 | { | 741 | { |
@@ -762,7 +772,13 @@ static int sym(int type, int config) | |||
762 | return PE_VALUE_SYM; | 772 | return PE_VALUE_SYM; |
763 | } | 773 | } |
764 | 774 | ||
765 | #line 766 "<stdout>" | 775 | static int term(int type) |
776 | { | ||
777 | parse_events_lval.num = type; | ||
778 | return PE_TERM; | ||
779 | } | ||
780 | |||
781 | #line 782 "<stdout>" | ||
766 | 782 | ||
767 | #define INITIAL 0 | 783 | #define INITIAL 0 |
768 | 784 | ||
@@ -944,9 +960,9 @@ YY_DECL | |||
944 | register char *yy_cp, *yy_bp; | 960 | register char *yy_cp, *yy_bp; |
945 | register int yy_act; | 961 | register int yy_act; |
946 | 962 | ||
947 | #line 53 "util/parse-events.l" | 963 | #line 60 "util/parse-events.l" |
948 | 964 | ||
949 | #line 950 "<stdout>" | 965 | #line 966 "<stdout>" |
950 | 966 | ||
951 | if ( !(yy_init) ) | 967 | if ( !(yy_init) ) |
952 | { | 968 | { |
@@ -999,13 +1015,13 @@ yy_match: | |||
999 | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) | 1015 | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) |
1000 | { | 1016 | { |
1001 | yy_current_state = (int) yy_def[yy_current_state]; | 1017 | yy_current_state = (int) yy_def[yy_current_state]; |
1002 | if ( yy_current_state >= 425 ) | 1018 | if ( yy_current_state >= 440 ) |
1003 | yy_c = yy_meta[(unsigned int) yy_c]; | 1019 | yy_c = yy_meta[(unsigned int) yy_c]; |
1004 | } | 1020 | } |
1005 | yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; | 1021 | yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; |
1006 | ++yy_cp; | 1022 | ++yy_cp; |
1007 | } | 1023 | } |
1008 | while ( yy_base[yy_current_state] != 495 ); | 1024 | while ( yy_base[yy_current_state] != 511 ); |
1009 | 1025 | ||
1010 | yy_find_action: | 1026 | yy_find_action: |
1011 | yy_act = yy_accept[yy_current_state]; | 1027 | yy_act = yy_accept[yy_current_state]; |
@@ -1031,192 +1047,223 @@ do_action: /* This label is used only to access EOF actions. */ | |||
1031 | 1047 | ||
1032 | case 1: | 1048 | case 1: |
1033 | YY_RULE_SETUP | 1049 | YY_RULE_SETUP |
1034 | #line 54 "util/parse-events.l" | 1050 | #line 61 "util/parse-events.l" |
1035 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES); } | 1051 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES); } |
1036 | YY_BREAK | 1052 | YY_BREAK |
1037 | case 2: | 1053 | case 2: |
1038 | YY_RULE_SETUP | 1054 | YY_RULE_SETUP |
1039 | #line 55 "util/parse-events.l" | 1055 | #line 62 "util/parse-events.l" |
1040 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND); } | 1056 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND); } |
1041 | YY_BREAK | 1057 | YY_BREAK |
1042 | case 3: | 1058 | case 3: |
1043 | YY_RULE_SETUP | 1059 | YY_RULE_SETUP |
1044 | #line 56 "util/parse-events.l" | 1060 | #line 63 "util/parse-events.l" |
1045 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_BACKEND); } | 1061 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_BACKEND); } |
1046 | YY_BREAK | 1062 | YY_BREAK |
1047 | case 4: | 1063 | case 4: |
1048 | YY_RULE_SETUP | 1064 | YY_RULE_SETUP |
1049 | #line 57 "util/parse-events.l" | 1065 | #line 64 "util/parse-events.l" |
1050 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_INSTRUCTIONS); } | 1066 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_INSTRUCTIONS); } |
1051 | YY_BREAK | 1067 | YY_BREAK |
1052 | case 5: | 1068 | case 5: |
1053 | YY_RULE_SETUP | 1069 | YY_RULE_SETUP |
1054 | #line 58 "util/parse-events.l" | 1070 | #line 65 "util/parse-events.l" |
1055 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_CACHE_REFERENCES); } | 1071 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_CACHE_REFERENCES); } |
1056 | YY_BREAK | 1072 | YY_BREAK |
1057 | case 6: | 1073 | case 6: |
1058 | YY_RULE_SETUP | 1074 | YY_RULE_SETUP |
1059 | #line 59 "util/parse-events.l" | 1075 | #line 66 "util/parse-events.l" |
1060 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_CACHE_MISSES); } | 1076 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_CACHE_MISSES); } |
1061 | YY_BREAK | 1077 | YY_BREAK |
1062 | case 7: | 1078 | case 7: |
1063 | YY_RULE_SETUP | 1079 | YY_RULE_SETUP |
1064 | #line 60 "util/parse-events.l" | 1080 | #line 67 "util/parse-events.l" |
1065 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_BRANCH_INSTRUCTIONS); } | 1081 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_BRANCH_INSTRUCTIONS); } |
1066 | YY_BREAK | 1082 | YY_BREAK |
1067 | case 8: | 1083 | case 8: |
1068 | YY_RULE_SETUP | 1084 | YY_RULE_SETUP |
1069 | #line 61 "util/parse-events.l" | 1085 | #line 68 "util/parse-events.l" |
1070 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_BRANCH_MISSES); } | 1086 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_BRANCH_MISSES); } |
1071 | YY_BREAK | 1087 | YY_BREAK |
1072 | case 9: | 1088 | case 9: |
1073 | YY_RULE_SETUP | 1089 | YY_RULE_SETUP |
1074 | #line 62 "util/parse-events.l" | 1090 | #line 69 "util/parse-events.l" |
1075 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_BUS_CYCLES); } | 1091 | { return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_BUS_CYCLES); } |
1076 | YY_BREAK | 1092 | YY_BREAK |
1077 | case 10: | 1093 | case 10: |
1078 | YY_RULE_SETUP | 1094 | YY_RULE_SETUP |
1079 | #line 63 "util/parse-events.l" | 1095 | #line 70 "util/parse-events.l" |
1080 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_CLOCK); } | 1096 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_CLOCK); } |
1081 | YY_BREAK | 1097 | YY_BREAK |
1082 | case 11: | 1098 | case 11: |
1083 | YY_RULE_SETUP | 1099 | YY_RULE_SETUP |
1084 | #line 64 "util/parse-events.l" | 1100 | #line 71 "util/parse-events.l" |
1085 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_TASK_CLOCK); } | 1101 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_TASK_CLOCK); } |
1086 | YY_BREAK | 1102 | YY_BREAK |
1087 | case 12: | 1103 | case 12: |
1088 | YY_RULE_SETUP | 1104 | YY_RULE_SETUP |
1089 | #line 65 "util/parse-events.l" | 1105 | #line 72 "util/parse-events.l" |
1090 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS); } | 1106 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS); } |
1091 | YY_BREAK | 1107 | YY_BREAK |
1092 | case 13: | 1108 | case 13: |
1093 | YY_RULE_SETUP | 1109 | YY_RULE_SETUP |
1094 | #line 66 "util/parse-events.l" | 1110 | #line 73 "util/parse-events.l" |
1095 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS_MIN); } | 1111 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS_MIN); } |
1096 | YY_BREAK | 1112 | YY_BREAK |
1097 | case 14: | 1113 | case 14: |
1098 | YY_RULE_SETUP | 1114 | YY_RULE_SETUP |
1099 | #line 67 "util/parse-events.l" | 1115 | #line 74 "util/parse-events.l" |
1100 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS_MAJ); } | 1116 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS_MAJ); } |
1101 | YY_BREAK | 1117 | YY_BREAK |
1102 | case 15: | 1118 | case 15: |
1103 | YY_RULE_SETUP | 1119 | YY_RULE_SETUP |
1104 | #line 68 "util/parse-events.l" | 1120 | #line 75 "util/parse-events.l" |
1105 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CONTEXT_SWITCHES); } | 1121 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CONTEXT_SWITCHES); } |
1106 | YY_BREAK | 1122 | YY_BREAK |
1107 | case 16: | 1123 | case 16: |
1108 | YY_RULE_SETUP | 1124 | YY_RULE_SETUP |
1109 | #line 69 "util/parse-events.l" | 1125 | #line 76 "util/parse-events.l" |
1110 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_MIGRATIONS); } | 1126 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_MIGRATIONS); } |
1111 | YY_BREAK | 1127 | YY_BREAK |
1112 | case 17: | 1128 | case 17: |
1113 | YY_RULE_SETUP | 1129 | YY_RULE_SETUP |
1114 | #line 70 "util/parse-events.l" | 1130 | #line 77 "util/parse-events.l" |
1115 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_ALIGNMENT_FAULTS); } | 1131 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_ALIGNMENT_FAULTS); } |
1116 | YY_BREAK | 1132 | YY_BREAK |
1117 | case 18: | 1133 | case 18: |
1118 | YY_RULE_SETUP | 1134 | YY_RULE_SETUP |
1119 | #line 71 "util/parse-events.l" | 1135 | #line 78 "util/parse-events.l" |
1120 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_EMULATION_FAULTS); } | 1136 | { return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_EMULATION_FAULTS); } |
1121 | YY_BREAK | 1137 | YY_BREAK |
1122 | case 19: | 1138 | case 19: |
1123 | #line 74 "util/parse-events.l" | 1139 | #line 81 "util/parse-events.l" |
1124 | case 20: | 1140 | case 20: |
1125 | #line 75 "util/parse-events.l" | 1141 | #line 82 "util/parse-events.l" |
1126 | case 21: | 1142 | case 21: |
1127 | #line 76 "util/parse-events.l" | 1143 | #line 83 "util/parse-events.l" |
1128 | case 22: | 1144 | case 22: |
1129 | #line 77 "util/parse-events.l" | 1145 | #line 84 "util/parse-events.l" |
1130 | case 23: | 1146 | case 23: |
1131 | #line 78 "util/parse-events.l" | 1147 | #line 85 "util/parse-events.l" |
1132 | case 24: | 1148 | case 24: |
1133 | #line 79 "util/parse-events.l" | 1149 | #line 86 "util/parse-events.l" |
1134 | case 25: | 1150 | case 25: |
1135 | YY_RULE_SETUP | 1151 | YY_RULE_SETUP |
1136 | #line 79 "util/parse-events.l" | 1152 | #line 86 "util/parse-events.l" |
1137 | { return str(PE_NAME_CACHE_TYPE); } | 1153 | { return str(PE_NAME_CACHE_TYPE); } |
1138 | YY_BREAK | 1154 | YY_BREAK |
1139 | case 26: | 1155 | case 26: |
1140 | #line 82 "util/parse-events.l" | 1156 | #line 89 "util/parse-events.l" |
1141 | case 27: | 1157 | case 27: |
1142 | #line 83 "util/parse-events.l" | 1158 | #line 90 "util/parse-events.l" |
1143 | case 28: | 1159 | case 28: |
1144 | #line 84 "util/parse-events.l" | 1160 | #line 91 "util/parse-events.l" |
1145 | case 29: | 1161 | case 29: |
1146 | #line 85 "util/parse-events.l" | 1162 | #line 92 "util/parse-events.l" |
1147 | case 30: | 1163 | case 30: |
1148 | #line 86 "util/parse-events.l" | 1164 | #line 93 "util/parse-events.l" |
1149 | case 31: | 1165 | case 31: |
1150 | YY_RULE_SETUP | 1166 | YY_RULE_SETUP |
1151 | #line 86 "util/parse-events.l" | 1167 | #line 93 "util/parse-events.l" |
1152 | { return str(PE_NAME_CACHE_OP_RESULT); } | 1168 | { return str(PE_NAME_CACHE_OP_RESULT); } |
1153 | YY_BREAK | 1169 | YY_BREAK |
1170 | /* | ||
1171 | * These are event config hardcoded term names to be specified | ||
1172 | * within xxx/.../ syntax. So far we dont clash with other names, | ||
1173 | * so we can put them here directly. In case the we have a conflict | ||
1174 | * in future, this needs to go into '//' condition block. | ||
1175 | */ | ||
1154 | case 32: | 1176 | case 32: |
1155 | YY_RULE_SETUP | 1177 | YY_RULE_SETUP |
1156 | #line 88 "util/parse-events.l" | 1178 | #line 101 "util/parse-events.l" |
1157 | { return PE_PREFIX_MEM; } | 1179 | { return term(PARSE_EVENTS__TERM_TYPE_CONFIG); } |
1158 | YY_BREAK | 1180 | YY_BREAK |
1159 | case 33: | 1181 | case 33: |
1160 | YY_RULE_SETUP | 1182 | YY_RULE_SETUP |
1161 | #line 89 "util/parse-events.l" | 1183 | #line 102 "util/parse-events.l" |
1162 | { return raw(); } | 1184 | { return term(PARSE_EVENTS__TERM_TYPE_CONFIG1); } |
1163 | YY_BREAK | 1185 | YY_BREAK |
1164 | case 34: | 1186 | case 34: |
1165 | YY_RULE_SETUP | 1187 | YY_RULE_SETUP |
1166 | #line 90 "util/parse-events.l" | 1188 | #line 103 "util/parse-events.l" |
1167 | { return value(10); } | 1189 | { return term(PARSE_EVENTS__TERM_TYPE_CONFIG2); } |
1168 | YY_BREAK | 1190 | YY_BREAK |
1169 | case 35: | 1191 | case 35: |
1170 | YY_RULE_SETUP | 1192 | YY_RULE_SETUP |
1171 | #line 91 "util/parse-events.l" | 1193 | #line 104 "util/parse-events.l" |
1172 | { return value(16); } | 1194 | { return term(PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); } |
1173 | YY_BREAK | 1195 | YY_BREAK |
1174 | case 36: | 1196 | case 36: |
1175 | YY_RULE_SETUP | 1197 | YY_RULE_SETUP |
1176 | #line 93 "util/parse-events.l" | 1198 | #line 105 "util/parse-events.l" |
1177 | { return str(PE_MODIFIER_EVENT); } | 1199 | { return term(PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); } |
1178 | YY_BREAK | 1200 | YY_BREAK |
1179 | case 37: | 1201 | case 37: |
1180 | YY_RULE_SETUP | 1202 | YY_RULE_SETUP |
1181 | #line 94 "util/parse-events.l" | 1203 | #line 107 "util/parse-events.l" |
1182 | { return str(PE_MODIFIER_BP); } | 1204 | { return PE_PREFIX_MEM; } |
1183 | YY_BREAK | 1205 | YY_BREAK |
1184 | case 38: | 1206 | case 38: |
1185 | YY_RULE_SETUP | 1207 | YY_RULE_SETUP |
1186 | #line 95 "util/parse-events.l" | 1208 | #line 108 "util/parse-events.l" |
1187 | { return str(PE_NAME); } | 1209 | { return raw(); } |
1188 | YY_BREAK | 1210 | YY_BREAK |
1189 | case 39: | 1211 | case 39: |
1190 | YY_RULE_SETUP | 1212 | YY_RULE_SETUP |
1191 | #line 96 "util/parse-events.l" | 1213 | #line 109 "util/parse-events.l" |
1192 | { return '/'; } | 1214 | { return value(10); } |
1193 | YY_BREAK | 1215 | YY_BREAK |
1194 | case 40: | 1216 | case 40: |
1195 | YY_RULE_SETUP | 1217 | YY_RULE_SETUP |
1196 | #line 97 "util/parse-events.l" | 1218 | #line 110 "util/parse-events.l" |
1197 | { return '-'; } | 1219 | { return value(16); } |
1198 | YY_BREAK | 1220 | YY_BREAK |
1199 | case 41: | 1221 | case 41: |
1200 | YY_RULE_SETUP | 1222 | YY_RULE_SETUP |
1201 | #line 98 "util/parse-events.l" | 1223 | #line 112 "util/parse-events.l" |
1202 | { return ','; } | 1224 | { return str(PE_MODIFIER_EVENT); } |
1203 | YY_BREAK | 1225 | YY_BREAK |
1204 | case 42: | 1226 | case 42: |
1205 | YY_RULE_SETUP | 1227 | YY_RULE_SETUP |
1206 | #line 99 "util/parse-events.l" | 1228 | #line 113 "util/parse-events.l" |
1207 | { return ':'; } | 1229 | { return str(PE_MODIFIER_BP); } |
1208 | YY_BREAK | 1230 | YY_BREAK |
1209 | case 43: | 1231 | case 43: |
1210 | YY_RULE_SETUP | 1232 | YY_RULE_SETUP |
1211 | #line 100 "util/parse-events.l" | 1233 | #line 114 "util/parse-events.l" |
1212 | { return '='; } | 1234 | { return str(PE_NAME); } |
1213 | YY_BREAK | 1235 | YY_BREAK |
1214 | case 44: | 1236 | case 44: |
1215 | YY_RULE_SETUP | 1237 | YY_RULE_SETUP |
1216 | #line 102 "util/parse-events.l" | 1238 | #line 115 "util/parse-events.l" |
1239 | { return '/'; } | ||
1240 | YY_BREAK | ||
1241 | case 45: | ||
1242 | YY_RULE_SETUP | ||
1243 | #line 116 "util/parse-events.l" | ||
1244 | { return '-'; } | ||
1245 | YY_BREAK | ||
1246 | case 46: | ||
1247 | YY_RULE_SETUP | ||
1248 | #line 117 "util/parse-events.l" | ||
1249 | { return ','; } | ||
1250 | YY_BREAK | ||
1251 | case 47: | ||
1252 | YY_RULE_SETUP | ||
1253 | #line 118 "util/parse-events.l" | ||
1254 | { return ':'; } | ||
1255 | YY_BREAK | ||
1256 | case 48: | ||
1257 | YY_RULE_SETUP | ||
1258 | #line 119 "util/parse-events.l" | ||
1259 | { return '='; } | ||
1260 | YY_BREAK | ||
1261 | case 49: | ||
1262 | YY_RULE_SETUP | ||
1263 | #line 121 "util/parse-events.l" | ||
1217 | ECHO; | 1264 | ECHO; |
1218 | YY_BREAK | 1265 | YY_BREAK |
1219 | #line 1220 "<stdout>" | 1266 | #line 1267 "<stdout>" |
1220 | case YY_STATE_EOF(INITIAL): | 1267 | case YY_STATE_EOF(INITIAL): |
1221 | yyterminate(); | 1268 | yyterminate(); |
1222 | 1269 | ||
@@ -1508,7 +1555,7 @@ static int yy_get_next_buffer (void) | |||
1508 | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) | 1555 | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) |
1509 | { | 1556 | { |
1510 | yy_current_state = (int) yy_def[yy_current_state]; | 1557 | yy_current_state = (int) yy_def[yy_current_state]; |
1511 | if ( yy_current_state >= 425 ) | 1558 | if ( yy_current_state >= 440 ) |
1512 | yy_c = yy_meta[(unsigned int) yy_c]; | 1559 | yy_c = yy_meta[(unsigned int) yy_c]; |
1513 | } | 1560 | } |
1514 | yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; | 1561 | yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; |
@@ -1536,11 +1583,11 @@ static int yy_get_next_buffer (void) | |||
1536 | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) | 1583 | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) |
1537 | { | 1584 | { |
1538 | yy_current_state = (int) yy_def[yy_current_state]; | 1585 | yy_current_state = (int) yy_def[yy_current_state]; |
1539 | if ( yy_current_state >= 425 ) | 1586 | if ( yy_current_state >= 440 ) |
1540 | yy_c = yy_meta[(unsigned int) yy_c]; | 1587 | yy_c = yy_meta[(unsigned int) yy_c]; |
1541 | } | 1588 | } |
1542 | yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; | 1589 | yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; |
1543 | yy_is_jam = (yy_current_state == 424); | 1590 | yy_is_jam = (yy_current_state == 439); |
1544 | 1591 | ||
1545 | return yy_is_jam ? 0 : yy_current_state; | 1592 | return yy_is_jam ? 0 : yy_current_state; |
1546 | } | 1593 | } |
@@ -2214,7 +2261,7 @@ void parse_events_free (void * ptr ) | |||
2214 | 2261 | ||
2215 | #define YYTABLES_NAME "yytables" | 2262 | #define YYTABLES_NAME "yytables" |
2216 | 2263 | ||
2217 | #line 102 "util/parse-events.l" | 2264 | #line 121 "util/parse-events.l" |
2218 | 2265 | ||
2219 | 2266 | ||
2220 | 2267 | ||
diff --git a/tools/perf/util/parse-events-flex.h b/tools/perf/util/parse-events-flex.h index b927f9a12c30..ceb9b20d732c 100644 --- a/tools/perf/util/parse-events-flex.h +++ b/tools/perf/util/parse-events-flex.h | |||
@@ -308,7 +308,7 @@ extern int parse_events_lex (void); | |||
308 | #undef YY_DECL | 308 | #undef YY_DECL |
309 | #endif | 309 | #endif |
310 | 310 | ||
311 | #line 102 "util/parse-events.l" | 311 | #line 121 "util/parse-events.l" |
312 | 312 | ||
313 | 313 | ||
314 | #line 315 "util/parse-events-flex.h" | 314 | #line 315 "util/parse-events-flex.h" |
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 6e50b914cad4..59f5cf64ef70 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c | |||
@@ -588,15 +588,60 @@ int parse_events_add_breakpoint(struct list_head *list, int *idx, | |||
588 | return add_event(list, idx, &attr, name); | 588 | return add_event(list, idx, &attr, name); |
589 | } | 589 | } |
590 | 590 | ||
591 | int | 591 | static int config_term(struct perf_event_attr *attr, |
592 | parse_events_add_numeric(struct list_head *list, int *idx, | 592 | struct parse_events__term *term) |
593 | unsigned long type, unsigned long config) | 593 | { |
594 | switch (term->type) { | ||
595 | case PARSE_EVENTS__TERM_TYPE_CONFIG: | ||
596 | attr->config = term->val.num; | ||
597 | break; | ||
598 | case PARSE_EVENTS__TERM_TYPE_CONFIG1: | ||
599 | attr->config1 = term->val.num; | ||
600 | break; | ||
601 | case PARSE_EVENTS__TERM_TYPE_CONFIG2: | ||
602 | attr->config2 = term->val.num; | ||
603 | break; | ||
604 | case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD: | ||
605 | attr->sample_period = term->val.num; | ||
606 | break; | ||
607 | case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE: | ||
608 | /* | ||
609 | * TODO uncomment when the field is available | ||
610 | * attr->branch_sample_type = term->val.num; | ||
611 | */ | ||
612 | break; | ||
613 | default: | ||
614 | return -EINVAL; | ||
615 | } | ||
616 | return 0; | ||
617 | } | ||
618 | |||
619 | static int config_attr(struct perf_event_attr *attr, | ||
620 | struct list_head *head, int fail) | ||
621 | { | ||
622 | struct parse_events__term *term; | ||
623 | |||
624 | list_for_each_entry(term, head, list) | ||
625 | if (config_term(attr, term) && fail) | ||
626 | return -EINVAL; | ||
627 | |||
628 | return 0; | ||
629 | } | ||
630 | |||
631 | int parse_events_add_numeric(struct list_head *list, int *idx, | ||
632 | unsigned long type, unsigned long config, | ||
633 | struct list_head *head_config) | ||
594 | { | 634 | { |
595 | struct perf_event_attr attr; | 635 | struct perf_event_attr attr; |
596 | 636 | ||
597 | memset(&attr, 0, sizeof(attr)); | 637 | memset(&attr, 0, sizeof(attr)); |
598 | attr.type = type; | 638 | attr.type = type; |
599 | attr.config = config; | 639 | attr.config = config; |
640 | |||
641 | if (head_config && | ||
642 | config_attr(&attr, head_config, 1)) | ||
643 | return -EINVAL; | ||
644 | |||
600 | return add_event(list, idx, &attr, | 645 | return add_event(list, idx, &attr, |
601 | (char *) __event_name(type, config)); | 646 | (char *) __event_name(type, config)); |
602 | } | 647 | } |
@@ -923,3 +968,51 @@ void print_events(const char *event_glob) | |||
923 | 968 | ||
924 | print_tracepoint_events(NULL, NULL); | 969 | print_tracepoint_events(NULL, NULL); |
925 | } | 970 | } |
971 | |||
972 | int parse_events__is_hardcoded_term(struct parse_events__term *term) | ||
973 | { | ||
974 | return term->type <= PARSE_EVENTS__TERM_TYPE_HARDCODED_MAX; | ||
975 | } | ||
976 | |||
977 | int parse_events__new_term(struct parse_events__term **_term, int type, | ||
978 | char *config, char *str, long num) | ||
979 | { | ||
980 | struct parse_events__term *term; | ||
981 | |||
982 | term = zalloc(sizeof(*term)); | ||
983 | if (!term) | ||
984 | return -ENOMEM; | ||
985 | |||
986 | INIT_LIST_HEAD(&term->list); | ||
987 | term->type = type; | ||
988 | term->config = config; | ||
989 | |||
990 | switch (type) { | ||
991 | case PARSE_EVENTS__TERM_TYPE_CONFIG: | ||
992 | case PARSE_EVENTS__TERM_TYPE_CONFIG1: | ||
993 | case PARSE_EVENTS__TERM_TYPE_CONFIG2: | ||
994 | case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD: | ||
995 | case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE: | ||
996 | case PARSE_EVENTS__TERM_TYPE_NUM: | ||
997 | term->val.num = num; | ||
998 | break; | ||
999 | case PARSE_EVENTS__TERM_TYPE_STR: | ||
1000 | term->val.str = str; | ||
1001 | break; | ||
1002 | default: | ||
1003 | return -EINVAL; | ||
1004 | } | ||
1005 | |||
1006 | *_term = term; | ||
1007 | return 0; | ||
1008 | } | ||
1009 | |||
1010 | void parse_events__free_terms(struct list_head *terms) | ||
1011 | { | ||
1012 | struct parse_events__term *term, *h; | ||
1013 | |||
1014 | list_for_each_entry_safe(term, h, terms, list) | ||
1015 | free(term); | ||
1016 | |||
1017 | free(terms); | ||
1018 | } | ||
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index 84d37714f3bc..37a270d91d39 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h | |||
@@ -33,6 +33,34 @@ extern int parse_filter(const struct option *opt, const char *str, int unset); | |||
33 | 33 | ||
34 | #define EVENTS_HELP_MAX (128*1024) | 34 | #define EVENTS_HELP_MAX (128*1024) |
35 | 35 | ||
36 | enum { | ||
37 | PARSE_EVENTS__TERM_TYPE_CONFIG, | ||
38 | PARSE_EVENTS__TERM_TYPE_CONFIG1, | ||
39 | PARSE_EVENTS__TERM_TYPE_CONFIG2, | ||
40 | PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD, | ||
41 | PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE, | ||
42 | PARSE_EVENTS__TERM_TYPE_NUM, | ||
43 | PARSE_EVENTS__TERM_TYPE_STR, | ||
44 | |||
45 | PARSE_EVENTS__TERM_TYPE_HARDCODED_MAX = | ||
46 | PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE, | ||
47 | }; | ||
48 | |||
49 | struct parse_events__term { | ||
50 | char *config; | ||
51 | union { | ||
52 | char *str; | ||
53 | long num; | ||
54 | } val; | ||
55 | int type; | ||
56 | |||
57 | struct list_head list; | ||
58 | }; | ||
59 | |||
60 | int parse_events__is_hardcoded_term(struct parse_events__term *term); | ||
61 | int parse_events__new_term(struct parse_events__term **term, int type, | ||
62 | char *config, char *str, long num); | ||
63 | void parse_events__free_terms(struct list_head *terms); | ||
36 | int parse_events_modifier(struct list_head *list __used, char *str __used); | 64 | int parse_events_modifier(struct list_head *list __used, char *str __used); |
37 | int parse_events_add_tracepoint(struct list_head *list, int *idx, | 65 | int parse_events_add_tracepoint(struct list_head *list, int *idx, |
38 | char *sys, char *event); | 66 | char *sys, char *event); |
@@ -40,7 +68,8 @@ int parse_events_add_raw(struct perf_evlist *evlist, unsigned long config, | |||
40 | unsigned long config1, unsigned long config2, | 68 | unsigned long config1, unsigned long config2, |
41 | char *mod); | 69 | char *mod); |
42 | int parse_events_add_numeric(struct list_head *list, int *idx, | 70 | int parse_events_add_numeric(struct list_head *list, int *idx, |
43 | unsigned long type, unsigned long config); | 71 | unsigned long type, unsigned long config, |
72 | struct list_head *head_config); | ||
44 | int parse_events_add_cache(struct list_head *list, int *idx, | 73 | int parse_events_add_cache(struct list_head *list, int *idx, |
45 | char *type, char *op_result1, char *op_result2); | 74 | char *type, char *op_result1, char *op_result2); |
46 | int parse_events_add_breakpoint(struct list_head *list, int *idx, | 75 | int parse_events_add_breakpoint(struct list_head *list, int *idx, |
diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l index 44dbc359f0ae..ab9eca120feb 100644 --- a/tools/perf/util/parse-events.l +++ b/tools/perf/util/parse-events.l | |||
@@ -5,6 +5,7 @@ | |||
5 | #include <errno.h> | 5 | #include <errno.h> |
6 | #include "../perf.h" | 6 | #include "../perf.h" |
7 | #include "parse-events-bison.h" | 7 | #include "parse-events-bison.h" |
8 | #include "parse-events.h" | ||
8 | 9 | ||
9 | static int __value(char *str, int base, int token) | 10 | static int __value(char *str, int base, int token) |
10 | { | 11 | { |
@@ -41,6 +42,12 @@ static int sym(int type, int config) | |||
41 | return PE_VALUE_SYM; | 42 | return PE_VALUE_SYM; |
42 | } | 43 | } |
43 | 44 | ||
45 | static int term(int type) | ||
46 | { | ||
47 | parse_events_lval.num = type; | ||
48 | return PE_TERM; | ||
49 | } | ||
50 | |||
44 | %} | 51 | %} |
45 | 52 | ||
46 | num_dec [0-9]+ | 53 | num_dec [0-9]+ |
@@ -85,6 +92,18 @@ speculative-read|speculative-load | | |||
85 | refs|Reference|ops|access | | 92 | refs|Reference|ops|access | |
86 | misses|miss { return str(PE_NAME_CACHE_OP_RESULT); } | 93 | misses|miss { return str(PE_NAME_CACHE_OP_RESULT); } |
87 | 94 | ||
95 | /* | ||
96 | * These are event config hardcoded term names to be specified | ||
97 | * within xxx/.../ syntax. So far we dont clash with other names, | ||
98 | * so we can put them here directly. In case the we have a conflict | ||
99 | * in future, this needs to go into '//' condition block. | ||
100 | */ | ||
101 | config { return term(PARSE_EVENTS__TERM_TYPE_CONFIG); } | ||
102 | config1 { return term(PARSE_EVENTS__TERM_TYPE_CONFIG1); } | ||
103 | config2 { return term(PARSE_EVENTS__TERM_TYPE_CONFIG2); } | ||
104 | period { return term(PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); } | ||
105 | branch_type { return term(PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); } | ||
106 | |||
88 | mem: { return PE_PREFIX_MEM; } | 107 | mem: { return PE_PREFIX_MEM; } |
89 | r{num_raw_hex} { return raw(); } | 108 | r{num_raw_hex} { return raw(); } |
90 | {num_dec} { return value(10); } | 109 | {num_dec} { return value(10); } |
diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index 4b4459e67a0a..c88c08e4e79d 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y | |||
@@ -23,7 +23,7 @@ do { \ | |||
23 | 23 | ||
24 | %} | 24 | %} |
25 | 25 | ||
26 | %token PE_VALUE PE_VALUE_SYM PE_RAW | 26 | %token PE_VALUE PE_VALUE_SYM PE_RAW PE_TERM |
27 | %token PE_NAME | 27 | %token PE_NAME |
28 | %token PE_MODIFIER_EVENT PE_MODIFIER_BP | 28 | %token PE_MODIFIER_EVENT PE_MODIFIER_BP |
29 | %token PE_NAME_CACHE_TYPE PE_NAME_CACHE_OP_RESULT | 29 | %token PE_NAME_CACHE_TYPE PE_NAME_CACHE_OP_RESULT |
@@ -32,16 +32,21 @@ do { \ | |||
32 | %type <num> PE_VALUE | 32 | %type <num> PE_VALUE |
33 | %type <num> PE_VALUE_SYM | 33 | %type <num> PE_VALUE_SYM |
34 | %type <num> PE_RAW | 34 | %type <num> PE_RAW |
35 | %type <num> PE_TERM | ||
35 | %type <str> PE_NAME | 36 | %type <str> PE_NAME |
36 | %type <str> PE_NAME_CACHE_TYPE | 37 | %type <str> PE_NAME_CACHE_TYPE |
37 | %type <str> PE_NAME_CACHE_OP_RESULT | 38 | %type <str> PE_NAME_CACHE_OP_RESULT |
38 | %type <str> PE_MODIFIER_EVENT | 39 | %type <str> PE_MODIFIER_EVENT |
39 | %type <str> PE_MODIFIER_BP | 40 | %type <str> PE_MODIFIER_BP |
41 | %type <head> event_config | ||
42 | %type <term> event_term | ||
40 | 43 | ||
41 | %union | 44 | %union |
42 | { | 45 | { |
43 | char *str; | 46 | char *str; |
44 | unsigned long num; | 47 | unsigned long num; |
48 | struct list_head *head; | ||
49 | struct parse_events__term *term; | ||
45 | } | 50 | } |
46 | %% | 51 | %% |
47 | 52 | ||
@@ -56,7 +61,7 @@ event_def PE_MODIFIER_EVENT | |||
56 | | | 61 | | |
57 | event_def | 62 | event_def |
58 | 63 | ||
59 | event_def: event_legacy_symbol sep_dc | | 64 | event_def: event_legacy_symbol | |
60 | event_legacy_cache sep_dc | | 65 | event_legacy_cache sep_dc | |
61 | event_legacy_mem | | 66 | event_legacy_mem | |
62 | event_legacy_tracepoint sep_dc | | 67 | event_legacy_tracepoint sep_dc | |
@@ -64,12 +69,21 @@ event_def: event_legacy_symbol sep_dc | | |||
64 | event_legacy_raw sep_dc | 69 | event_legacy_raw sep_dc |
65 | 70 | ||
66 | event_legacy_symbol: | 71 | event_legacy_symbol: |
67 | PE_VALUE_SYM | 72 | PE_VALUE_SYM '/' event_config '/' |
68 | { | 73 | { |
69 | int type = $1 >> 16; | 74 | int type = $1 >> 16; |
70 | int config = $1 & 255; | 75 | int config = $1 & 255; |
71 | 76 | ||
72 | ABORT_ON(parse_events_add_numeric(list, idx, type, config)); | 77 | ABORT_ON(parse_events_add_numeric(list, idx, type, config, $3)); |
78 | parse_events__free_terms($3); | ||
79 | } | ||
80 | | | ||
81 | PE_VALUE_SYM sep_slash_dc | ||
82 | { | ||
83 | int type = $1 >> 16; | ||
84 | int config = $1 & 255; | ||
85 | |||
86 | ABORT_ON(parse_events_add_numeric(list, idx, type, config, NULL)); | ||
73 | } | 87 | } |
74 | 88 | ||
75 | event_legacy_cache: | 89 | event_legacy_cache: |
@@ -108,17 +122,85 @@ PE_NAME ':' PE_NAME | |||
108 | event_legacy_numeric: | 122 | event_legacy_numeric: |
109 | PE_VALUE ':' PE_VALUE | 123 | PE_VALUE ':' PE_VALUE |
110 | { | 124 | { |
111 | ABORT_ON(parse_events_add_numeric(list, idx, $1, $3)); | 125 | ABORT_ON(parse_events_add_numeric(list, idx, $1, $3, NULL)); |
112 | } | 126 | } |
113 | 127 | ||
114 | event_legacy_raw: | 128 | event_legacy_raw: |
115 | PE_RAW | 129 | PE_RAW |
116 | { | 130 | { |
117 | ABORT_ON(parse_events_add_numeric(list, idx, PERF_TYPE_RAW, $1)); | 131 | ABORT_ON(parse_events_add_numeric(list, idx, PERF_TYPE_RAW, $1, NULL)); |
132 | } | ||
133 | |||
134 | event_config: | ||
135 | event_config ',' event_term | ||
136 | { | ||
137 | struct list_head *head = $1; | ||
138 | struct parse_events__term *term = $3; | ||
139 | |||
140 | ABORT_ON(!head); | ||
141 | list_add_tail(&term->list, head); | ||
142 | $$ = $1; | ||
143 | } | ||
144 | | | ||
145 | event_term | ||
146 | { | ||
147 | struct list_head *head = malloc(sizeof(*head)); | ||
148 | struct parse_events__term *term = $1; | ||
149 | |||
150 | ABORT_ON(!head); | ||
151 | INIT_LIST_HEAD(head); | ||
152 | list_add_tail(&term->list, head); | ||
153 | $$ = head; | ||
154 | } | ||
155 | |||
156 | event_term: | ||
157 | PE_NAME '=' PE_NAME | ||
158 | { | ||
159 | struct parse_events__term *term; | ||
160 | |||
161 | ABORT_ON(parse_events__new_term(&term, PARSE_EVENTS__TERM_TYPE_STR, | ||
162 | $1, $3, 0)); | ||
163 | $$ = term; | ||
164 | } | ||
165 | | | ||
166 | PE_NAME '=' PE_VALUE | ||
167 | { | ||
168 | struct parse_events__term *term; | ||
169 | |||
170 | ABORT_ON(parse_events__new_term(&term, PARSE_EVENTS__TERM_TYPE_NUM, | ||
171 | $1, NULL, $3)); | ||
172 | $$ = term; | ||
173 | } | ||
174 | | | ||
175 | PE_NAME | ||
176 | { | ||
177 | struct parse_events__term *term; | ||
178 | |||
179 | ABORT_ON(parse_events__new_term(&term, PARSE_EVENTS__TERM_TYPE_NUM, | ||
180 | $1, NULL, 1)); | ||
181 | $$ = term; | ||
182 | } | ||
183 | | | ||
184 | PE_TERM '=' PE_VALUE | ||
185 | { | ||
186 | struct parse_events__term *term; | ||
187 | |||
188 | ABORT_ON(parse_events__new_term(&term, $1, NULL, NULL, $3)); | ||
189 | $$ = term; | ||
190 | } | ||
191 | | | ||
192 | PE_TERM | ||
193 | { | ||
194 | struct parse_events__term *term; | ||
195 | |||
196 | ABORT_ON(parse_events__new_term(&term, $1, NULL, NULL, 1)); | ||
197 | $$ = term; | ||
118 | } | 198 | } |
119 | 199 | ||
120 | sep_dc: ':' | | 200 | sep_dc: ':' | |
121 | 201 | ||
202 | sep_slash_dc: '/' | ':' | | ||
203 | |||
122 | %% | 204 | %% |
123 | 205 | ||
124 | void parse_events_error(struct list_head *list __used, int *idx __used, | 206 | void parse_events_error(struct list_head *list __used, int *idx __used, |