Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.9-rc4 84 lines 1.4 kB view raw
1%parse-param {struct list_head *expr_head} 2%define parse.error verbose 3 4%{ 5 6#ifndef NDEBUG 7#define YYDEBUG 1 8#endif 9 10#include <stdio.h> 11#include <string.h> 12#include <linux/compiler.h> 13#include <linux/list.h> 14#include "bpf-filter.h" 15 16int perf_bpf_filter_lex(void); 17 18static void perf_bpf_filter_error(struct list_head *expr __maybe_unused, 19 char const *msg) 20{ 21 printf("perf_bpf_filter: %s\n", msg); 22} 23 24%} 25 26%union 27{ 28 unsigned long num; 29 struct { 30 unsigned long type; 31 int part; 32 } sample; 33 enum perf_bpf_filter_op op; 34 struct perf_bpf_filter_expr *expr; 35} 36 37%token BFT_SAMPLE BFT_OP BFT_ERROR BFT_NUM BFT_LOGICAL_OR 38%type <expr> filter_term filter_expr 39%destructor { free ($$); } <expr> 40%type <sample> BFT_SAMPLE 41%type <op> BFT_OP 42%type <num> BFT_NUM 43 44%% 45 46filter: 47filter ',' filter_term 48{ 49 list_add_tail(&$3->list, expr_head); 50} 51| 52filter_term 53{ 54 list_add_tail(&$1->list, expr_head); 55} 56 57filter_term: 58filter_term BFT_LOGICAL_OR filter_expr 59{ 60 struct perf_bpf_filter_expr *expr; 61 62 if ($1->op == PBF_OP_GROUP_BEGIN) { 63 expr = $1; 64 } else { 65 expr = perf_bpf_filter_expr__new(0, 0, PBF_OP_GROUP_BEGIN, 1); 66 list_add_tail(&$1->list, &expr->groups); 67 } 68 expr->val++; 69 list_add_tail(&$3->list, &expr->groups); 70 $$ = expr; 71} 72| 73filter_expr 74{ 75 $$ = $1; 76} 77 78filter_expr: 79BFT_SAMPLE BFT_OP BFT_NUM 80{ 81 $$ = perf_bpf_filter_expr__new($1.type, $1.part, $2, $3); 82} 83 84%%