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>
This commit is contained in:
parent
89812fc81f
commit
8f707d843c
|
@ -677,6 +677,24 @@ static int test__checkevent_symbolic_name(struct perf_evlist *evlist)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int test__checkevent_symbolic_name_config(struct perf_evlist *evlist)
|
||||||
|
{
|
||||||
|
struct perf_evsel *evsel = list_entry(evlist->entries.next,
|
||||||
|
struct perf_evsel, node);
|
||||||
|
|
||||||
|
TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
|
||||||
|
TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
|
||||||
|
TEST_ASSERT_VAL("wrong config",
|
||||||
|
PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
|
||||||
|
TEST_ASSERT_VAL("wrong period",
|
||||||
|
100000 == evsel->attr.sample_period);
|
||||||
|
TEST_ASSERT_VAL("wrong config1",
|
||||||
|
0 == evsel->attr.config1);
|
||||||
|
TEST_ASSERT_VAL("wrong config2",
|
||||||
|
1 == evsel->attr.config2);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int test__checkevent_symbolic_alias(struct perf_evlist *evlist)
|
static int test__checkevent_symbolic_alias(struct perf_evlist *evlist)
|
||||||
{
|
{
|
||||||
struct perf_evsel *evsel = list_entry(evlist->entries.next,
|
struct perf_evsel *evsel = list_entry(evlist->entries.next,
|
||||||
|
@ -883,6 +901,10 @@ static struct test__event_st {
|
||||||
.name = "instructions",
|
.name = "instructions",
|
||||||
.check = test__checkevent_symbolic_name,
|
.check = test__checkevent_symbolic_name,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "cycles/period=100000,config2/",
|
||||||
|
.check = test__checkevent_symbolic_name_config,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.name = "faults",
|
.name = "faults",
|
||||||
.check = test__checkevent_symbolic_alias,
|
.check = test__checkevent_symbolic_alias,
|
||||||
|
|
|
@ -127,14 +127,15 @@ do { \
|
||||||
PE_VALUE = 258,
|
PE_VALUE = 258,
|
||||||
PE_VALUE_SYM = 259,
|
PE_VALUE_SYM = 259,
|
||||||
PE_RAW = 260,
|
PE_RAW = 260,
|
||||||
PE_NAME = 261,
|
PE_TERM = 261,
|
||||||
PE_MODIFIER_EVENT = 262,
|
PE_NAME = 262,
|
||||||
PE_MODIFIER_BP = 263,
|
PE_MODIFIER_EVENT = 263,
|
||||||
PE_NAME_CACHE_TYPE = 264,
|
PE_MODIFIER_BP = 264,
|
||||||
PE_NAME_CACHE_OP_RESULT = 265,
|
PE_NAME_CACHE_TYPE = 265,
|
||||||
PE_PREFIX_MEM = 266,
|
PE_NAME_CACHE_OP_RESULT = 266,
|
||||||
PE_PREFIX_RAW = 267,
|
PE_PREFIX_MEM = 267,
|
||||||
PE_ERROR = 268
|
PE_PREFIX_RAW = 268,
|
||||||
|
PE_ERROR = 269
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -145,15 +146,17 @@ typedef union YYSTYPE
|
||||||
{
|
{
|
||||||
|
|
||||||
/* Line 214 of yacc.c */
|
/* Line 214 of yacc.c */
|
||||||
#line 42 "util/parse-events.y"
|
#line 45 "util/parse-events.y"
|
||||||
|
|
||||||
char *str;
|
char *str;
|
||||||
unsigned long num;
|
unsigned long num;
|
||||||
|
struct list_head *head;
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Line 214 of yacc.c */
|
/* Line 214 of yacc.c */
|
||||||
#line 157 "util/parse-events-bison.c"
|
#line 160 "util/parse-events-bison.c"
|
||||||
} YYSTYPE;
|
} YYSTYPE;
|
||||||
# define YYSTYPE_IS_TRIVIAL 1
|
# define YYSTYPE_IS_TRIVIAL 1
|
||||||
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
||||||
|
@ -165,7 +168,7 @@ typedef union YYSTYPE
|
||||||
|
|
||||||
|
|
||||||
/* Line 264 of yacc.c */
|
/* Line 264 of yacc.c */
|
||||||
#line 169 "util/parse-events-bison.c"
|
#line 172 "util/parse-events-bison.c"
|
||||||
|
|
||||||
#ifdef short
|
#ifdef short
|
||||||
# undef short
|
# undef short
|
||||||
|
@ -378,22 +381,22 @@ union yyalloc
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* YYFINAL -- State number of the termination state. */
|
/* YYFINAL -- State number of the termination state. */
|
||||||
#define YYFINAL 20
|
#define YYFINAL 23
|
||||||
/* YYLAST -- Last index in YYTABLE. */
|
/* YYLAST -- Last index in YYTABLE. */
|
||||||
#define YYLAST 27
|
#define YYLAST 38
|
||||||
|
|
||||||
/* YYNTOKENS -- Number of terminals. */
|
/* YYNTOKENS -- Number of terminals. */
|
||||||
#define YYNTOKENS 17
|
#define YYNTOKENS 20
|
||||||
/* YYNNTS -- Number of nonterminals. */
|
/* YYNNTS -- Number of nonterminals. */
|
||||||
#define YYNNTS 11
|
#define YYNNTS 14
|
||||||
/* YYNRULES -- Number of rules. */
|
/* YYNRULES -- Number of rules. */
|
||||||
#define YYNRULES 22
|
#define YYNRULES 33
|
||||||
/* YYNRULES -- Number of states. */
|
/* YYNRULES -- Number of states. */
|
||||||
#define YYNSTATES 39
|
#define YYNSTATES 53
|
||||||
|
|
||||||
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
|
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
|
||||||
#define YYUNDEFTOK 2
|
#define YYUNDEFTOK 2
|
||||||
#define YYMAXUTOK 268
|
#define YYMAXUTOK 269
|
||||||
|
|
||||||
#define YYTRANSLATE(YYX) \
|
#define YYTRANSLATE(YYX) \
|
||||||
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
|
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
|
||||||
|
@ -405,9 +408,9 @@ static const yytype_uint8 yytranslate[] =
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 14, 15, 2, 2, 2, 2,
|
2, 2, 2, 2, 15, 17, 2, 16, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 16, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 18, 2,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 19, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
|
@ -427,7 +430,7 @@ static const yytype_uint8 yytranslate[] =
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
|
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
|
||||||
5, 6, 7, 8, 9, 10, 11, 12, 13
|
5, 6, 7, 8, 9, 10, 11, 12, 13, 14
|
||||||
};
|
};
|
||||||
|
|
||||||
#if YYDEBUG
|
#if YYDEBUG
|
||||||
|
@ -435,29 +438,34 @@ static const yytype_uint8 yytranslate[] =
|
||||||
YYRHS. */
|
YYRHS. */
|
||||||
static const yytype_uint8 yyprhs[] =
|
static const yytype_uint8 yyprhs[] =
|
||||||
{
|
{
|
||||||
0, 0, 3, 7, 9, 12, 14, 17, 20, 22,
|
0, 0, 3, 7, 9, 12, 14, 16, 19, 21,
|
||||||
25, 28, 31, 33, 39, 43, 45, 51, 55, 59,
|
24, 27, 30, 35, 38, 44, 48, 50, 56, 60,
|
||||||
63, 65, 67
|
64, 68, 70, 74, 76, 80, 84, 86, 90, 92,
|
||||||
|
94, 95, 97, 99
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
|
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
|
||||||
static const yytype_int8 yyrhs[] =
|
static const yytype_int8 yyrhs[] =
|
||||||
{
|
{
|
||||||
18, 0, -1, 18, 14, 19, -1, 19, -1, 20,
|
21, 0, -1, 21, 15, 22, -1, 22, -1, 23,
|
||||||
7, -1, 20, -1, 21, 27, -1, 22, 27, -1,
|
8, -1, 23, -1, 24, -1, 25, 32, -1, 26,
|
||||||
23, -1, 24, 27, -1, 25, 27, -1, 26, 27,
|
-1, 27, 32, -1, 28, 32, -1, 29, 32, -1,
|
||||||
-1, 4, -1, 9, 15, 10, 15, 10, -1, 9,
|
4, 16, 30, 16, -1, 4, 33, -1, 10, 17,
|
||||||
15, 10, -1, 9, -1, 11, 3, 16, 8, 27,
|
11, 17, 11, -1, 10, 17, 11, -1, 10, -1,
|
||||||
-1, 11, 3, 27, -1, 6, 16, 6, -1, 3,
|
12, 3, 18, 9, 32, -1, 12, 3, 32, -1,
|
||||||
16, 3, -1, 5, -1, 16, -1, -1
|
7, 18, 7, -1, 3, 18, 3, -1, 5, -1,
|
||||||
|
30, 15, 31, -1, 31, -1, 7, 19, 7, -1,
|
||||||
|
7, 19, 3, -1, 7, -1, 6, 19, 3, -1,
|
||||||
|
6, -1, 18, -1, -1, 16, -1, 18, -1, -1
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
|
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
|
||||||
static const yytype_uint8 yyrline[] =
|
static const yytype_uint8 yyrline[] =
|
||||||
{
|
{
|
||||||
0, 49, 49, 49, 52, 57, 59, 60, 61, 62,
|
0, 54, 54, 54, 57, 62, 64, 65, 66, 67,
|
||||||
63, 64, 67, 76, 81, 86, 92, 97, 103, 109,
|
68, 69, 72, 81, 90, 95, 100, 106, 111, 117,
|
||||||
115, 120, 120
|
123, 129, 135, 145, 157, 166, 175, 184, 192, 200,
|
||||||
|
200, 202, 202, 202
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -467,12 +475,13 @@ static const yytype_uint8 yyrline[] =
|
||||||
static const char *const yytname[] =
|
static const char *const yytname[] =
|
||||||
{
|
{
|
||||||
"$end", "error", "$undefined", "PE_VALUE", "PE_VALUE_SYM", "PE_RAW",
|
"$end", "error", "$undefined", "PE_VALUE", "PE_VALUE_SYM", "PE_RAW",
|
||||||
"PE_NAME", "PE_MODIFIER_EVENT", "PE_MODIFIER_BP", "PE_NAME_CACHE_TYPE",
|
"PE_TERM", "PE_NAME", "PE_MODIFIER_EVENT", "PE_MODIFIER_BP",
|
||||||
"PE_NAME_CACHE_OP_RESULT", "PE_PREFIX_MEM", "PE_PREFIX_RAW", "PE_ERROR",
|
"PE_NAME_CACHE_TYPE", "PE_NAME_CACHE_OP_RESULT", "PE_PREFIX_MEM",
|
||||||
"','", "'-'", "':'", "$accept", "events", "event", "event_def",
|
"PE_PREFIX_RAW", "PE_ERROR", "','", "'/'", "'-'", "':'", "'='",
|
||||||
"event_legacy_symbol", "event_legacy_cache", "event_legacy_mem",
|
"$accept", "events", "event", "event_def", "event_legacy_symbol",
|
||||||
"event_legacy_tracepoint", "event_legacy_numeric", "event_legacy_raw",
|
"event_legacy_cache", "event_legacy_mem", "event_legacy_tracepoint",
|
||||||
"sep_dc", 0
|
"event_legacy_numeric", "event_legacy_raw", "event_config", "event_term",
|
||||||
|
"sep_dc", "sep_slash_dc", 0
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -482,24 +491,26 @@ static const char *const yytname[] =
|
||||||
static const yytype_uint16 yytoknum[] =
|
static const yytype_uint16 yytoknum[] =
|
||||||
{
|
{
|
||||||
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
|
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
|
||||||
265, 266, 267, 268, 44, 45, 58
|
265, 266, 267, 268, 269, 44, 47, 45, 58, 61
|
||||||
};
|
};
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
|
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
|
||||||
static const yytype_uint8 yyr1[] =
|
static const yytype_uint8 yyr1[] =
|
||||||
{
|
{
|
||||||
0, 17, 18, 18, 19, 19, 20, 20, 20, 20,
|
0, 20, 21, 21, 22, 22, 23, 23, 23, 23,
|
||||||
20, 20, 21, 22, 22, 22, 23, 23, 24, 25,
|
23, 23, 24, 24, 25, 25, 25, 26, 26, 27,
|
||||||
26, 27, 27
|
28, 29, 30, 30, 31, 31, 31, 31, 31, 32,
|
||||||
|
32, 33, 33, 33
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
|
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
|
||||||
static const yytype_uint8 yyr2[] =
|
static const yytype_uint8 yyr2[] =
|
||||||
{
|
{
|
||||||
0, 2, 3, 1, 2, 1, 2, 2, 1, 2,
|
0, 2, 3, 1, 2, 1, 1, 2, 1, 2,
|
||||||
2, 2, 1, 5, 3, 1, 5, 3, 3, 3,
|
2, 2, 4, 2, 5, 3, 1, 5, 3, 3,
|
||||||
1, 1, 0
|
3, 1, 3, 1, 3, 3, 1, 3, 1, 1,
|
||||||
|
0, 1, 1, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
|
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
|
||||||
|
@ -507,35 +518,39 @@ static const yytype_uint8 yyr2[] =
|
||||||
means the default is an error. */
|
means the default is an error. */
|
||||||
static const yytype_uint8 yydefact[] =
|
static const yytype_uint8 yydefact[] =
|
||||||
{
|
{
|
||||||
0, 0, 12, 20, 0, 15, 0, 0, 3, 5,
|
0, 0, 33, 21, 0, 16, 0, 0, 3, 5,
|
||||||
22, 22, 8, 22, 22, 22, 0, 0, 0, 22,
|
6, 30, 8, 30, 30, 30, 0, 31, 32, 13,
|
||||||
1, 0, 4, 21, 6, 7, 9, 10, 11, 19,
|
0, 0, 30, 1, 0, 4, 29, 7, 9, 10,
|
||||||
18, 14, 21, 17, 2, 0, 22, 13, 16
|
11, 20, 28, 26, 0, 23, 19, 15, 29, 18,
|
||||||
|
2, 0, 0, 0, 12, 0, 30, 27, 25, 24,
|
||||||
|
22, 14, 17
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYDEFGOTO[NTERM-NUM]. */
|
/* YYDEFGOTO[NTERM-NUM]. */
|
||||||
static const yytype_int8 yydefgoto[] =
|
static const yytype_int8 yydefgoto[] =
|
||||||
{
|
{
|
||||||
-1, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
-1, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||||
24
|
34, 35, 27, 19
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
|
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
|
||||||
STATE-NUM. */
|
STATE-NUM. */
|
||||||
#define YYPACT_NINF -12
|
#define YYPACT_NINF -14
|
||||||
static const yytype_int8 yypact[] =
|
static const yytype_int8 yypact[] =
|
||||||
{
|
{
|
||||||
7, -10, -12, -12, -9, -6, 2, 1, -12, 10,
|
1, -11, -1, -14, -6, 8, 20, 3, -14, 16,
|
||||||
-2, -2, -12, -2, -2, -2, 16, 14, 11, 6,
|
-14, -2, -14, -2, -2, -2, 23, 13, -14, -14,
|
||||||
-12, 7, -12, -12, -12, -12, -12, -12, -12, -12,
|
21, 18, 9, -14, 1, -14, -14, -14, -14, -14,
|
||||||
-12, 8, 18, -12, -12, 17, -2, -12, -12
|
-14, -14, 11, 12, 6, -14, -14, 15, 25, -14,
|
||||||
|
-14, 32, 7, 13, -14, 26, -2, -14, -14, -14,
|
||||||
|
-14, -14, -14
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYPGOTO[NTERM-NUM]. */
|
/* YYPGOTO[NTERM-NUM]. */
|
||||||
static const yytype_int8 yypgoto[] =
|
static const yytype_int8 yypgoto[] =
|
||||||
{
|
{
|
||||||
-12, -12, 3, -12, -12, -12, -12, -12, -12, -12,
|
-14, -14, 14, -14, -14, -14, -14, -14, -14, -14,
|
||||||
-11
|
-14, -7, -13, -14
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
|
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
|
||||||
|
@ -545,26 +560,30 @@ static const yytype_int8 yypgoto[] =
|
||||||
#define YYTABLE_NINF -1
|
#define YYTABLE_NINF -1
|
||||||
static const yytype_uint8 yytable[] =
|
static const yytype_uint8 yytable[] =
|
||||||
{
|
{
|
||||||
25, 20, 26, 27, 28, 19, 16, 17, 33, 18,
|
28, 29, 30, 23, 1, 2, 3, 16, 4, 39,
|
||||||
1, 2, 3, 4, 23, 21, 5, 22, 6, 29,
|
48, 5, 20, 6, 49, 17, 26, 18, 24, 32,
|
||||||
30, 31, 32, 35, 34, 38, 36, 37
|
33, 43, 44, 22, 25, 21, 31, 38, 36, 37,
|
||||||
|
41, 42, 45, 52, 46, 47, 50, 51, 40
|
||||||
};
|
};
|
||||||
|
|
||||||
static const yytype_uint8 yycheck[] =
|
static const yytype_uint8 yycheck[] =
|
||||||
{
|
{
|
||||||
11, 0, 13, 14, 15, 3, 16, 16, 19, 15,
|
13, 14, 15, 0, 3, 4, 5, 18, 7, 22,
|
||||||
3, 4, 5, 6, 16, 14, 9, 7, 11, 3,
|
3, 10, 18, 12, 7, 16, 18, 18, 15, 6,
|
||||||
6, 10, 16, 15, 21, 36, 8, 10
|
7, 15, 16, 3, 8, 17, 3, 18, 7, 11,
|
||||||
|
19, 19, 17, 46, 9, 3, 43, 11, 24
|
||||||
};
|
};
|
||||||
|
|
||||||
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
|
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
|
||||||
symbol of state STATE-NUM. */
|
symbol of state STATE-NUM. */
|
||||||
static const yytype_uint8 yystos[] =
|
static const yytype_uint8 yystos[] =
|
||||||
{
|
{
|
||||||
0, 3, 4, 5, 6, 9, 11, 18, 19, 20,
|
0, 3, 4, 5, 7, 10, 12, 21, 22, 23,
|
||||||
21, 22, 23, 24, 25, 26, 16, 16, 15, 3,
|
24, 25, 26, 27, 28, 29, 18, 16, 18, 33,
|
||||||
0, 14, 7, 16, 27, 27, 27, 27, 27, 3,
|
18, 17, 3, 0, 15, 8, 18, 32, 32, 32,
|
||||||
6, 10, 16, 27, 19, 15, 8, 10, 27
|
32, 3, 6, 7, 30, 31, 7, 11, 18, 32,
|
||||||
|
22, 19, 19, 15, 16, 17, 9, 3, 3, 7,
|
||||||
|
31, 11, 32
|
||||||
};
|
};
|
||||||
|
|
||||||
#define yyerrok (yyerrstatus = 0)
|
#define yyerrok (yyerrstatus = 0)
|
||||||
|
@ -1400,7 +1419,7 @@ yyreduce:
|
||||||
case 4:
|
case 4:
|
||||||
|
|
||||||
/* Line 1464 of yacc.c */
|
/* Line 1464 of yacc.c */
|
||||||
#line 53 "util/parse-events.y"
|
#line 58 "util/parse-events.y"
|
||||||
{
|
{
|
||||||
ABORT_ON(parse_events_modifier(list, (yyvsp[(2) - (2)].str)));
|
ABORT_ON(parse_events_modifier(list, (yyvsp[(2) - (2)].str)));
|
||||||
;}
|
;}
|
||||||
|
@ -1409,91 +1428,196 @@ yyreduce:
|
||||||
case 12:
|
case 12:
|
||||||
|
|
||||||
/* Line 1464 of yacc.c */
|
/* Line 1464 of yacc.c */
|
||||||
#line 68 "util/parse-events.y"
|
#line 73 "util/parse-events.y"
|
||||||
{
|
{
|
||||||
int type = (yyvsp[(1) - (1)].num) >> 16;
|
int type = (yyvsp[(1) - (4)].num) >> 16;
|
||||||
int config = (yyvsp[(1) - (1)].num) & 255;
|
int config = (yyvsp[(1) - (4)].num) & 255;
|
||||||
|
|
||||||
ABORT_ON(parse_events_add_numeric(list, idx, type, config));
|
ABORT_ON(parse_events_add_numeric(list, idx, type, config, (yyvsp[(3) - (4)].head)));
|
||||||
|
parse_events__free_terms((yyvsp[(3) - (4)].head));
|
||||||
;}
|
;}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 13:
|
case 13:
|
||||||
|
|
||||||
/* Line 1464 of yacc.c */
|
/* Line 1464 of yacc.c */
|
||||||
#line 77 "util/parse-events.y"
|
#line 82 "util/parse-events.y"
|
||||||
{
|
{
|
||||||
ABORT_ON(parse_events_add_cache(list, idx, (yyvsp[(1) - (5)].str), (yyvsp[(3) - (5)].str), (yyvsp[(5) - (5)].str)));
|
int type = (yyvsp[(1) - (2)].num) >> 16;
|
||||||
|
int config = (yyvsp[(1) - (2)].num) & 255;
|
||||||
|
|
||||||
|
ABORT_ON(parse_events_add_numeric(list, idx, type, config, NULL));
|
||||||
;}
|
;}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 14:
|
case 14:
|
||||||
|
|
||||||
/* Line 1464 of yacc.c */
|
/* Line 1464 of yacc.c */
|
||||||
#line 82 "util/parse-events.y"
|
#line 91 "util/parse-events.y"
|
||||||
{
|
{
|
||||||
ABORT_ON(parse_events_add_cache(list, idx, (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str), NULL));
|
ABORT_ON(parse_events_add_cache(list, idx, (yyvsp[(1) - (5)].str), (yyvsp[(3) - (5)].str), (yyvsp[(5) - (5)].str)));
|
||||||
;}
|
;}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 15:
|
case 15:
|
||||||
|
|
||||||
/* Line 1464 of yacc.c */
|
/* Line 1464 of yacc.c */
|
||||||
#line 87 "util/parse-events.y"
|
#line 96 "util/parse-events.y"
|
||||||
{
|
{
|
||||||
ABORT_ON(parse_events_add_cache(list, idx, (yyvsp[(1) - (1)].str), NULL, NULL));
|
ABORT_ON(parse_events_add_cache(list, idx, (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str), NULL));
|
||||||
;}
|
;}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 16:
|
case 16:
|
||||||
|
|
||||||
/* Line 1464 of yacc.c */
|
/* Line 1464 of yacc.c */
|
||||||
#line 93 "util/parse-events.y"
|
#line 101 "util/parse-events.y"
|
||||||
{
|
{
|
||||||
ABORT_ON(parse_events_add_breakpoint(list, idx, (void *) (yyvsp[(2) - (5)].num), (yyvsp[(4) - (5)].str)));
|
ABORT_ON(parse_events_add_cache(list, idx, (yyvsp[(1) - (1)].str), NULL, NULL));
|
||||||
;}
|
;}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 17:
|
case 17:
|
||||||
|
|
||||||
/* Line 1464 of yacc.c */
|
/* Line 1464 of yacc.c */
|
||||||
#line 98 "util/parse-events.y"
|
#line 107 "util/parse-events.y"
|
||||||
{
|
{
|
||||||
ABORT_ON(parse_events_add_breakpoint(list, idx, (void *) (yyvsp[(2) - (3)].num), NULL));
|
ABORT_ON(parse_events_add_breakpoint(list, idx, (void *) (yyvsp[(2) - (5)].num), (yyvsp[(4) - (5)].str)));
|
||||||
;}
|
;}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 18:
|
case 18:
|
||||||
|
|
||||||
/* Line 1464 of yacc.c */
|
/* Line 1464 of yacc.c */
|
||||||
#line 104 "util/parse-events.y"
|
#line 112 "util/parse-events.y"
|
||||||
{
|
{
|
||||||
ABORT_ON(parse_events_add_tracepoint(list, idx, (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)));
|
ABORT_ON(parse_events_add_breakpoint(list, idx, (void *) (yyvsp[(2) - (3)].num), NULL));
|
||||||
;}
|
;}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 19:
|
case 19:
|
||||||
|
|
||||||
/* Line 1464 of yacc.c */
|
/* Line 1464 of yacc.c */
|
||||||
#line 110 "util/parse-events.y"
|
#line 118 "util/parse-events.y"
|
||||||
{
|
{
|
||||||
ABORT_ON(parse_events_add_numeric(list, idx, (yyvsp[(1) - (3)].num), (yyvsp[(3) - (3)].num)));
|
ABORT_ON(parse_events_add_tracepoint(list, idx, (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)));
|
||||||
;}
|
;}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 20:
|
case 20:
|
||||||
|
|
||||||
/* Line 1464 of yacc.c */
|
/* Line 1464 of yacc.c */
|
||||||
#line 116 "util/parse-events.y"
|
#line 124 "util/parse-events.y"
|
||||||
{
|
{
|
||||||
ABORT_ON(parse_events_add_numeric(list, idx, PERF_TYPE_RAW, (yyvsp[(1) - (1)].num)));
|
ABORT_ON(parse_events_add_numeric(list, idx, (yyvsp[(1) - (3)].num), (yyvsp[(3) - (3)].num), NULL));
|
||||||
|
;}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 21:
|
||||||
|
|
||||||
|
/* Line 1464 of yacc.c */
|
||||||
|
#line 130 "util/parse-events.y"
|
||||||
|
{
|
||||||
|
ABORT_ON(parse_events_add_numeric(list, idx, PERF_TYPE_RAW, (yyvsp[(1) - (1)].num), NULL));
|
||||||
|
;}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 22:
|
||||||
|
|
||||||
|
/* Line 1464 of yacc.c */
|
||||||
|
#line 136 "util/parse-events.y"
|
||||||
|
{
|
||||||
|
struct list_head *head = (yyvsp[(1) - (3)].head);
|
||||||
|
struct parse_events__term *term = (yyvsp[(3) - (3)].term);
|
||||||
|
|
||||||
|
ABORT_ON(!head);
|
||||||
|
list_add_tail(&term->list, head);
|
||||||
|
(yyval.head) = (yyvsp[(1) - (3)].head);
|
||||||
|
;}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 23:
|
||||||
|
|
||||||
|
/* Line 1464 of yacc.c */
|
||||||
|
#line 146 "util/parse-events.y"
|
||||||
|
{
|
||||||
|
struct list_head *head = malloc(sizeof(*head));
|
||||||
|
struct parse_events__term *term = (yyvsp[(1) - (1)].term);
|
||||||
|
|
||||||
|
ABORT_ON(!head);
|
||||||
|
INIT_LIST_HEAD(head);
|
||||||
|
list_add_tail(&term->list, head);
|
||||||
|
(yyval.head) = head;
|
||||||
|
;}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 24:
|
||||||
|
|
||||||
|
/* Line 1464 of yacc.c */
|
||||||
|
#line 158 "util/parse-events.y"
|
||||||
|
{
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
ABORT_ON(parse_events__new_term(&term, PARSE_EVENTS__TERM_TYPE_STR,
|
||||||
|
(yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str), 0));
|
||||||
|
(yyval.term) = term;
|
||||||
|
;}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 25:
|
||||||
|
|
||||||
|
/* Line 1464 of yacc.c */
|
||||||
|
#line 167 "util/parse-events.y"
|
||||||
|
{
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
ABORT_ON(parse_events__new_term(&term, PARSE_EVENTS__TERM_TYPE_NUM,
|
||||||
|
(yyvsp[(1) - (3)].str), NULL, (yyvsp[(3) - (3)].num)));
|
||||||
|
(yyval.term) = term;
|
||||||
|
;}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 26:
|
||||||
|
|
||||||
|
/* Line 1464 of yacc.c */
|
||||||
|
#line 176 "util/parse-events.y"
|
||||||
|
{
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
ABORT_ON(parse_events__new_term(&term, PARSE_EVENTS__TERM_TYPE_NUM,
|
||||||
|
(yyvsp[(1) - (1)].str), NULL, 1));
|
||||||
|
(yyval.term) = term;
|
||||||
|
;}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 27:
|
||||||
|
|
||||||
|
/* Line 1464 of yacc.c */
|
||||||
|
#line 185 "util/parse-events.y"
|
||||||
|
{
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
ABORT_ON(parse_events__new_term(&term, (yyvsp[(1) - (3)].num), NULL, NULL, (yyvsp[(3) - (3)].num)));
|
||||||
|
(yyval.term) = term;
|
||||||
|
;}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 28:
|
||||||
|
|
||||||
|
/* Line 1464 of yacc.c */
|
||||||
|
#line 193 "util/parse-events.y"
|
||||||
|
{
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
ABORT_ON(parse_events__new_term(&term, (yyvsp[(1) - (1)].num), NULL, NULL, 1));
|
||||||
|
(yyval.term) = term;
|
||||||
;}
|
;}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Line 1464 of yacc.c */
|
/* Line 1464 of yacc.c */
|
||||||
#line 1497 "util/parse-events-bison.c"
|
#line 1621 "util/parse-events-bison.c"
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
|
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
|
||||||
|
@ -1705,7 +1829,7 @@ yyreturn:
|
||||||
|
|
||||||
|
|
||||||
/* Line 1684 of yacc.c */
|
/* Line 1684 of yacc.c */
|
||||||
#line 122 "util/parse-events.y"
|
#line 204 "util/parse-events.y"
|
||||||
|
|
||||||
|
|
||||||
void parse_events_error(struct list_head *list __used, int *idx __used,
|
void parse_events_error(struct list_head *list __used, int *idx __used,
|
||||||
|
|
|
@ -41,14 +41,15 @@
|
||||||
PE_VALUE = 258,
|
PE_VALUE = 258,
|
||||||
PE_VALUE_SYM = 259,
|
PE_VALUE_SYM = 259,
|
||||||
PE_RAW = 260,
|
PE_RAW = 260,
|
||||||
PE_NAME = 261,
|
PE_TERM = 261,
|
||||||
PE_MODIFIER_EVENT = 262,
|
PE_NAME = 262,
|
||||||
PE_MODIFIER_BP = 263,
|
PE_MODIFIER_EVENT = 263,
|
||||||
PE_NAME_CACHE_TYPE = 264,
|
PE_MODIFIER_BP = 264,
|
||||||
PE_NAME_CACHE_OP_RESULT = 265,
|
PE_NAME_CACHE_TYPE = 265,
|
||||||
PE_PREFIX_MEM = 266,
|
PE_NAME_CACHE_OP_RESULT = 266,
|
||||||
PE_PREFIX_RAW = 267,
|
PE_PREFIX_MEM = 267,
|
||||||
PE_ERROR = 268
|
PE_PREFIX_RAW = 268,
|
||||||
|
PE_ERROR = 269
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -59,15 +60,17 @@ typedef union YYSTYPE
|
||||||
{
|
{
|
||||||
|
|
||||||
/* Line 1685 of yacc.c */
|
/* Line 1685 of yacc.c */
|
||||||
#line 42 "util/parse-events.y"
|
#line 45 "util/parse-events.y"
|
||||||
|
|
||||||
char *str;
|
char *str;
|
||||||
unsigned long num;
|
unsigned long num;
|
||||||
|
struct list_head *head;
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Line 1685 of yacc.c */
|
/* Line 1685 of yacc.c */
|
||||||
#line 71 "util/parse-events-bison.h"
|
#line 74 "util/parse-events-bison.h"
|
||||||
} YYSTYPE;
|
} YYSTYPE;
|
||||||
# define YYSTYPE_IS_TRIVIAL 1
|
# define YYSTYPE_IS_TRIVIAL 1
|
||||||
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
||||||
|
|
|
@ -378,8 +378,8 @@ static void yy_fatal_error (yyconst char msg[] );
|
||||||
*yy_cp = '\0'; \
|
*yy_cp = '\0'; \
|
||||||
(yy_c_buf_p) = yy_cp;
|
(yy_c_buf_p) = yy_cp;
|
||||||
|
|
||||||
#define YY_NUM_RULES 44
|
#define YY_NUM_RULES 49
|
||||||
#define YY_END_OF_BUFFER 45
|
#define YY_END_OF_BUFFER 50
|
||||||
/* This struct is not used in this scanner,
|
/* This struct is not used in this scanner,
|
||||||
but its presence is necessary. */
|
but its presence is necessary. */
|
||||||
struct yy_trans_info
|
struct yy_trans_info
|
||||||
|
@ -387,55 +387,56 @@ struct yy_trans_info
|
||||||
flex_int32_t yy_verify;
|
flex_int32_t yy_verify;
|
||||||
flex_int32_t yy_nxt;
|
flex_int32_t yy_nxt;
|
||||||
};
|
};
|
||||||
static yyconst flex_int16_t yy_accept[425] =
|
static yyconst flex_int16_t yy_accept[440] =
|
||||||
{ 0,
|
{ 0,
|
||||||
0, 0, 45, 44, 38, 41, 40, 39, 34, 34,
|
0, 0, 50, 49, 43, 46, 45, 44, 39, 39,
|
||||||
42, 43, 38, 38, 38, 38, 38, 38, 38, 38,
|
47, 48, 43, 43, 43, 43, 43, 43, 43, 43,
|
||||||
38, 38, 36, 38, 38, 38, 38, 38, 36, 37,
|
43, 43, 41, 43, 43, 43, 43, 43, 41, 42,
|
||||||
38, 38, 37, 37, 38, 34, 0, 38, 38, 38,
|
43, 43, 42, 42, 43, 39, 0, 43, 43, 43,
|
||||||
21, 38, 38, 38, 38, 38, 38, 38, 38, 38,
|
21, 43, 43, 43, 43, 43, 43, 43, 43, 43,
|
||||||
38, 38, 15, 38, 0, 38, 38, 38, 36, 0,
|
43, 43, 15, 43, 0, 43, 43, 43, 41, 0,
|
||||||
38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
|
43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
|
||||||
38, 38, 33, 33, 38, 38, 38, 38, 35, 38,
|
43, 43, 43, 38, 38, 43, 43, 43, 43, 40,
|
||||||
38, 0, 38, 38, 38, 24, 38, 38, 38, 38,
|
43, 43, 0, 43, 43, 43, 24, 43, 43, 43,
|
||||||
38, 38, 0, 38, 38, 38, 36, 0, 38, 38,
|
43, 43, 43, 0, 43, 43, 43, 41, 0, 43,
|
||||||
|
|
||||||
38, 0, 19, 20, 38, 38, 38, 38, 38, 38,
|
43, 43, 0, 19, 20, 43, 43, 43, 43, 43,
|
||||||
38, 30, 38, 38, 33, 33, 38, 38, 38, 38,
|
43, 43, 30, 43, 43, 43, 38, 38, 43, 43,
|
||||||
38, 38, 38, 0, 0, 38, 38, 38, 38, 0,
|
43, 43, 43, 43, 43, 0, 0, 43, 43, 43,
|
||||||
38, 38, 0, 38, 0, 22, 38, 38, 36, 0,
|
43, 0, 43, 43, 43, 0, 43, 0, 22, 43,
|
||||||
23, 38, 38, 19, 20, 26, 38, 32, 38, 38,
|
43, 41, 0, 23, 43, 43, 19, 20, 26, 43,
|
||||||
31, 25, 38, 38, 26, 38, 38, 38, 38, 38,
|
37, 43, 43, 31, 25, 43, 43, 43, 26, 43,
|
||||||
0, 38, 0, 0, 0, 0, 38, 38, 38, 38,
|
43, 43, 43, 43, 0, 43, 0, 0, 0, 0,
|
||||||
0, 38, 38, 0, 0, 38, 22, 38, 38, 36,
|
43, 43, 43, 43, 0, 43, 43, 43, 0, 0,
|
||||||
23, 0, 38, 26, 38, 38, 38, 38, 0, 38,
|
43, 22, 43, 43, 41, 23, 0, 43, 26, 43,
|
||||||
38, 38, 27, 0, 27, 0, 38, 0, 0, 0,
|
43, 43, 43, 0, 43, 43, 43, 43, 27, 0,
|
||||||
|
|
||||||
0, 38, 38, 24, 0, 0, 38, 0, 0, 0,
|
27, 0, 43, 0, 0, 0, 0, 43, 43, 24,
|
||||||
1, 38, 12, 0, 38, 0, 38, 0, 31, 0,
|
0, 0, 32, 43, 0, 0, 0, 1, 43, 12,
|
||||||
38, 38, 38, 0, 0, 38, 0, 0, 0, 38,
|
0, 43, 0, 43, 0, 31, 0, 35, 43, 43,
|
||||||
38, 0, 38, 0, 0, 0, 38, 0, 0, 0,
|
43, 0, 0, 43, 0, 0, 0, 43, 43, 0,
|
||||||
38, 0, 38, 0, 38, 0, 0, 38, 38, 38,
|
43, 43, 0, 0, 0, 33, 34, 43, 0, 0,
|
||||||
0, 38, 0, 0, 0, 38, 38, 0, 0, 7,
|
0, 43, 0, 43, 0, 43, 0, 0, 43, 43,
|
||||||
0, 0, 0, 0, 0, 0, 0, 38, 0, 38,
|
43, 0, 43, 0, 0, 0, 43, 43, 0, 0,
|
||||||
0, 38, 0, 0, 28, 38, 0, 0, 38, 0,
|
43, 7, 0, 0, 0, 0, 0, 0, 0, 43,
|
||||||
38, 0, 0, 0, 0, 0, 0, 10, 0, 0,
|
0, 43, 0, 43, 0, 0, 28, 43, 0, 0,
|
||||||
38, 0, 38, 0, 38, 0, 0, 38, 38, 0,
|
43, 0, 43, 0, 0, 43, 0, 0, 0, 0,
|
||||||
|
|
||||||
0, 38, 0, 0, 0, 0, 9, 0, 0, 0,
|
10, 0, 0, 43, 0, 43, 0, 43, 0, 0,
|
||||||
1, 0, 0, 0, 38, 0, 16, 0, 0, 28,
|
43, 43, 0, 0, 43, 0, 0, 0, 0, 43,
|
||||||
38, 0, 11, 38, 0, 0, 0, 0, 0, 0,
|
9, 0, 0, 0, 1, 0, 0, 0, 43, 0,
|
||||||
0, 0, 0, 0, 38, 0, 0, 12, 38, 0,
|
16, 0, 0, 28, 43, 0, 11, 43, 0, 0,
|
||||||
0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
|
0, 0, 36, 0, 0, 0, 0, 0, 0, 43,
|
||||||
0, 4, 14, 13, 0, 0, 0, 0, 0, 0,
|
0, 0, 12, 43, 0, 0, 0, 0, 0, 0,
|
||||||
8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
6, 0, 0, 0, 0, 0, 4, 14, 13, 0,
|
||||||
0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 8, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 17, 0, 5, 15, 18, 0, 0, 29,
|
16, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 17, 0, 5,
|
||||||
0, 0, 7, 3, 0, 0, 0, 2, 0, 0,
|
15, 18, 0, 0, 29, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0
|
0, 0, 0, 0, 0, 0, 0, 7, 3, 0,
|
||||||
|
0, 0, 2, 0, 0, 0, 0, 0, 0
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yyconst flex_int32_t yy_ec[256] =
|
static yyconst flex_int32_t yy_ec[256] =
|
||||||
|
@ -449,11 +450,11 @@ static yyconst flex_int32_t yy_ec[256] =
|
||||||
11, 1, 2, 1, 12, 13, 14, 15, 12, 12,
|
11, 1, 2, 1, 12, 13, 14, 15, 12, 12,
|
||||||
2, 2, 16, 2, 2, 17, 2, 2, 2, 2,
|
2, 2, 16, 2, 2, 17, 2, 2, 2, 2,
|
||||||
2, 18, 2, 19, 2, 2, 2, 2, 2, 2,
|
2, 18, 2, 19, 2, 2, 2, 2, 2, 2,
|
||||||
1, 1, 1, 1, 2, 1, 20, 21, 22, 23,
|
1, 1, 1, 1, 20, 1, 21, 22, 23, 24,
|
||||||
|
|
||||||
24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
|
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
|
||||||
34, 35, 2, 36, 37, 38, 39, 40, 41, 42,
|
35, 36, 2, 37, 38, 39, 40, 41, 42, 43,
|
||||||
43, 2, 1, 1, 1, 1, 1, 1, 1, 1,
|
44, 2, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
|
@ -470,241 +471,249 @@ static yyconst flex_int32_t yy_ec[256] =
|
||||||
1, 1, 1, 1, 1
|
1, 1, 1, 1, 1
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yyconst flex_int32_t yy_meta[44] =
|
static yyconst flex_int32_t yy_meta[45] =
|
||||||
{ 0,
|
{ 0,
|
||||||
1, 2, 1, 1, 1, 3, 3, 3, 3, 1,
|
1, 2, 1, 1, 1, 3, 3, 3, 3, 1,
|
||||||
1, 3, 3, 3, 3, 2, 2, 2, 2, 3,
|
1, 3, 3, 3, 3, 2, 2, 2, 2, 2,
|
||||||
3, 3, 3, 3, 3, 2, 2, 2, 2, 2,
|
3, 3, 3, 3, 3, 3, 2, 2, 2, 2,
|
||||||
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
||||||
2, 2, 2
|
2, 2, 2, 2
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yyconst flex_int16_t yy_base[427] =
|
static yyconst flex_int16_t yy_base[442] =
|
||||||
{ 0,
|
{ 0,
|
||||||
0, 0, 494, 495, 0, 495, 495, 495, 38, 42,
|
0, 0, 510, 511, 0, 511, 511, 511, 39, 43,
|
||||||
495, 495, 473, 459, 45, 467, 32, 20, 40, 53,
|
511, 511, 488, 474, 46, 482, 32, 20, 37, 57,
|
||||||
458, 469, 34, 62, 58, 58, 454, 452, 64, 98,
|
473, 484, 34, 64, 59, 64, 469, 467, 78, 113,
|
||||||
32, 466, 449, 0, 0, 81, 0, 446, 446, 478,
|
41, 481, 464, 0, 0, 104, 0, 461, 461, 494,
|
||||||
0, 467, 455, 457, 450, 54, 457, 455, 438, 452,
|
0, 483, 470, 472, 465, 44, 472, 470, 453, 467,
|
||||||
440, 433, 0, 449, 432, 452, 429, 428, 97, 428,
|
455, 448, 0, 464, 447, 468, 444, 443, 64, 443,
|
||||||
448, 433, 426, 105, 442, 432, 428, 104, 436, 421,
|
464, 448, 441, 67, 457, 447, 443, 52, 451, 436,
|
||||||
431, 432, 431, 77, 430, 95, 416, 424, 0, 431,
|
446, 435, 446, 445, 76, 444, 95, 430, 438, 0,
|
||||||
412, 103, 425, 424, 421, 0, 413, 441, 417, 405,
|
445, 426, 100, 439, 438, 435, 0, 427, 456, 431,
|
||||||
438, 410, 409, 426, 407, 406, 108, 405, 422, 410,
|
105, 454, 425, 424, 442, 422, 421, 112, 420, 438,
|
||||||
|
|
||||||
395, 111, 0, 0, 409, 397, 420, 393, 394, 390,
|
425, 410, 117, 0, 0, 424, 412, 436, 408, 409,
|
||||||
402, 0, 401, 399, 93, 116, 401, 391, 385, 390,
|
405, 417, 0, 416, 411, 413, 83, 107, 415, 405,
|
||||||
381, 414, 381, 76, 46, 380, 378, 381, 391, 390,
|
399, 404, 395, 429, 395, 126, 119, 394, 392, 395,
|
||||||
387, 386, 120, 385, 387, 0, 387, 368, 119, 384,
|
405, 404, 401, 396, 399, 100, 398, 400, 0, 400,
|
||||||
0, 400, 367, 495, 495, 365, 365, 495, 380, 363,
|
381, 123, 397, 0, 414, 380, 511, 511, 378, 378,
|
||||||
374, 0, 393, 372, 371, 355, 362, 368, 387, 366,
|
511, 393, 376, 387, 0, 407, 375, 384, 383, 367,
|
||||||
370, 349, 349, 366, 365, 347, 359, 345, 349, 353,
|
374, 380, 400, 378, 383, 361, 361, 378, 377, 359,
|
||||||
336, 374, 335, 113, 348, 338, 495, 336, 336, 0,
|
371, 357, 361, 365, 348, 387, 363, 346, 73, 359,
|
||||||
495, 350, 332, 0, 366, 331, 364, 330, 341, 327,
|
349, 511, 347, 347, 0, 511, 361, 343, 0, 378,
|
||||||
333, 339, 325, 339, 0, 343, 337, 338, 335, 334,
|
342, 376, 341, 352, 353, 337, 343, 349, 335, 349,
|
||||||
|
|
||||||
317, 321, 329, 121, 330, 119, 313, 316, 327, 322,
|
0, 354, 347, 348, 345, 344, 327, 331, 339, 146,
|
||||||
0, 319, 0, 303, 323, 319, 315, 317, 0, 321,
|
340, 123, 150, 323, 326, 337, 332, 0, 329, 0,
|
||||||
318, 319, 315, 306, 323, 297, 307, 306, 296, 309,
|
313, 333, 329, 325, 327, 0, 331, 0, 328, 329,
|
||||||
297, 129, 292, 297, 299, 302, 321, 302, 292, 286,
|
325, 316, 334, 307, 317, 316, 306, 319, 307, 132,
|
||||||
287, 298, 281, 298, 283, 296, 276, 287, 275, 308,
|
301, 301, 306, 308, 311, 0, 0, 331, 311, 301,
|
||||||
277, 282, 285, 284, 268, 282, 267, 271, 275, 0,
|
295, 296, 307, 290, 307, 292, 305, 285, 296, 284,
|
||||||
278, 264, 275, 262, 268, 273, 276, 262, 263, 265,
|
318, 286, 291, 294, 293, 277, 291, 276, 280, 284,
|
||||||
253, 258, 251, 258, 264, 259, 264, 263, 250, 261,
|
268, 0, 286, 272, 283, 270, 276, 281, 284, 270,
|
||||||
278, 244, 243, 242, 241, 253, 235, 495, 238, 236,
|
271, 273, 261, 266, 259, 266, 272, 267, 272, 271,
|
||||||
269, 248, 237, 239, 232, 237, 229, 229, 225, 221,
|
258, 269, 287, 252, 251, 252, 249, 248, 260, 242,
|
||||||
|
|
||||||
233, 229, 223, 235, 221, 221, 495, 233, 220, 227,
|
511, 245, 243, 277, 255, 244, 246, 239, 244, 236,
|
||||||
495, 226, 228, 215, 218, 212, 0, 211, 211, 0,
|
236, 232, 228, 240, 236, 230, 242, 228, 228, 240,
|
||||||
223, 224, 495, 241, 216, 223, 206, 217, 203, 215,
|
511, 239, 226, 233, 511, 232, 234, 221, 224, 218,
|
||||||
200, 203, 216, 231, 197, 196, 195, 495, 227, 199,
|
0, 217, 217, 0, 229, 230, 511, 248, 222, 229,
|
||||||
210, 194, 188, 187, 188, 495, 191, 201, 189, 182,
|
212, 223, 0, 209, 221, 206, 209, 222, 238, 203,
|
||||||
138, 0, 495, 495, 129, 196, 202, 185, 186, 194,
|
202, 201, 511, 234, 205, 217, 200, 194, 193, 194,
|
||||||
495, 193, 187, 176, 181, 191, 174, 175, 184, 170,
|
511, 197, 207, 195, 188, 142, 0, 511, 511, 130,
|
||||||
193, 167, 166, 179, 178, 495, 163, 178, 165, 178,
|
202, 209, 191, 192, 200, 511, 199, 193, 182, 187,
|
||||||
177, 192, 158, 166, 156, 155, 154, 160, 156, 165,
|
197, 180, 181, 190, 176, 200, 173, 172, 185, 184,
|
||||||
164, 141, 495, 152, 495, 495, 495, 161, 146, 495,
|
511, 169, 184, 171, 184, 183, 199, 164, 172, 162,
|
||||||
|
|
||||||
163, 146, 148, 147, 155, 156, 143, 139, 152, 141,
|
161, 160, 166, 162, 171, 170, 147, 511, 158, 511,
|
||||||
143, 139, 495, 495, 148, 146, 131, 495, 131, 126,
|
511, 511, 167, 152, 511, 169, 152, 154, 153, 161,
|
||||||
125, 81, 85, 495, 165, 68
|
162, 149, 145, 158, 147, 149, 145, 511, 511, 154,
|
||||||
|
152, 137, 511, 138, 145, 131, 53, 54, 511, 172,
|
||||||
|
66
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yyconst flex_int16_t yy_def[427] =
|
static yyconst flex_int16_t yy_def[442] =
|
||||||
{ 0,
|
{ 0,
|
||||||
424, 1, 424, 424, 425, 424, 424, 424, 424, 424,
|
439, 1, 439, 439, 440, 439, 439, 439, 439, 439,
|
||||||
424, 424, 425, 425, 425, 425, 425, 425, 425, 425,
|
439, 439, 440, 440, 440, 440, 440, 440, 440, 440,
|
||||||
425, 425, 425, 425, 425, 425, 425, 425, 425, 425,
|
440, 440, 440, 440, 440, 440, 440, 440, 440, 440,
|
||||||
425, 425, 425, 425, 425, 424, 426, 425, 425, 425,
|
440, 440, 440, 440, 440, 439, 441, 440, 440, 440,
|
||||||
425, 425, 425, 425, 425, 425, 425, 425, 425, 425,
|
440, 440, 440, 440, 440, 440, 440, 440, 440, 440,
|
||||||
425, 425, 425, 425, 424, 425, 425, 425, 425, 424,
|
440, 440, 440, 440, 439, 440, 440, 440, 440, 439,
|
||||||
425, 425, 425, 425, 425, 425, 425, 425, 425, 425,
|
440, 440, 440, 440, 440, 440, 440, 440, 440, 440,
|
||||||
425, 425, 30, 30, 425, 425, 425, 425, 426, 425,
|
440, 440, 440, 30, 30, 440, 440, 440, 440, 441,
|
||||||
425, 424, 425, 425, 425, 425, 425, 425, 425, 425,
|
440, 440, 439, 440, 440, 440, 440, 440, 440, 440,
|
||||||
425, 425, 424, 425, 425, 425, 425, 424, 425, 425,
|
440, 440, 440, 439, 440, 440, 440, 440, 439, 440,
|
||||||
|
|
||||||
425, 424, 425, 425, 425, 425, 425, 425, 425, 425,
|
440, 440, 439, 440, 440, 440, 440, 440, 440, 440,
|
||||||
425, 425, 425, 425, 30, 30, 425, 425, 425, 425,
|
440, 440, 440, 440, 440, 440, 30, 30, 440, 440,
|
||||||
425, 425, 425, 424, 424, 425, 425, 425, 425, 424,
|
440, 440, 440, 440, 440, 439, 439, 440, 440, 440,
|
||||||
425, 425, 424, 425, 424, 425, 425, 425, 425, 424,
|
440, 439, 440, 440, 440, 439, 440, 439, 440, 440,
|
||||||
425, 425, 425, 424, 424, 425, 425, 424, 425, 425,
|
440, 440, 439, 440, 440, 440, 439, 439, 440, 440,
|
||||||
425, 425, 425, 425, 30, 425, 425, 425, 425, 425,
|
439, 440, 440, 440, 440, 440, 440, 440, 30, 440,
|
||||||
424, 425, 424, 424, 424, 424, 425, 425, 425, 425,
|
440, 440, 440, 440, 439, 440, 439, 439, 439, 439,
|
||||||
424, 425, 425, 424, 424, 425, 424, 425, 425, 425,
|
440, 440, 440, 440, 439, 440, 440, 440, 439, 439,
|
||||||
424, 424, 425, 425, 425, 425, 425, 425, 424, 425,
|
440, 439, 440, 440, 440, 439, 439, 440, 440, 440,
|
||||||
425, 425, 425, 424, 425, 424, 425, 424, 424, 424,
|
440, 440, 440, 439, 440, 440, 440, 440, 440, 439,
|
||||||
|
|
||||||
424, 425, 425, 425, 424, 424, 425, 424, 424, 424,
|
440, 439, 440, 439, 439, 439, 439, 440, 440, 440,
|
||||||
425, 425, 425, 424, 425, 424, 425, 424, 425, 424,
|
439, 439, 440, 440, 439, 439, 439, 440, 440, 440,
|
||||||
425, 425, 425, 424, 424, 425, 424, 424, 424, 425,
|
439, 440, 439, 440, 439, 440, 439, 440, 440, 440,
|
||||||
425, 424, 425, 424, 424, 424, 425, 424, 424, 424,
|
440, 439, 439, 440, 439, 439, 439, 440, 440, 439,
|
||||||
425, 424, 425, 424, 425, 424, 424, 425, 425, 425,
|
440, 440, 439, 439, 439, 440, 440, 440, 439, 439,
|
||||||
424, 425, 424, 424, 424, 425, 425, 424, 424, 425,
|
439, 440, 439, 440, 439, 440, 439, 439, 440, 440,
|
||||||
424, 424, 424, 424, 424, 424, 424, 425, 424, 425,
|
440, 439, 440, 439, 439, 439, 440, 440, 439, 439,
|
||||||
424, 425, 424, 424, 425, 425, 424, 424, 425, 424,
|
440, 440, 439, 439, 439, 439, 439, 439, 439, 440,
|
||||||
425, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
439, 440, 439, 440, 439, 439, 440, 440, 439, 439,
|
||||||
425, 424, 425, 424, 425, 424, 424, 425, 425, 424,
|
440, 439, 440, 439, 439, 440, 439, 439, 439, 439,
|
||||||
|
|
||||||
424, 425, 424, 424, 424, 424, 424, 424, 424, 424,
|
439, 439, 439, 440, 439, 440, 439, 440, 439, 439,
|
||||||
424, 424, 424, 424, 425, 424, 425, 424, 424, 425,
|
440, 440, 439, 439, 440, 439, 439, 439, 439, 440,
|
||||||
425, 424, 424, 425, 424, 424, 424, 424, 424, 424,
|
439, 439, 439, 439, 439, 439, 439, 439, 440, 439,
|
||||||
424, 424, 424, 424, 425, 424, 424, 424, 425, 424,
|
440, 439, 439, 440, 440, 439, 439, 440, 439, 439,
|
||||||
424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
439, 439, 440, 439, 439, 439, 439, 439, 439, 440,
|
||||||
424, 425, 424, 424, 424, 424, 424, 424, 424, 424,
|
439, 439, 439, 440, 439, 439, 439, 439, 439, 439,
|
||||||
424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
439, 439, 439, 439, 439, 439, 440, 439, 439, 439,
|
||||||
424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
|
|
||||||
424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
424, 424, 424, 0, 424, 424
|
439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
|
439, 439, 439, 439, 439, 439, 439, 439, 0, 439,
|
||||||
|
439
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yyconst flex_int16_t yy_nxt[539] =
|
static yyconst flex_int16_t yy_nxt[556] =
|
||||||
{ 0,
|
{ 0,
|
||||||
4, 5, 6, 7, 8, 9, 10, 10, 10, 11,
|
4, 5, 6, 7, 8, 9, 10, 10, 10, 11,
|
||||||
12, 5, 5, 5, 13, 14, 15, 16, 5, 17,
|
12, 5, 5, 5, 13, 14, 15, 16, 5, 5,
|
||||||
18, 19, 20, 21, 22, 5, 23, 24, 5, 23,
|
17, 18, 19, 20, 21, 22, 5, 23, 24, 5,
|
||||||
25, 26, 27, 28, 29, 30, 31, 32, 23, 5,
|
23, 25, 26, 27, 28, 29, 30, 31, 32, 23,
|
||||||
33, 34, 5, 36, 36, 36, 36, 36, 36, 36,
|
5, 33, 34, 5, 36, 36, 36, 36, 36, 36,
|
||||||
36, 40, 41, 44, 46, 47, 55, 48, 49, 50,
|
36, 36, 40, 41, 44, 46, 47, 50, 48, 49,
|
||||||
59, 42, 45, 59, 64, 60, 75, 165, 59, 76,
|
55, 59, 42, 45, 59, 64, 87, 60, 80, 59,
|
||||||
79, 56, 59, 51, 52, 86, 53, 66, 166, 37,
|
103, 51, 52, 59, 53, 56, 76, 433, 109, 77,
|
||||||
61, 67, 54, 71, 62, 68, 36, 36, 36, 36,
|
54, 37, 61, 87, 66, 110, 438, 62, 67, 111,
|
||||||
59, 65, 86, 59, 63, 163, 115, 164, 59, 72,
|
104, 98, 68, 65, 98, 105, 117, 63, 71, 98,
|
||||||
|
|
||||||
73, 116, 59, 73, 73, 73, 73, 418, 102, 73,
|
74, 118, 72, 98, 215, 59, 159, 74, 59, 36,
|
||||||
73, 73, 73, 423, 118, 155, 73, 73, 73, 73,
|
36, 36, 36, 59, 73, 120, 216, 59, 74, 74,
|
||||||
73, 74, 73, 97, 232, 124, 97, 103, 119, 108,
|
74, 74, 179, 126, 74, 74, 74, 74, 127, 121,
|
||||||
125, 97, 104, 144, 139, 97, 109, 139, 145, 73,
|
134, 74, 180, 74, 74, 74, 74, 75, 74, 142,
|
||||||
110, 174, 139, 208, 233, 180, 139, 414, 180, 422,
|
147, 169, 142, 135, 113, 148, 167, 142, 168, 240,
|
||||||
235, 175, 112, 180, 236, 209, 258, 180, 366, 368,
|
185, 142, 170, 185, 429, 244, 246, 247, 185, 245,
|
||||||
259, 401, 367, 421, 369, 402, 35, 35, 420, 419,
|
269, 383, 185, 381, 270, 241, 384, 382, 416, 437,
|
||||||
418, 417, 416, 415, 414, 413, 412, 411, 410, 409,
|
242, 436, 417, 35, 35, 435, 434, 433, 432, 431,
|
||||||
408, 407, 406, 405, 404, 403, 400, 400, 399, 398,
|
430, 429, 428, 427, 426, 425, 424, 423, 422, 421,
|
||||||
397, 396, 395, 394, 393, 392, 391, 390, 389, 388,
|
420, 419, 418, 415, 415, 414, 413, 412, 411, 410,
|
||||||
|
|
||||||
387, 386, 385, 384, 383, 181, 382, 381, 380, 379,
|
409, 408, 407, 406, 405, 404, 403, 402, 401, 400,
|
||||||
378, 377, 376, 375, 374, 373, 372, 145, 371, 370,
|
399, 398, 186, 397, 396, 395, 394, 393, 392, 391,
|
||||||
365, 364, 363, 362, 361, 360, 359, 358, 357, 356,
|
390, 389, 388, 387, 148, 386, 385, 380, 379, 378,
|
||||||
355, 354, 353, 352, 351, 350, 349, 348, 347, 346,
|
377, 376, 375, 374, 373, 372, 371, 370, 369, 368,
|
||||||
345, 344, 343, 342, 341, 340, 339, 338, 337, 336,
|
367, 366, 365, 364, 363, 362, 361, 360, 359, 358,
|
||||||
335, 334, 333, 332, 331, 330, 329, 328, 327, 326,
|
357, 356, 355, 354, 353, 352, 351, 350, 349, 348,
|
||||||
325, 324, 323, 322, 321, 320, 319, 318, 317, 316,
|
347, 346, 345, 344, 343, 342, 341, 340, 339, 338,
|
||||||
315, 314, 313, 312, 311, 310, 309, 308, 307, 306,
|
337, 336, 335, 334, 333, 332, 331, 330, 329, 328,
|
||||||
305, 304, 303, 302, 301, 300, 299, 298, 297, 296,
|
327, 326, 325, 324, 323, 322, 321, 320, 319, 318,
|
||||||
295, 294, 293, 292, 291, 290, 289, 288, 287, 286,
|
317, 316, 315, 314, 313, 312, 311, 310, 309, 308,
|
||||||
|
|
||||||
285, 284, 283, 282, 281, 112, 280, 145, 144, 279,
|
307, 306, 305, 304, 303, 302, 301, 300, 299, 298,
|
||||||
278, 277, 276, 275, 274, 273, 272, 271, 270, 269,
|
297, 296, 295, 294, 293, 113, 292, 148, 147, 291,
|
||||||
268, 267, 266, 265, 264, 263, 262, 261, 260, 257,
|
290, 289, 288, 287, 286, 285, 284, 283, 282, 281,
|
||||||
256, 255, 254, 253, 252, 177, 251, 250, 249, 248,
|
280, 279, 278, 277, 276, 275, 274, 273, 272, 271,
|
||||||
247, 246, 245, 244, 243, 242, 241, 240, 239, 238,
|
268, 267, 266, 265, 264, 263, 182, 262, 261, 260,
|
||||||
237, 234, 231, 230, 229, 228, 227, 144, 226, 225,
|
259, 258, 257, 256, 255, 254, 253, 252, 251, 250,
|
||||||
224, 195, 223, 222, 221, 220, 219, 218, 217, 216,
|
249, 248, 243, 239, 238, 237, 236, 235, 147, 234,
|
||||||
215, 214, 213, 212, 211, 210, 207, 206, 205, 204,
|
233, 232, 201, 231, 230, 229, 228, 227, 226, 225,
|
||||||
203, 112, 202, 201, 200, 199, 198, 197, 196, 195,
|
224, 223, 222, 221, 220, 219, 218, 217, 214, 213,
|
||||||
194, 193, 192, 191, 73, 190, 189, 188, 187, 186,
|
212, 211, 210, 209, 113, 208, 207, 206, 205, 204,
|
||||||
|
|
||||||
185, 184, 183, 182, 181, 179, 178, 177, 176, 173,
|
203, 202, 201, 200, 199, 198, 197, 74, 196, 195,
|
||||||
172, 171, 170, 169, 168, 167, 162, 161, 160, 159,
|
194, 193, 192, 191, 190, 189, 188, 187, 186, 184,
|
||||||
158, 157, 156, 154, 153, 152, 151, 150, 149, 148,
|
183, 182, 181, 178, 177, 176, 175, 174, 173, 172,
|
||||||
147, 146, 143, 142, 141, 140, 138, 137, 136, 135,
|
171, 166, 165, 164, 163, 162, 161, 160, 158, 157,
|
||||||
134, 133, 132, 131, 130, 129, 128, 127, 126, 123,
|
156, 155, 154, 153, 152, 151, 150, 149, 146, 145,
|
||||||
122, 121, 120, 117, 73, 114, 113, 112, 111, 107,
|
144, 143, 141, 140, 139, 138, 137, 136, 133, 132,
|
||||||
106, 105, 101, 100, 99, 98, 96, 95, 94, 93,
|
131, 130, 129, 128, 125, 124, 123, 122, 119, 74,
|
||||||
92, 91, 90, 89, 88, 86, 87, 85, 84, 83,
|
116, 115, 114, 113, 112, 108, 107, 106, 102, 101,
|
||||||
41, 82, 81, 80, 78, 77, 70, 69, 58, 57,
|
100, 99, 97, 96, 95, 94, 93, 92, 91, 90,
|
||||||
43, 39, 38, 424, 3, 424, 424, 424, 424, 424,
|
89, 87, 88, 86, 85, 84, 41, 83, 82, 81,
|
||||||
|
|
||||||
424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
79, 78, 70, 69, 58, 57, 43, 39, 38, 439,
|
||||||
424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
3, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
424, 424, 424, 424, 424, 424, 424, 424
|
439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
|
439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
|
439, 439, 439, 439, 439
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yyconst flex_int16_t yy_chk[539] =
|
static yyconst flex_int16_t yy_chk[556] =
|
||||||
{ 0,
|
{ 0,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 9, 9, 9, 9, 10, 10, 10,
|
1, 1, 1, 1, 9, 9, 9, 9, 10, 10,
|
||||||
10, 15, 15, 17, 18, 18, 20, 18, 18, 19,
|
10, 10, 15, 15, 17, 18, 18, 19, 18, 18,
|
||||||
23, 15, 17, 23, 25, 24, 31, 125, 23, 31,
|
20, 23, 15, 17, 23, 25, 46, 24, 441, 23,
|
||||||
426, 20, 23, 19, 19, 46, 19, 26, 125, 9,
|
64, 19, 19, 23, 19, 20, 31, 438, 68, 31,
|
||||||
24, 26, 19, 29, 24, 26, 36, 36, 36, 36,
|
19, 9, 24, 46, 26, 68, 437, 24, 26, 68,
|
||||||
29, 25, 46, 29, 24, 124, 74, 124, 29, 29,
|
64, 59, 26, 25, 59, 64, 75, 24, 29, 59,
|
||||||
|
|
||||||
74, 74, 29, 30, 30, 30, 30, 423, 64, 30,
|
75, 75, 29, 59, 179, 29, 117, 117, 29, 36,
|
||||||
30, 30, 30, 422, 76, 115, 115, 30, 30, 30,
|
36, 36, 36, 29, 29, 77, 179, 29, 30, 30,
|
||||||
30, 30, 30, 59, 204, 82, 59, 64, 76, 68,
|
30, 30, 136, 83, 30, 30, 30, 30, 83, 77,
|
||||||
82, 59, 64, 102, 97, 59, 68, 97, 102, 116,
|
91, 118, 136, 30, 30, 30, 30, 30, 30, 98,
|
||||||
68, 133, 97, 174, 204, 139, 97, 421, 139, 420,
|
103, 127, 98, 91, 118, 103, 126, 98, 126, 210,
|
||||||
206, 133, 116, 139, 206, 174, 232, 139, 351, 355,
|
142, 98, 127, 142, 436, 212, 213, 213, 142, 212,
|
||||||
232, 392, 351, 419, 355, 392, 425, 425, 417, 416,
|
240, 370, 142, 366, 240, 210, 370, 366, 407, 435,
|
||||||
415, 412, 411, 410, 409, 408, 407, 406, 405, 404,
|
210, 434, 407, 440, 440, 432, 431, 430, 427, 426,
|
||||||
403, 402, 401, 399, 398, 394, 391, 390, 389, 388,
|
425, 424, 423, 422, 421, 420, 419, 418, 417, 416,
|
||||||
387, 386, 385, 384, 383, 382, 381, 380, 379, 378,
|
414, 413, 409, 406, 405, 404, 403, 402, 401, 400,
|
||||||
|
|
||||||
377, 375, 374, 373, 372, 371, 370, 369, 368, 367,
|
399, 398, 397, 396, 395, 394, 393, 392, 390, 389,
|
||||||
366, 365, 364, 363, 362, 360, 359, 358, 357, 356,
|
388, 387, 386, 385, 384, 383, 382, 381, 380, 379,
|
||||||
350, 349, 348, 347, 345, 344, 343, 342, 341, 340,
|
378, 377, 375, 374, 373, 372, 371, 365, 364, 363,
|
||||||
339, 337, 336, 335, 334, 333, 332, 331, 330, 329,
|
362, 360, 359, 358, 357, 356, 355, 354, 352, 351,
|
||||||
328, 327, 326, 325, 324, 322, 321, 319, 318, 316,
|
350, 349, 348, 347, 346, 345, 344, 342, 341, 340,
|
||||||
315, 314, 313, 312, 310, 309, 308, 306, 305, 304,
|
339, 338, 336, 335, 333, 332, 330, 329, 328, 327,
|
||||||
303, 302, 301, 300, 299, 298, 297, 296, 295, 294,
|
326, 324, 323, 322, 320, 319, 318, 317, 316, 315,
|
||||||
293, 292, 291, 290, 289, 287, 286, 285, 284, 283,
|
314, 313, 312, 311, 310, 309, 308, 307, 306, 305,
|
||||||
282, 281, 280, 279, 278, 277, 276, 275, 274, 273,
|
304, 303, 302, 300, 299, 298, 297, 296, 295, 294,
|
||||||
272, 271, 270, 269, 268, 267, 266, 265, 264, 263,
|
293, 292, 291, 290, 289, 288, 287, 286, 285, 284,
|
||||||
|
|
||||||
262, 261, 259, 258, 257, 256, 255, 254, 253, 252,
|
283, 282, 281, 280, 279, 278, 277, 276, 275, 274,
|
||||||
251, 250, 249, 248, 247, 246, 245, 244, 243, 242,
|
273, 271, 270, 269, 268, 267, 266, 265, 264, 263,
|
||||||
241, 240, 239, 238, 237, 236, 235, 234, 233, 231,
|
262, 261, 260, 259, 258, 257, 256, 255, 254, 253,
|
||||||
230, 229, 228, 227, 226, 225, 224, 223, 222, 221,
|
252, 251, 250, 249, 248, 245, 244, 243, 242, 241,
|
||||||
220, 218, 217, 216, 215, 214, 212, 210, 209, 208,
|
239, 238, 237, 236, 235, 234, 233, 232, 231, 230,
|
||||||
207, 205, 203, 202, 201, 200, 199, 198, 197, 196,
|
229, 227, 225, 224, 223, 222, 221, 219, 217, 216,
|
||||||
194, 193, 192, 191, 190, 189, 188, 187, 186, 185,
|
215, 214, 211, 209, 208, 207, 206, 205, 204, 203,
|
||||||
183, 182, 179, 178, 176, 175, 173, 172, 171, 170,
|
202, 200, 199, 198, 197, 196, 195, 194, 193, 192,
|
||||||
169, 168, 167, 166, 165, 164, 163, 162, 161, 160,
|
191, 190, 188, 187, 184, 183, 181, 180, 178, 177,
|
||||||
159, 158, 157, 156, 155, 154, 153, 151, 150, 149,
|
176, 175, 174, 173, 172, 171, 170, 169, 168, 167,
|
||||||
|
|
||||||
147, 146, 143, 142, 140, 138, 137, 135, 134, 132,
|
166, 165, 164, 163, 162, 161, 160, 159, 158, 157,
|
||||||
131, 130, 129, 128, 127, 126, 123, 122, 121, 120,
|
156, 154, 153, 152, 150, 149, 146, 145, 143, 141,
|
||||||
119, 118, 117, 114, 113, 111, 110, 109, 108, 107,
|
140, 138, 137, 135, 134, 133, 132, 131, 130, 129,
|
||||||
106, 105, 101, 100, 99, 98, 96, 95, 94, 93,
|
128, 125, 124, 123, 122, 121, 120, 119, 116, 115,
|
||||||
92, 91, 90, 89, 88, 87, 85, 84, 83, 81,
|
114, 112, 111, 110, 109, 108, 107, 106, 102, 101,
|
||||||
80, 78, 77, 75, 73, 72, 71, 70, 69, 67,
|
100, 99, 97, 96, 95, 94, 93, 92, 90, 89,
|
||||||
66, 65, 63, 62, 61, 60, 58, 57, 56, 55,
|
88, 86, 85, 84, 82, 81, 79, 78, 76, 74,
|
||||||
54, 52, 51, 50, 49, 48, 47, 45, 44, 43,
|
73, 72, 71, 70, 69, 67, 66, 65, 63, 62,
|
||||||
42, 40, 39, 38, 33, 32, 28, 27, 22, 21,
|
61, 60, 58, 57, 56, 55, 54, 52, 51, 50,
|
||||||
16, 14, 13, 3, 424, 424, 424, 424, 424, 424,
|
49, 48, 47, 45, 44, 43, 42, 40, 39, 38,
|
||||||
|
|
||||||
424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
33, 32, 28, 27, 22, 21, 16, 14, 13, 3,
|
||||||
424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
424, 424, 424, 424, 424, 424, 424, 424, 424, 424,
|
439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
424, 424, 424, 424, 424, 424, 424, 424
|
439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
|
439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
|
||||||
|
439, 439, 439, 439, 439
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
static yy_state_type yy_last_accepting_state;
|
static yy_state_type yy_last_accepting_state;
|
||||||
|
@ -726,6 +735,7 @@ char *parse_events_text;
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "../perf.h"
|
#include "../perf.h"
|
||||||
#include "parse-events-bison.h"
|
#include "parse-events-bison.h"
|
||||||
|
#include "parse-events.h"
|
||||||
|
|
||||||
static int __value(char *str, int base, int token)
|
static int __value(char *str, int base, int token)
|
||||||
{
|
{
|
||||||
|
@ -762,7 +772,13 @@ static int sym(int type, int config)
|
||||||
return PE_VALUE_SYM;
|
return PE_VALUE_SYM;
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 766 "<stdout>"
|
static int term(int type)
|
||||||
|
{
|
||||||
|
parse_events_lval.num = type;
|
||||||
|
return PE_TERM;
|
||||||
|
}
|
||||||
|
|
||||||
|
#line 782 "<stdout>"
|
||||||
|
|
||||||
#define INITIAL 0
|
#define INITIAL 0
|
||||||
|
|
||||||
|
@ -944,9 +960,9 @@ YY_DECL
|
||||||
register char *yy_cp, *yy_bp;
|
register char *yy_cp, *yy_bp;
|
||||||
register int yy_act;
|
register int yy_act;
|
||||||
|
|
||||||
#line 53 "util/parse-events.l"
|
#line 60 "util/parse-events.l"
|
||||||
|
|
||||||
#line 950 "<stdout>"
|
#line 966 "<stdout>"
|
||||||
|
|
||||||
if ( !(yy_init) )
|
if ( !(yy_init) )
|
||||||
{
|
{
|
||||||
|
@ -999,13 +1015,13 @@ yy_match:
|
||||||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||||
{
|
{
|
||||||
yy_current_state = (int) yy_def[yy_current_state];
|
yy_current_state = (int) yy_def[yy_current_state];
|
||||||
if ( yy_current_state >= 425 )
|
if ( yy_current_state >= 440 )
|
||||||
yy_c = yy_meta[(unsigned int) yy_c];
|
yy_c = yy_meta[(unsigned int) yy_c];
|
||||||
}
|
}
|
||||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
|
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
|
||||||
++yy_cp;
|
++yy_cp;
|
||||||
}
|
}
|
||||||
while ( yy_base[yy_current_state] != 495 );
|
while ( yy_base[yy_current_state] != 511 );
|
||||||
|
|
||||||
yy_find_action:
|
yy_find_action:
|
||||||
yy_act = yy_accept[yy_current_state];
|
yy_act = yy_accept[yy_current_state];
|
||||||
|
@ -1031,192 +1047,223 @@ do_action: /* This label is used only to access EOF actions. */
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 54 "util/parse-events.l"
|
#line 61 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES); }
|
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 2:
|
case 2:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 55 "util/parse-events.l"
|
#line 62 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND); }
|
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 3:
|
case 3:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 56 "util/parse-events.l"
|
#line 63 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_BACKEND); }
|
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_BACKEND); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 4:
|
case 4:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 57 "util/parse-events.l"
|
#line 64 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_INSTRUCTIONS); }
|
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_INSTRUCTIONS); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 5:
|
case 5:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 58 "util/parse-events.l"
|
#line 65 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_CACHE_REFERENCES); }
|
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_CACHE_REFERENCES); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 6:
|
case 6:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 59 "util/parse-events.l"
|
#line 66 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_CACHE_MISSES); }
|
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_CACHE_MISSES); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 7:
|
case 7:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 60 "util/parse-events.l"
|
#line 67 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_BRANCH_INSTRUCTIONS); }
|
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_BRANCH_INSTRUCTIONS); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 8:
|
case 8:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 61 "util/parse-events.l"
|
#line 68 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_BRANCH_MISSES); }
|
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_BRANCH_MISSES); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 9:
|
case 9:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 62 "util/parse-events.l"
|
#line 69 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_BUS_CYCLES); }
|
{ return sym(PERF_TYPE_HARDWARE, PERF_COUNT_HW_BUS_CYCLES); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 10:
|
case 10:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 63 "util/parse-events.l"
|
#line 70 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_CLOCK); }
|
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_CLOCK); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 11:
|
case 11:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 64 "util/parse-events.l"
|
#line 71 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_TASK_CLOCK); }
|
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_TASK_CLOCK); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 12:
|
case 12:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 65 "util/parse-events.l"
|
#line 72 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS); }
|
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 13:
|
case 13:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 66 "util/parse-events.l"
|
#line 73 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS_MIN); }
|
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS_MIN); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 14:
|
case 14:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 67 "util/parse-events.l"
|
#line 74 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS_MAJ); }
|
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_PAGE_FAULTS_MAJ); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 15:
|
case 15:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 68 "util/parse-events.l"
|
#line 75 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CONTEXT_SWITCHES); }
|
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CONTEXT_SWITCHES); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 16:
|
case 16:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 69 "util/parse-events.l"
|
#line 76 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_MIGRATIONS); }
|
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CPU_MIGRATIONS); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 17:
|
case 17:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 70 "util/parse-events.l"
|
#line 77 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_ALIGNMENT_FAULTS); }
|
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_ALIGNMENT_FAULTS); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 18:
|
case 18:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 71 "util/parse-events.l"
|
#line 78 "util/parse-events.l"
|
||||||
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_EMULATION_FAULTS); }
|
{ return sym(PERF_TYPE_SOFTWARE, PERF_COUNT_SW_EMULATION_FAULTS); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 19:
|
case 19:
|
||||||
#line 74 "util/parse-events.l"
|
#line 81 "util/parse-events.l"
|
||||||
case 20:
|
case 20:
|
||||||
#line 75 "util/parse-events.l"
|
#line 82 "util/parse-events.l"
|
||||||
case 21:
|
case 21:
|
||||||
#line 76 "util/parse-events.l"
|
#line 83 "util/parse-events.l"
|
||||||
case 22:
|
case 22:
|
||||||
#line 77 "util/parse-events.l"
|
#line 84 "util/parse-events.l"
|
||||||
case 23:
|
case 23:
|
||||||
#line 78 "util/parse-events.l"
|
#line 85 "util/parse-events.l"
|
||||||
case 24:
|
case 24:
|
||||||
#line 79 "util/parse-events.l"
|
#line 86 "util/parse-events.l"
|
||||||
case 25:
|
case 25:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 79 "util/parse-events.l"
|
#line 86 "util/parse-events.l"
|
||||||
{ return str(PE_NAME_CACHE_TYPE); }
|
{ return str(PE_NAME_CACHE_TYPE); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 26:
|
case 26:
|
||||||
#line 82 "util/parse-events.l"
|
#line 89 "util/parse-events.l"
|
||||||
case 27:
|
case 27:
|
||||||
#line 83 "util/parse-events.l"
|
#line 90 "util/parse-events.l"
|
||||||
case 28:
|
case 28:
|
||||||
#line 84 "util/parse-events.l"
|
#line 91 "util/parse-events.l"
|
||||||
case 29:
|
case 29:
|
||||||
#line 85 "util/parse-events.l"
|
#line 92 "util/parse-events.l"
|
||||||
case 30:
|
case 30:
|
||||||
#line 86 "util/parse-events.l"
|
#line 93 "util/parse-events.l"
|
||||||
case 31:
|
case 31:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 86 "util/parse-events.l"
|
#line 93 "util/parse-events.l"
|
||||||
{ return str(PE_NAME_CACHE_OP_RESULT); }
|
{ return str(PE_NAME_CACHE_OP_RESULT); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
|
/*
|
||||||
|
* These are event config hardcoded term names to be specified
|
||||||
|
* within xxx/.../ syntax. So far we dont clash with other names,
|
||||||
|
* so we can put them here directly. In case the we have a conflict
|
||||||
|
* in future, this needs to go into '//' condition block.
|
||||||
|
*/
|
||||||
case 32:
|
case 32:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 88 "util/parse-events.l"
|
#line 101 "util/parse-events.l"
|
||||||
{ return PE_PREFIX_MEM; }
|
{ return term(PARSE_EVENTS__TERM_TYPE_CONFIG); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 33:
|
case 33:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 89 "util/parse-events.l"
|
#line 102 "util/parse-events.l"
|
||||||
{ return raw(); }
|
{ return term(PARSE_EVENTS__TERM_TYPE_CONFIG1); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 34:
|
case 34:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 90 "util/parse-events.l"
|
#line 103 "util/parse-events.l"
|
||||||
{ return value(10); }
|
{ return term(PARSE_EVENTS__TERM_TYPE_CONFIG2); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 35:
|
case 35:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 91 "util/parse-events.l"
|
#line 104 "util/parse-events.l"
|
||||||
{ return value(16); }
|
{ return term(PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 36:
|
case 36:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 93 "util/parse-events.l"
|
#line 105 "util/parse-events.l"
|
||||||
{ return str(PE_MODIFIER_EVENT); }
|
{ return term(PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 37:
|
case 37:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 94 "util/parse-events.l"
|
#line 107 "util/parse-events.l"
|
||||||
{ return str(PE_MODIFIER_BP); }
|
{ return PE_PREFIX_MEM; }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 38:
|
case 38:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 95 "util/parse-events.l"
|
#line 108 "util/parse-events.l"
|
||||||
{ return str(PE_NAME); }
|
{ return raw(); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 39:
|
case 39:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 96 "util/parse-events.l"
|
#line 109 "util/parse-events.l"
|
||||||
{ return '/'; }
|
{ return value(10); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 40:
|
case 40:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 97 "util/parse-events.l"
|
#line 110 "util/parse-events.l"
|
||||||
{ return '-'; }
|
{ return value(16); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 41:
|
case 41:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 98 "util/parse-events.l"
|
#line 112 "util/parse-events.l"
|
||||||
{ return ','; }
|
{ return str(PE_MODIFIER_EVENT); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 42:
|
case 42:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 99 "util/parse-events.l"
|
#line 113 "util/parse-events.l"
|
||||||
{ return ':'; }
|
{ return str(PE_MODIFIER_BP); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 43:
|
case 43:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 100 "util/parse-events.l"
|
#line 114 "util/parse-events.l"
|
||||||
{ return '='; }
|
{ return str(PE_NAME); }
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
case 44:
|
case 44:
|
||||||
YY_RULE_SETUP
|
YY_RULE_SETUP
|
||||||
#line 102 "util/parse-events.l"
|
#line 115 "util/parse-events.l"
|
||||||
|
{ return '/'; }
|
||||||
|
YY_BREAK
|
||||||
|
case 45:
|
||||||
|
YY_RULE_SETUP
|
||||||
|
#line 116 "util/parse-events.l"
|
||||||
|
{ return '-'; }
|
||||||
|
YY_BREAK
|
||||||
|
case 46:
|
||||||
|
YY_RULE_SETUP
|
||||||
|
#line 117 "util/parse-events.l"
|
||||||
|
{ return ','; }
|
||||||
|
YY_BREAK
|
||||||
|
case 47:
|
||||||
|
YY_RULE_SETUP
|
||||||
|
#line 118 "util/parse-events.l"
|
||||||
|
{ return ':'; }
|
||||||
|
YY_BREAK
|
||||||
|
case 48:
|
||||||
|
YY_RULE_SETUP
|
||||||
|
#line 119 "util/parse-events.l"
|
||||||
|
{ return '='; }
|
||||||
|
YY_BREAK
|
||||||
|
case 49:
|
||||||
|
YY_RULE_SETUP
|
||||||
|
#line 121 "util/parse-events.l"
|
||||||
ECHO;
|
ECHO;
|
||||||
YY_BREAK
|
YY_BREAK
|
||||||
#line 1220 "<stdout>"
|
#line 1267 "<stdout>"
|
||||||
case YY_STATE_EOF(INITIAL):
|
case YY_STATE_EOF(INITIAL):
|
||||||
yyterminate();
|
yyterminate();
|
||||||
|
|
||||||
|
@ -1508,7 +1555,7 @@ static int yy_get_next_buffer (void)
|
||||||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||||
{
|
{
|
||||||
yy_current_state = (int) yy_def[yy_current_state];
|
yy_current_state = (int) yy_def[yy_current_state];
|
||||||
if ( yy_current_state >= 425 )
|
if ( yy_current_state >= 440 )
|
||||||
yy_c = yy_meta[(unsigned int) yy_c];
|
yy_c = yy_meta[(unsigned int) yy_c];
|
||||||
}
|
}
|
||||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
|
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)
|
||||||
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
|
||||||
{
|
{
|
||||||
yy_current_state = (int) yy_def[yy_current_state];
|
yy_current_state = (int) yy_def[yy_current_state];
|
||||||
if ( yy_current_state >= 425 )
|
if ( yy_current_state >= 440 )
|
||||||
yy_c = yy_meta[(unsigned int) yy_c];
|
yy_c = yy_meta[(unsigned int) yy_c];
|
||||||
}
|
}
|
||||||
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
|
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
|
||||||
yy_is_jam = (yy_current_state == 424);
|
yy_is_jam = (yy_current_state == 439);
|
||||||
|
|
||||||
return yy_is_jam ? 0 : yy_current_state;
|
return yy_is_jam ? 0 : yy_current_state;
|
||||||
}
|
}
|
||||||
|
@ -2214,7 +2261,7 @@ void parse_events_free (void * ptr )
|
||||||
|
|
||||||
#define YYTABLES_NAME "yytables"
|
#define YYTABLES_NAME "yytables"
|
||||||
|
|
||||||
#line 102 "util/parse-events.l"
|
#line 121 "util/parse-events.l"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -308,7 +308,7 @@ extern int parse_events_lex (void);
|
||||||
#undef YY_DECL
|
#undef YY_DECL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#line 102 "util/parse-events.l"
|
#line 121 "util/parse-events.l"
|
||||||
|
|
||||||
|
|
||||||
#line 315 "util/parse-events-flex.h"
|
#line 315 "util/parse-events-flex.h"
|
||||||
|
|
|
@ -588,15 +588,60 @@ int parse_events_add_breakpoint(struct list_head *list, int *idx,
|
||||||
return add_event(list, idx, &attr, name);
|
return add_event(list, idx, &attr, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int config_term(struct perf_event_attr *attr,
|
||||||
parse_events_add_numeric(struct list_head *list, int *idx,
|
struct parse_events__term *term)
|
||||||
unsigned long type, unsigned long config)
|
{
|
||||||
|
switch (term->type) {
|
||||||
|
case PARSE_EVENTS__TERM_TYPE_CONFIG:
|
||||||
|
attr->config = term->val.num;
|
||||||
|
break;
|
||||||
|
case PARSE_EVENTS__TERM_TYPE_CONFIG1:
|
||||||
|
attr->config1 = term->val.num;
|
||||||
|
break;
|
||||||
|
case PARSE_EVENTS__TERM_TYPE_CONFIG2:
|
||||||
|
attr->config2 = term->val.num;
|
||||||
|
break;
|
||||||
|
case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD:
|
||||||
|
attr->sample_period = term->val.num;
|
||||||
|
break;
|
||||||
|
case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE:
|
||||||
|
/*
|
||||||
|
* TODO uncomment when the field is available
|
||||||
|
* attr->branch_sample_type = term->val.num;
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int config_attr(struct perf_event_attr *attr,
|
||||||
|
struct list_head *head, int fail)
|
||||||
|
{
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
list_for_each_entry(term, head, list)
|
||||||
|
if (config_term(attr, term) && fail)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int parse_events_add_numeric(struct list_head *list, int *idx,
|
||||||
|
unsigned long type, unsigned long config,
|
||||||
|
struct list_head *head_config)
|
||||||
{
|
{
|
||||||
struct perf_event_attr attr;
|
struct perf_event_attr attr;
|
||||||
|
|
||||||
memset(&attr, 0, sizeof(attr));
|
memset(&attr, 0, sizeof(attr));
|
||||||
attr.type = type;
|
attr.type = type;
|
||||||
attr.config = config;
|
attr.config = config;
|
||||||
|
|
||||||
|
if (head_config &&
|
||||||
|
config_attr(&attr, head_config, 1))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
return add_event(list, idx, &attr,
|
return add_event(list, idx, &attr,
|
||||||
(char *) __event_name(type, config));
|
(char *) __event_name(type, config));
|
||||||
}
|
}
|
||||||
|
@ -923,3 +968,51 @@ void print_events(const char *event_glob)
|
||||||
|
|
||||||
print_tracepoint_events(NULL, NULL);
|
print_tracepoint_events(NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int parse_events__is_hardcoded_term(struct parse_events__term *term)
|
||||||
|
{
|
||||||
|
return term->type <= PARSE_EVENTS__TERM_TYPE_HARDCODED_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
|
int parse_events__new_term(struct parse_events__term **_term, int type,
|
||||||
|
char *config, char *str, long num)
|
||||||
|
{
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
term = zalloc(sizeof(*term));
|
||||||
|
if (!term)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
INIT_LIST_HEAD(&term->list);
|
||||||
|
term->type = type;
|
||||||
|
term->config = config;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case PARSE_EVENTS__TERM_TYPE_CONFIG:
|
||||||
|
case PARSE_EVENTS__TERM_TYPE_CONFIG1:
|
||||||
|
case PARSE_EVENTS__TERM_TYPE_CONFIG2:
|
||||||
|
case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD:
|
||||||
|
case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE:
|
||||||
|
case PARSE_EVENTS__TERM_TYPE_NUM:
|
||||||
|
term->val.num = num;
|
||||||
|
break;
|
||||||
|
case PARSE_EVENTS__TERM_TYPE_STR:
|
||||||
|
term->val.str = str;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
*_term = term;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void parse_events__free_terms(struct list_head *terms)
|
||||||
|
{
|
||||||
|
struct parse_events__term *term, *h;
|
||||||
|
|
||||||
|
list_for_each_entry_safe(term, h, terms, list)
|
||||||
|
free(term);
|
||||||
|
|
||||||
|
free(terms);
|
||||||
|
}
|
||||||
|
|
|
@ -33,6 +33,34 @@ extern int parse_filter(const struct option *opt, const char *str, int unset);
|
||||||
|
|
||||||
#define EVENTS_HELP_MAX (128*1024)
|
#define EVENTS_HELP_MAX (128*1024)
|
||||||
|
|
||||||
|
enum {
|
||||||
|
PARSE_EVENTS__TERM_TYPE_CONFIG,
|
||||||
|
PARSE_EVENTS__TERM_TYPE_CONFIG1,
|
||||||
|
PARSE_EVENTS__TERM_TYPE_CONFIG2,
|
||||||
|
PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD,
|
||||||
|
PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE,
|
||||||
|
PARSE_EVENTS__TERM_TYPE_NUM,
|
||||||
|
PARSE_EVENTS__TERM_TYPE_STR,
|
||||||
|
|
||||||
|
PARSE_EVENTS__TERM_TYPE_HARDCODED_MAX =
|
||||||
|
PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct parse_events__term {
|
||||||
|
char *config;
|
||||||
|
union {
|
||||||
|
char *str;
|
||||||
|
long num;
|
||||||
|
} val;
|
||||||
|
int type;
|
||||||
|
|
||||||
|
struct list_head list;
|
||||||
|
};
|
||||||
|
|
||||||
|
int parse_events__is_hardcoded_term(struct parse_events__term *term);
|
||||||
|
int parse_events__new_term(struct parse_events__term **term, int type,
|
||||||
|
char *config, char *str, long num);
|
||||||
|
void parse_events__free_terms(struct list_head *terms);
|
||||||
int parse_events_modifier(struct list_head *list __used, char *str __used);
|
int parse_events_modifier(struct list_head *list __used, char *str __used);
|
||||||
int parse_events_add_tracepoint(struct list_head *list, int *idx,
|
int parse_events_add_tracepoint(struct list_head *list, int *idx,
|
||||||
char *sys, char *event);
|
char *sys, char *event);
|
||||||
|
@ -40,7 +68,8 @@ int parse_events_add_raw(struct perf_evlist *evlist, unsigned long config,
|
||||||
unsigned long config1, unsigned long config2,
|
unsigned long config1, unsigned long config2,
|
||||||
char *mod);
|
char *mod);
|
||||||
int parse_events_add_numeric(struct list_head *list, int *idx,
|
int parse_events_add_numeric(struct list_head *list, int *idx,
|
||||||
unsigned long type, unsigned long config);
|
unsigned long type, unsigned long config,
|
||||||
|
struct list_head *head_config);
|
||||||
int parse_events_add_cache(struct list_head *list, int *idx,
|
int parse_events_add_cache(struct list_head *list, int *idx,
|
||||||
char *type, char *op_result1, char *op_result2);
|
char *type, char *op_result1, char *op_result2);
|
||||||
int parse_events_add_breakpoint(struct list_head *list, int *idx,
|
int parse_events_add_breakpoint(struct list_head *list, int *idx,
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "../perf.h"
|
#include "../perf.h"
|
||||||
#include "parse-events-bison.h"
|
#include "parse-events-bison.h"
|
||||||
|
#include "parse-events.h"
|
||||||
|
|
||||||
static int __value(char *str, int base, int token)
|
static int __value(char *str, int base, int token)
|
||||||
{
|
{
|
||||||
|
@ -41,6 +42,12 @@ static int sym(int type, int config)
|
||||||
return PE_VALUE_SYM;
|
return PE_VALUE_SYM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int term(int type)
|
||||||
|
{
|
||||||
|
parse_events_lval.num = type;
|
||||||
|
return PE_TERM;
|
||||||
|
}
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
num_dec [0-9]+
|
num_dec [0-9]+
|
||||||
|
@ -85,6 +92,18 @@ speculative-read|speculative-load |
|
||||||
refs|Reference|ops|access |
|
refs|Reference|ops|access |
|
||||||
misses|miss { return str(PE_NAME_CACHE_OP_RESULT); }
|
misses|miss { return str(PE_NAME_CACHE_OP_RESULT); }
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These are event config hardcoded term names to be specified
|
||||||
|
* within xxx/.../ syntax. So far we dont clash with other names,
|
||||||
|
* so we can put them here directly. In case the we have a conflict
|
||||||
|
* in future, this needs to go into '//' condition block.
|
||||||
|
*/
|
||||||
|
config { return term(PARSE_EVENTS__TERM_TYPE_CONFIG); }
|
||||||
|
config1 { return term(PARSE_EVENTS__TERM_TYPE_CONFIG1); }
|
||||||
|
config2 { return term(PARSE_EVENTS__TERM_TYPE_CONFIG2); }
|
||||||
|
period { return term(PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); }
|
||||||
|
branch_type { return term(PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); }
|
||||||
|
|
||||||
mem: { return PE_PREFIX_MEM; }
|
mem: { return PE_PREFIX_MEM; }
|
||||||
r{num_raw_hex} { return raw(); }
|
r{num_raw_hex} { return raw(); }
|
||||||
{num_dec} { return value(10); }
|
{num_dec} { return value(10); }
|
||||||
|
|
|
@ -23,7 +23,7 @@ do { \
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%token PE_VALUE PE_VALUE_SYM PE_RAW
|
%token PE_VALUE PE_VALUE_SYM PE_RAW PE_TERM
|
||||||
%token PE_NAME
|
%token PE_NAME
|
||||||
%token PE_MODIFIER_EVENT PE_MODIFIER_BP
|
%token PE_MODIFIER_EVENT PE_MODIFIER_BP
|
||||||
%token PE_NAME_CACHE_TYPE PE_NAME_CACHE_OP_RESULT
|
%token PE_NAME_CACHE_TYPE PE_NAME_CACHE_OP_RESULT
|
||||||
|
@ -32,16 +32,21 @@ do { \
|
||||||
%type <num> PE_VALUE
|
%type <num> PE_VALUE
|
||||||
%type <num> PE_VALUE_SYM
|
%type <num> PE_VALUE_SYM
|
||||||
%type <num> PE_RAW
|
%type <num> PE_RAW
|
||||||
|
%type <num> PE_TERM
|
||||||
%type <str> PE_NAME
|
%type <str> PE_NAME
|
||||||
%type <str> PE_NAME_CACHE_TYPE
|
%type <str> PE_NAME_CACHE_TYPE
|
||||||
%type <str> PE_NAME_CACHE_OP_RESULT
|
%type <str> PE_NAME_CACHE_OP_RESULT
|
||||||
%type <str> PE_MODIFIER_EVENT
|
%type <str> PE_MODIFIER_EVENT
|
||||||
%type <str> PE_MODIFIER_BP
|
%type <str> PE_MODIFIER_BP
|
||||||
|
%type <head> event_config
|
||||||
|
%type <term> event_term
|
||||||
|
|
||||||
%union
|
%union
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
unsigned long num;
|
unsigned long num;
|
||||||
|
struct list_head *head;
|
||||||
|
struct parse_events__term *term;
|
||||||
}
|
}
|
||||||
%%
|
%%
|
||||||
|
|
||||||
|
@ -56,7 +61,7 @@ event_def PE_MODIFIER_EVENT
|
||||||
|
|
|
|
||||||
event_def
|
event_def
|
||||||
|
|
||||||
event_def: event_legacy_symbol sep_dc |
|
event_def: event_legacy_symbol |
|
||||||
event_legacy_cache sep_dc |
|
event_legacy_cache sep_dc |
|
||||||
event_legacy_mem |
|
event_legacy_mem |
|
||||||
event_legacy_tracepoint sep_dc |
|
event_legacy_tracepoint sep_dc |
|
||||||
|
@ -64,12 +69,21 @@ event_def: event_legacy_symbol sep_dc |
|
||||||
event_legacy_raw sep_dc
|
event_legacy_raw sep_dc
|
||||||
|
|
||||||
event_legacy_symbol:
|
event_legacy_symbol:
|
||||||
PE_VALUE_SYM
|
PE_VALUE_SYM '/' event_config '/'
|
||||||
{
|
{
|
||||||
int type = $1 >> 16;
|
int type = $1 >> 16;
|
||||||
int config = $1 & 255;
|
int config = $1 & 255;
|
||||||
|
|
||||||
ABORT_ON(parse_events_add_numeric(list, idx, type, config));
|
ABORT_ON(parse_events_add_numeric(list, idx, type, config, $3));
|
||||||
|
parse_events__free_terms($3);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
PE_VALUE_SYM sep_slash_dc
|
||||||
|
{
|
||||||
|
int type = $1 >> 16;
|
||||||
|
int config = $1 & 255;
|
||||||
|
|
||||||
|
ABORT_ON(parse_events_add_numeric(list, idx, type, config, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
event_legacy_cache:
|
event_legacy_cache:
|
||||||
|
@ -108,17 +122,85 @@ PE_NAME ':' PE_NAME
|
||||||
event_legacy_numeric:
|
event_legacy_numeric:
|
||||||
PE_VALUE ':' PE_VALUE
|
PE_VALUE ':' PE_VALUE
|
||||||
{
|
{
|
||||||
ABORT_ON(parse_events_add_numeric(list, idx, $1, $3));
|
ABORT_ON(parse_events_add_numeric(list, idx, $1, $3, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
event_legacy_raw:
|
event_legacy_raw:
|
||||||
PE_RAW
|
PE_RAW
|
||||||
{
|
{
|
||||||
ABORT_ON(parse_events_add_numeric(list, idx, PERF_TYPE_RAW, $1));
|
ABORT_ON(parse_events_add_numeric(list, idx, PERF_TYPE_RAW, $1, NULL));
|
||||||
|
}
|
||||||
|
|
||||||
|
event_config:
|
||||||
|
event_config ',' event_term
|
||||||
|
{
|
||||||
|
struct list_head *head = $1;
|
||||||
|
struct parse_events__term *term = $3;
|
||||||
|
|
||||||
|
ABORT_ON(!head);
|
||||||
|
list_add_tail(&term->list, head);
|
||||||
|
$$ = $1;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
event_term
|
||||||
|
{
|
||||||
|
struct list_head *head = malloc(sizeof(*head));
|
||||||
|
struct parse_events__term *term = $1;
|
||||||
|
|
||||||
|
ABORT_ON(!head);
|
||||||
|
INIT_LIST_HEAD(head);
|
||||||
|
list_add_tail(&term->list, head);
|
||||||
|
$$ = head;
|
||||||
|
}
|
||||||
|
|
||||||
|
event_term:
|
||||||
|
PE_NAME '=' PE_NAME
|
||||||
|
{
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
ABORT_ON(parse_events__new_term(&term, PARSE_EVENTS__TERM_TYPE_STR,
|
||||||
|
$1, $3, 0));
|
||||||
|
$$ = term;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
PE_NAME '=' PE_VALUE
|
||||||
|
{
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
ABORT_ON(parse_events__new_term(&term, PARSE_EVENTS__TERM_TYPE_NUM,
|
||||||
|
$1, NULL, $3));
|
||||||
|
$$ = term;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
PE_NAME
|
||||||
|
{
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
ABORT_ON(parse_events__new_term(&term, PARSE_EVENTS__TERM_TYPE_NUM,
|
||||||
|
$1, NULL, 1));
|
||||||
|
$$ = term;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
PE_TERM '=' PE_VALUE
|
||||||
|
{
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
ABORT_ON(parse_events__new_term(&term, $1, NULL, NULL, $3));
|
||||||
|
$$ = term;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
PE_TERM
|
||||||
|
{
|
||||||
|
struct parse_events__term *term;
|
||||||
|
|
||||||
|
ABORT_ON(parse_events__new_term(&term, $1, NULL, NULL, 1));
|
||||||
|
$$ = term;
|
||||||
}
|
}
|
||||||
|
|
||||||
sep_dc: ':' |
|
sep_dc: ':' |
|
||||||
|
|
||||||
|
sep_slash_dc: '/' | ':' |
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
void parse_events_error(struct list_head *list __used, int *idx __used,
|
void parse_events_error(struct list_head *list __used, int *idx __used,
|
||||||
|
|
Loading…
Reference in a new issue