brintos

brintos / linux-shallow public Read only

0
0
Text · 5.4 KiB · f313404 Raw
180 lines · plain
1%option prefix="perf_bpf_filter_"2%option noyywrap3 4%{5#include <stdio.h>6#include <stdlib.h>7#include <linux/perf_event.h>8 9#include "bpf-filter.h"10#include "bpf-filter-bison.h"11 12extern int perf_bpf_filter_needs_path;13 14static int sample(enum perf_bpf_filter_term term)15{16	perf_bpf_filter_needs_path = 0;17	perf_bpf_filter_lval.sample.term = term;18	perf_bpf_filter_lval.sample.part = 0;19	return BFT_SAMPLE;20}21 22static int sample_part(enum perf_bpf_filter_term term, int part)23{24	perf_bpf_filter_needs_path = 0;25	perf_bpf_filter_lval.sample.term = term;26	perf_bpf_filter_lval.sample.part = part;27	return BFT_SAMPLE;28}29 30static int sample_path(enum perf_bpf_filter_term term)31{32	perf_bpf_filter_needs_path = 1;33	perf_bpf_filter_lval.sample.term = term;34	perf_bpf_filter_lval.sample.part = 0;35	return BFT_SAMPLE_PATH;36}37 38static int operator(enum perf_bpf_filter_op op)39{40	perf_bpf_filter_lval.op = op;41	return BFT_OP;42}43 44static int value(int base)45{46	long num;47 48	errno = 0;49	num = strtoul(perf_bpf_filter_text, NULL, base);50	if (errno)51		return BFT_ERROR;52 53	perf_bpf_filter_lval.num = num;54	return BFT_NUM;55}56 57static int constant(int val)58{59	perf_bpf_filter_lval.num = val;60	return BFT_NUM;61}62 63static int path_or_error(void)64{65	if (!perf_bpf_filter_needs_path) {66		printf("perf_bpf_filter: Error: Unexpected item: %s\n",67			perf_bpf_filter_text);68		return BFT_ERROR;69	}70	perf_bpf_filter_lval.path = perf_bpf_filter_text;71	return BFT_PATH;72}73 74%}75 76num_dec		[0-9]+77num_hex		0[Xx][0-9a-fA-F]+78space		[ \t]+79path		[^ \t\n]+80ident		[_a-zA-Z][_a-zA-Z0-9]+81 82%%83 84{num_dec}	{ return value(10); }85{num_hex}	{ return value(16); }86{space}		{ }87 88ip		{ return sample(PBF_TERM_IP); }89id		{ return sample(PBF_TERM_ID); }90tid		{ return sample(PBF_TERM_TID); }91pid		{ return sample_part(PBF_TERM_TID, 1); }92cpu		{ return sample(PBF_TERM_CPU); }93time		{ return sample(PBF_TERM_TIME); }94addr		{ return sample(PBF_TERM_ADDR); }95period		{ return sample(PBF_TERM_PERIOD); }96txn		{ return sample(PBF_TERM_TRANSACTION); }97weight		{ return sample(PBF_TERM_WEIGHT); }98weight1		{ return sample_part(PBF_TERM_WEIGHT_STRUCT, 1); }99weight2		{ return sample_part(PBF_TERM_WEIGHT_STRUCT, 2); }100weight3		{ return sample_part(PBF_TERM_WEIGHT_STRUCT, 3); }101ins_lat		{ return sample_part(PBF_TERM_WEIGHT_STRUCT, 2); } /* alias for weight2 */102p_stage_cyc	{ return sample_part(PBF_TERM_WEIGHT_STRUCT, 3); } /* alias for weight3 */103retire_lat	{ return sample_part(PBF_TERM_WEIGHT_STRUCT, 3); } /* alias for weight3 */104phys_addr	{ return sample(PBF_TERM_PHYS_ADDR); }105code_pgsz	{ return sample(PBF_TERM_CODE_PAGE_SIZE); }106data_pgsz	{ return sample(PBF_TERM_DATA_PAGE_SIZE); }107mem_op		{ return sample_part(PBF_TERM_DATA_SRC, 1); }108mem_lvlnum	{ return sample_part(PBF_TERM_DATA_SRC, 2); }109mem_lvl		{ return sample_part(PBF_TERM_DATA_SRC, 2); } /* alias for mem_lvlnum */110mem_snoop	{ return sample_part(PBF_TERM_DATA_SRC, 3); } /* include snoopx */111mem_remote	{ return sample_part(PBF_TERM_DATA_SRC, 4); }112mem_lock	{ return sample_part(PBF_TERM_DATA_SRC, 5); }113mem_dtlb	{ return sample_part(PBF_TERM_DATA_SRC, 6); }114mem_blk		{ return sample_part(PBF_TERM_DATA_SRC, 7); }115mem_hops	{ return sample_part(PBF_TERM_DATA_SRC, 8); }116uid		{ return sample(PBF_TERM_UID); }117gid		{ return sample(PBF_TERM_GID); }118cgroup		{ return sample_path(PBF_TERM_CGROUP); }119 120"=="		{ return operator(PBF_OP_EQ); }121"!="		{ return operator(PBF_OP_NEQ); }122">"		{ return operator(PBF_OP_GT); }123"<"		{ return operator(PBF_OP_LT); }124">="		{ return operator(PBF_OP_GE); }125"<="		{ return operator(PBF_OP_LE); }126"&"		{ return operator(PBF_OP_AND); }127 128na		{ return constant(PERF_MEM_OP_NA); }129load		{ return constant(PERF_MEM_OP_LOAD); }130store		{ return constant(PERF_MEM_OP_STORE); }131pfetch		{ return constant(PERF_MEM_OP_PFETCH); }132exec		{ return constant(PERF_MEM_OP_EXEC); }133 134l1		{ return constant(PERF_MEM_LVLNUM_L1); }135l2		{ return constant(PERF_MEM_LVLNUM_L2); }136l3		{ return constant(PERF_MEM_LVLNUM_L3); }137l4		{ return constant(PERF_MEM_LVLNUM_L4); }138cxl		{ return constant(PERF_MEM_LVLNUM_CXL); }139io		{ return constant(PERF_MEM_LVLNUM_IO); }140any_cache	{ return constant(PERF_MEM_LVLNUM_ANY_CACHE); }141lfb		{ return constant(PERF_MEM_LVLNUM_LFB); }142ram		{ return constant(PERF_MEM_LVLNUM_RAM); }143pmem		{ return constant(PERF_MEM_LVLNUM_PMEM); }144 145none		{ return constant(PERF_MEM_SNOOP_NONE); }146hit		{ return constant(PERF_MEM_SNOOP_HIT); }147miss		{ return constant(PERF_MEM_SNOOP_MISS); }148hitm		{ return constant(PERF_MEM_SNOOP_HITM); }149fwd		{ return constant(PERF_MEM_SNOOPX_FWD); }150peer		{ return constant(PERF_MEM_SNOOPX_PEER); }151 152remote		{ return constant(PERF_MEM_REMOTE_REMOTE); }153 154locked		{ return constant(PERF_MEM_LOCK_LOCKED); }155 156l1_hit		{ return constant(PERF_MEM_TLB_L1 | PERF_MEM_TLB_HIT); }157l1_miss		{ return constant(PERF_MEM_TLB_L1 | PERF_MEM_TLB_MISS); }158l2_hit		{ return constant(PERF_MEM_TLB_L2 | PERF_MEM_TLB_HIT); }159l2_miss		{ return constant(PERF_MEM_TLB_L2 | PERF_MEM_TLB_MISS); }160any_hit		{ return constant(PERF_MEM_TLB_HIT); }161any_miss	{ return constant(PERF_MEM_TLB_MISS); }162walk		{ return constant(PERF_MEM_TLB_WK); }163os		{ return constant(PERF_MEM_TLB_OS); }164fault		{ return constant(PERF_MEM_TLB_OS); } /* alias for os */165 166by_data		{ return constant(PERF_MEM_BLK_DATA); }167by_addr		{ return constant(PERF_MEM_BLK_ADDR); }168 169hops0		{ return constant(PERF_MEM_HOPS_0); }170hops1		{ return constant(PERF_MEM_HOPS_1); }171hops2		{ return constant(PERF_MEM_HOPS_2); }172hops3		{ return constant(PERF_MEM_HOPS_3); }173 174","		{ return ','; }175"||"		{ return BFT_LOGICAL_OR; }176 177{path}		{ return path_or_error(); }178 179%%180