lkml.org 
[lkml]   [2013]   [May]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/8] perf tools: Move start conditions to start of the flex file
    Date
    Moving start conditions to start of the flex file so it's clear
    what the INITIAL condition rules are.

    Plus adding default rule for INITIAL condition. This prevents
    default space to be printed for events like:

    $ ./perf stat -e "cycles " kill 2>/dev/null
    $
    ^^^^^^^^

    Signed-off-by: Jiri Olsa <jolsa@redhat.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Andi Kleen <andi@firstfloor.org>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Ulrich Drepper <drepper@gmail.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Stephane Eranian <eranian@google.com>
    ---
    tools/perf/util/parse-events.l | 63 +++++++++++++++++++++---------------------
    1 file changed, 32 insertions(+), 31 deletions(-)

    diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
    index e9d1134..5b4ef52 100644
    --- a/tools/perf/util/parse-events.l
    +++ b/tools/perf/util/parse-events.l
    @@ -125,6 +125,37 @@ modifier_bp [rwx]{1,3}

    }

    +<config>{
    +config { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG); }
    +config1 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG1); }
    +config2 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG2); }
    +name { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NAME); }
    +period { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); }
    +branch_type { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); }
    +, { return ','; }
    +"/" { BEGIN(INITIAL); return '/'; }
    +{name_minus} { return str(yyscanner, PE_NAME); }
    +}
    +
    +<mem>{
    +{modifier_bp} { return str(yyscanner, PE_MODIFIER_BP); }
    +: { return ':'; }
    +{num_dec} { return value(yyscanner, 10); }
    +{num_hex} { return value(yyscanner, 16); }
    + /*
    + * We need to separate 'mem:' scanner part, in order to get specific
    + * modifier bits parsed out. Otherwise we would need to handle PE_NAME
    + * and we'd need to parse it manually. During the escape from <mem>
    + * state we need to put the escaping char back, so we dont miss it.
    + */
    +. { unput(*yytext); BEGIN(INITIAL); }
    + /*
    + * We destroy the scanner after reaching EOF,
    + * but anyway just to be sure get back to INIT state.
    + */
    +<<EOF>> { BEGIN(INITIAL); }
    +}
    +
    cpu-cycles|cycles { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_CPU_CYCLES); }
    stalled-cycles-frontend|idle-cycles-frontend { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND); }
    stalled-cycles-backend|idle-cycles-backend { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_BACKEND); }
    @@ -160,18 +191,6 @@ speculative-read|speculative-load |
    refs|Reference|ops|access |
    misses|miss { return str(yyscanner, PE_NAME_CACHE_OP_RESULT); }

    -<config>{
    -config { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG); }
    -config1 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG1); }
    -config2 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG2); }
    -name { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NAME); }
    -period { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); }
    -branch_type { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); }
    -, { return ','; }
    -"/" { BEGIN(INITIAL); return '/'; }
    -{name_minus} { return str(yyscanner, PE_NAME); }
    -}
    -
    mem: { BEGIN(mem); return PE_PREFIX_MEM; }
    r{num_raw_hex} { return raw(yyscanner); }
    {num_dec} { return value(yyscanner, 10); }
    @@ -187,25 +206,7 @@ r{num_raw_hex} { return raw(yyscanner); }
    "}" { return '}'; }
    = { return '='; }
    \n { }
    -
    -<mem>{
    -{modifier_bp} { return str(yyscanner, PE_MODIFIER_BP); }
    -: { return ':'; }
    -{num_dec} { return value(yyscanner, 10); }
    -{num_hex} { return value(yyscanner, 16); }
    - /*
    - * We need to separate 'mem:' scanner part, in order to get specific
    - * modifier bits parsed out. Otherwise we would need to handle PE_NAME
    - * and we'd need to parse it manually. During the escape from <mem>
    - * state we need to put the escaping char back, so we dont miss it.
    - */
    -. { unput(*yytext); BEGIN(INITIAL); }
    - /*
    - * We destroy the scanner after reaching EOF,
    - * but anyway just to be sure get back to INIT state.
    - */
    -<<EOF>> { BEGIN(INITIAL); }
    -}
    +. { }

    %%

    --
    1.7.11.7


    \
     
     \ /
      Last update: 2013-05-01 18:21    [W:4.220 / U:1.872 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site