Merge tag 'x86_urgent_for_v5.9_rc6' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / tools / perf / util / parse-events.l
index baa48f2..3ca5fd2 100644 (file)
@@ -41,14 +41,6 @@ static int value(yyscan_t scanner, int base)
        return __value(yylval, text, base, PE_VALUE);
 }
 
-static int raw(yyscan_t scanner)
-{
-       YYSTYPE *yylval = parse_events_get_lval(scanner);
-       char *text = parse_events_get_text(scanner);
-
-       return __value(yylval, text + 1, 16, PE_RAW);
-}
-
 static int str(yyscan_t scanner, int token)
 {
        YYSTYPE *yylval = parse_events_get_lval(scanner);
@@ -72,6 +64,17 @@ static int str(yyscan_t scanner, int token)
        return token;
 }
 
+static int raw(yyscan_t scanner)
+{
+       YYSTYPE *yylval = parse_events_get_lval(scanner);
+       char *text = parse_events_get_text(scanner);
+
+       if (perf_pmu__parse_check(text) == PMU_EVENT_SYMBOL)
+               return str(scanner, PE_NAME);
+
+       return __value(yylval, text + 1, 16, PE_RAW);
+}
+
 static bool isbpf_suffix(char *text)
 {
        int len = strlen(text);
@@ -129,12 +132,16 @@ do {                                                              \
        yyless(0);                                              \
 } while (0)
 
-static int pmu_str_check(yyscan_t scanner)
+static int pmu_str_check(yyscan_t scanner, struct parse_events_state *parse_state)
 {
        YYSTYPE *yylval = parse_events_get_lval(scanner);
        char *text = parse_events_get_text(scanner);
 
        yylval->str = strdup(text);
+
+       if (parse_state->fake_pmu)
+               return PE_PMU_EVENT_FAKE;
+
        switch (perf_pmu__parse_check(text)) {
                case PMU_EVENT_SYMBOL_PREFIX:
                        return PE_PMU_EVENT_PRE;
@@ -209,10 +216,10 @@ modifier_bp       [rwx]{1,3}
 %%
 
 %{
-       {
-               int start_token;
+       struct parse_events_state *_parse_state = parse_events_get_extra(yyscanner);
 
-               start_token = parse_events_get_extra(yyscanner);
+       {
+               int start_token = _parse_state->stoken;
 
                if (start_token == PE_START_TERMS)
                        BEGIN(config);
@@ -220,7 +227,7 @@ modifier_bp [rwx]{1,3}
                        BEGIN(event);
 
                if (start_token) {
-                       parse_events_set_extra(NULL, yyscanner);
+                       _parse_state->stoken = 0;
                        /*
                         * The flex parser does not init locations variable
                         * via the scan_string interface, so we need do the
@@ -252,7 +259,9 @@ modifier_bp [rwx]{1,3}
                        BEGIN(INITIAL);
                        REWIND(0);
                }
-
+,              {
+                       return ',';
+               }
 }
 
 <array>{
@@ -286,6 +295,8 @@ no-overwrite                { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NOOVERWRITE); }
 percore                        { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_PERCORE); }
 aux-output             { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT); }
 aux-sample-size                { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE); }
+r{num_raw_hex}         { return raw(yyscanner); }
+r0x{num_raw_hex}       { return raw(yyscanner); }
 ,                      { return ','; }
 "/"                    { BEGIN(INITIAL); return '/'; }
 {name_minus}           { return str(yyscanner, PE_NAME); }
@@ -373,7 +384,7 @@ r{num_raw_hex}              { return raw(yyscanner); }
 {modifier_event}       { return str(yyscanner, PE_MODIFIER_EVENT); }
 {bpf_object}           { if (!isbpf(yyscanner)) { USER_REJECT }; return str(yyscanner, PE_BPF_OBJECT); }
 {bpf_source}           { if (!isbpf(yyscanner)) { USER_REJECT }; return str(yyscanner, PE_BPF_SOURCE); }
-{name}                 { return pmu_str_check(yyscanner); }
+{name}                 { return pmu_str_check(yyscanner, _parse_state); }
 {name_tag}             { return str(yyscanner, PE_NAME); }
 "/"                    { BEGIN(config); return '/'; }
 -                      { return '-'; }