linux/tools/perf/util/pmu.y
<<
>>
Prefs
   1
   2%name-prefix "perf_pmu_"
   3%parse-param {struct list_head *format}
   4%parse-param {char *name}
   5
   6%{
   7
   8#include <linux/compiler.h>
   9#include <linux/list.h>
  10#include <linux/bitmap.h>
  11#include <string.h>
  12#include "pmu.h"
  13
  14extern int perf_pmu_lex (void);
  15
  16#define ABORT_ON(val) \
  17do { \
  18        if (val) \
  19                YYABORT; \
  20} while (0)
  21
  22%}
  23
  24%token PP_CONFIG PP_CONFIG1 PP_CONFIG2
  25%token PP_VALUE PP_ERROR
  26%type <num> PP_VALUE
  27%type <bits> bit_term
  28%type <bits> bits
  29
  30%union
  31{
  32        unsigned long num;
  33        DECLARE_BITMAP(bits, PERF_PMU_FORMAT_BITS);
  34}
  35
  36%%
  37
  38format:
  39format format_term
  40|
  41format_term
  42
  43format_term:
  44PP_CONFIG ':' bits
  45{
  46        ABORT_ON(perf_pmu__new_format(format, name,
  47                                      PERF_PMU_FORMAT_VALUE_CONFIG,
  48                                      $3));
  49}
  50|
  51PP_CONFIG1 ':' bits
  52{
  53        ABORT_ON(perf_pmu__new_format(format, name,
  54                                      PERF_PMU_FORMAT_VALUE_CONFIG1,
  55                                      $3));
  56}
  57|
  58PP_CONFIG2 ':' bits
  59{
  60        ABORT_ON(perf_pmu__new_format(format, name,
  61                                      PERF_PMU_FORMAT_VALUE_CONFIG2,
  62                                      $3));
  63}
  64
  65bits:
  66bits ',' bit_term
  67{
  68        bitmap_or($$, $1, $3, 64);
  69}
  70|
  71bit_term
  72{
  73        memcpy($$, $1, sizeof($1));
  74}
  75
  76bit_term:
  77PP_VALUE '-' PP_VALUE
  78{
  79        perf_pmu__set_format($$, $1, $3);
  80}
  81|
  82PP_VALUE
  83{
  84        perf_pmu__set_format($$, $1, 0);
  85}
  86
  87%%
  88
  89void perf_pmu_error(struct list_head *list __maybe_unused,
  90                    char *name __maybe_unused,
  91                    char const *msg __maybe_unused)
  92{
  93}
  94