xref: /OK3568_Linux_fs/kernel/tools/build/feature/test-bpf.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun #include <asm/unistd.h>
3*4882a593Smuzhiyun #include <linux/bpf.h>
4*4882a593Smuzhiyun #include <unistd.h>
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #ifndef __NR_bpf
7*4882a593Smuzhiyun # if defined(__i386__)
8*4882a593Smuzhiyun #  define __NR_bpf 357
9*4882a593Smuzhiyun # elif defined(__x86_64__)
10*4882a593Smuzhiyun #  define __NR_bpf 321
11*4882a593Smuzhiyun # elif defined(__aarch64__)
12*4882a593Smuzhiyun #  define __NR_bpf 280
13*4882a593Smuzhiyun # elif defined(__sparc__)
14*4882a593Smuzhiyun #  define __NR_bpf 349
15*4882a593Smuzhiyun # elif defined(__s390__)
16*4882a593Smuzhiyun #  define __NR_bpf 351
17*4882a593Smuzhiyun # else
18*4882a593Smuzhiyun #  error __NR_bpf not defined. libbpf does not support your arch.
19*4882a593Smuzhiyun # endif
20*4882a593Smuzhiyun #endif
21*4882a593Smuzhiyun 
main(void)22*4882a593Smuzhiyun int main(void)
23*4882a593Smuzhiyun {
24*4882a593Smuzhiyun 	union bpf_attr attr;
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun 	/* Check fields in attr */
27*4882a593Smuzhiyun 	attr.prog_type = BPF_PROG_TYPE_KPROBE;
28*4882a593Smuzhiyun 	attr.insn_cnt = 0;
29*4882a593Smuzhiyun 	attr.insns = 0;
30*4882a593Smuzhiyun 	attr.license = 0;
31*4882a593Smuzhiyun 	attr.log_buf = 0;
32*4882a593Smuzhiyun 	attr.log_size = 0;
33*4882a593Smuzhiyun 	attr.log_level = 0;
34*4882a593Smuzhiyun 	attr.kern_version = 0;
35*4882a593Smuzhiyun 	attr.prog_flags = 0;
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun 	/*
38*4882a593Smuzhiyun 	 * Test existence of __NR_bpf and BPF_PROG_LOAD.
39*4882a593Smuzhiyun 	 * This call should fail if we run the testcase.
40*4882a593Smuzhiyun 	 */
41*4882a593Smuzhiyun 	return syscall(__NR_bpf, BPF_PROG_LOAD, &attr, sizeof(attr));
42*4882a593Smuzhiyun }
43