brintos

brintos / linux-shallow public Read only

0
0
Text · 1.3 KiB · ec0c595 Raw
57 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright (C) 2021. Huawei Technologies Co., Ltd */3#include "vmlinux.h"4#include <bpf/bpf_helpers.h>5#include <bpf/bpf_tracing.h>6 7char _license[] SEC("license") = "GPL";8 9SEC("struct_ops/test_1")10int BPF_PROG(test_1, struct bpf_dummy_ops_state *state)11{12	int ret;13 14	/* Check that 'state' nullable status is detected correctly.15	 * If 'state' argument would be assumed non-null by verifier16	 * the code below would be deleted as dead (which it shouldn't).17	 * Hide it from the compiler behind 'asm' block to avoid18	 * unnecessary optimizations.19	 */20	asm volatile (21		"if %[state] != 0 goto +2;"22		"r0 = 0xf2f3f4f5;"23		"exit;"24	::[state]"p"(state));25 26	ret = state->val;27	state->val = 0x5a;28	return ret;29}30 31__u64 test_2_args[5];32 33SEC("struct_ops/test_2")34int BPF_PROG(test_2, struct bpf_dummy_ops_state *state, int a1, unsigned short a2,35	     char a3, unsigned long a4)36{37	test_2_args[0] = state->val;38	test_2_args[1] = a1;39	test_2_args[2] = a2;40	test_2_args[3] = a3;41	test_2_args[4] = a4;42	return 0;43}44 45SEC("struct_ops.s/test_sleepable")46int BPF_PROG(test_sleepable, struct bpf_dummy_ops_state *state)47{48	return 0;49}50 51SEC(".struct_ops")52struct bpf_dummy_ops dummy_1 = {53	.test_1 = (void *)test_1,54	.test_2 = (void *)test_2,55	.test_sleepable = (void *)test_sleepable,56};57