From 89812fc81f8d62d70433a8ff63d26819f372e8ec Mon Sep 17 00:00:00 2001 From: Jiri Olsa Date: Thu, 15 Mar 2012 20:09:15 +0100 Subject: perf tools: Add parser generator for events parsing Changing event parsing to use flex/bison parse generator. The event syntax stays as it was. grammar description: events: events ',' event | event event: event_def PE_MODIFIER_EVENT | event_def event_def: event_legacy_symbol sep_dc | event_legacy_cache sep_dc | event_legacy_breakpoint sep_dc | event_legacy_tracepoint sep_dc | event_legacy_numeric sep_dc | event_legacy_raw sep_dc event_legacy_symbol: PE_NAME_SYM event_legacy_cache: PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_RESULT '-' PE_NAME_CACHE_OP_RESULT | PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_RESULT | PE_NAME_CACHE_TYPE event_legacy_raw: PE_SEP_RAW PE_VALUE event_legacy_numeric: PE_VALUE ':' PE_VALUE event_legacy_breakpoint: PE_SEP_BP ':' PE_VALUE ':' PE_MODIFIER_BP event_breakpoint_type: PE_MODIFIER_BPTYPE | empty PE_NAME_SYM: cpu-cycles|cycles | stalled-cycles-frontend|idle-cycles-frontend | stalled-cycles-backend|idle-cycles-backend | instructions | cache-references | cache-misses | branch-instructions|branches | branch-misses | bus-cycles | cpu-clock | task-clock | page-faults|faults | minor-faults | major-faults | context-switches|cs | cpu-migrations|migrations | alignment-faults | emulation-faults PE_NAME_CACHE_TYPE: L1-dcache|l1-d|l1d|L1-data | L1-icache|l1-i|l1i|L1-instruction | LLC|L2 | dTLB|d-tlb|Data-TLB | iTLB|i-tlb|Instruction-TLB | branch|branches|bpu|btb|bpc | node PE_NAME_CACHE_OP_RESULT: load|loads|read | store|stores|write | prefetch|prefetches | speculative-read|speculative-load | refs|Reference|ops|access | misses|miss PE_MODIFIER_EVENT: [ukhp]{0,5} PE_MODIFIER_BP: [rwx] PE_SEP_BP: 'mem' PE_SEP_RAW: 'r' sep_dc: ':' | Added flex/bison files for event grammar parsing. The generated parser is part of the patch. Added makefile rule 'event-parser' to generate the parser code out of the bison/flex sources. Acked-by: Peter Zijlstra Signed-off-by: Jiri Olsa Link: http://lkml.kernel.org/n/tip-u4pfig5waq3ll2bfcdex8fgi@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/parse-events-bison.h | 79 ++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 tools/perf/util/parse-events-bison.h (limited to 'tools/perf/util/parse-events-bison.h') diff --git a/tools/perf/util/parse-events-bison.h b/tools/perf/util/parse-events-bison.h new file mode 100644 index 000000000000..097a6323e6a9 --- /dev/null +++ b/tools/perf/util/parse-events-bison.h @@ -0,0 +1,79 @@ +/* A Bison parser, made by GNU Bison 2.4.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2009, 2010 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + PE_VALUE = 258, + PE_VALUE_SYM = 259, + PE_RAW = 260, + PE_NAME = 261, + PE_MODIFIER_EVENT = 262, + PE_MODIFIER_BP = 263, + PE_NAME_CACHE_TYPE = 264, + PE_NAME_CACHE_OP_RESULT = 265, + PE_PREFIX_MEM = 266, + PE_PREFIX_RAW = 267, + PE_ERROR = 268 + }; +#endif + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +{ + +/* Line 1685 of yacc.c */ +#line 42 "util/parse-events.y" + + char *str; + unsigned long num; + + + +/* Line 1685 of yacc.c */ +#line 71 "util/parse-events-bison.h" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +#endif + +extern YYSTYPE parse_events_lval; + + -- cgit From 8f707d843c2f4023490a873dbc182f632a3a5906 Mon Sep 17 00:00:00 2001 From: Jiri Olsa Date: Thu, 15 Mar 2012 20:09:16 +0100 Subject: 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 Signed-off-by: Jiri Olsa Link: http://lkml.kernel.org/n/tip-mgkavww9790jbt2jdkooyv4q@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/parse-events-bison.h | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'tools/perf/util/parse-events-bison.h') diff --git a/tools/perf/util/parse-events-bison.h b/tools/perf/util/parse-events-bison.h index 097a6323e6a9..c58b76584f92 100644 --- a/tools/perf/util/parse-events-bison.h +++ b/tools/perf/util/parse-events-bison.h @@ -41,14 +41,15 @@ PE_VALUE = 258, PE_VALUE_SYM = 259, PE_RAW = 260, - PE_NAME = 261, - PE_MODIFIER_EVENT = 262, - PE_MODIFIER_BP = 263, - PE_NAME_CACHE_TYPE = 264, - PE_NAME_CACHE_OP_RESULT = 265, - PE_PREFIX_MEM = 266, - PE_PREFIX_RAW = 267, - PE_ERROR = 268 + PE_TERM = 261, + PE_NAME = 262, + PE_MODIFIER_EVENT = 263, + PE_MODIFIER_BP = 264, + PE_NAME_CACHE_TYPE = 265, + PE_NAME_CACHE_OP_RESULT = 266, + PE_PREFIX_MEM = 267, + PE_PREFIX_RAW = 268, + PE_ERROR = 269 }; #endif @@ -59,15 +60,17 @@ typedef union YYSTYPE { /* Line 1685 of yacc.c */ -#line 42 "util/parse-events.y" +#line 45 "util/parse-events.y" char *str; unsigned long num; + struct list_head *head; + struct parse_events__term *term; /* Line 1685 of yacc.c */ -#line 71 "util/parse-events-bison.h" +#line 74 "util/parse-events-bison.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ -- cgit From 5d7be90ed5cfb5dd3c9ab726d7daa91b86b81747 Mon Sep 17 00:00:00 2001 From: Jiri Olsa Date: Tue, 20 Mar 2012 19:15:40 +0100 Subject: perf tools: Fix modifier to be applied on correct events The event modifier needs to be applied only on the event definition it is attached to. The current state is that in case of multiple events definition (in single '-e' option, separated by ',') all will get modifier of the last one. Fixing this by adding separated list for each event definition, so the modifier is applied only to proper event(s). Added automated test to catch this, plus some other modifier tests. Signed-off-by: Jiri Olsa Cc: Corey Ashford Cc: Frederic Weisbecker Cc: Ingo Molnar Cc: Paul Mackerras Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/1332267341-26338-3-git-send-email-jolsa@redhat.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/parse-events-bison.h | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'tools/perf/util/parse-events-bison.h') diff --git a/tools/perf/util/parse-events-bison.h b/tools/perf/util/parse-events-bison.h index c58b76584f92..0be3e5ae2fed 100644 --- a/tools/perf/util/parse-events-bison.h +++ b/tools/perf/util/parse-events-bison.h @@ -1,9 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.4.3. */ +/* A Bison parser, made by GNU Bison 2.5. */ -/* Skeleton interface for Bison's Yacc-like parsers in C +/* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -59,8 +58,8 @@ typedef union YYSTYPE { -/* Line 1685 of yacc.c */ -#line 45 "util/parse-events.y" +/* Line 2068 of yacc.c */ +#line 46 "util/parse-events.y" char *str; unsigned long num; @@ -69,8 +68,8 @@ typedef union YYSTYPE -/* Line 1685 of yacc.c */ -#line 74 "util/parse-events-bison.h" +/* Line 2068 of yacc.c */ +#line 73 "util/parse-events-bison.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ -- cgit