xref: /openbmc/linux/tools/build/feature/test-bpf.c (revision b2441318)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
28f9e05fbSWang Nan #include <asm/unistd.h>
31b76c13eSWang Nan #include <linux/bpf.h>
48f9e05fbSWang Nan #include <unistd.h>
58f9e05fbSWang Nan 
68f9e05fbSWang Nan #ifndef __NR_bpf
78f9e05fbSWang Nan # if defined(__i386__)
88f9e05fbSWang Nan #  define __NR_bpf 357
98f9e05fbSWang Nan # elif defined(__x86_64__)
108f9e05fbSWang Nan #  define __NR_bpf 321
118f9e05fbSWang Nan # elif defined(__aarch64__)
128f9e05fbSWang Nan #  define __NR_bpf 280
13b0c47807SDavid S. Miller # elif defined(__sparc__)
14b0c47807SDavid S. Miller #  define __NR_bpf 349
15bad1926dSDaniel Borkmann # elif defined(__s390__)
16bad1926dSDaniel Borkmann #  define __NR_bpf 351
17b0c47807SDavid S. Miller # else
188f9e05fbSWang Nan #  error __NR_bpf not defined. libbpf does not support your arch.
198f9e05fbSWang Nan # endif
208f9e05fbSWang Nan #endif
211b76c13eSWang Nan 
221b76c13eSWang Nan int main(void)
231b76c13eSWang Nan {
241b76c13eSWang Nan 	union bpf_attr attr;
251b76c13eSWang Nan 
268f9e05fbSWang Nan 	/* Check fields in attr */
271b76c13eSWang Nan 	attr.prog_type = BPF_PROG_TYPE_KPROBE;
281b76c13eSWang Nan 	attr.insn_cnt = 0;
291b76c13eSWang Nan 	attr.insns = 0;
301b76c13eSWang Nan 	attr.license = 0;
311b76c13eSWang Nan 	attr.log_buf = 0;
321b76c13eSWang Nan 	attr.log_size = 0;
331b76c13eSWang Nan 	attr.log_level = 0;
341b76c13eSWang Nan 	attr.kern_version = 0;
35e07b98d9SDavid S. Miller 	attr.prog_flags = 0;
361b76c13eSWang Nan 
378f9e05fbSWang Nan 	/*
388f9e05fbSWang Nan 	 * Test existence of __NR_bpf and BPF_PROG_LOAD.
398f9e05fbSWang Nan 	 * This call should fail if we run the testcase.
408f9e05fbSWang Nan 	 */
411a71476eSFlorian Fainelli 	return syscall(__NR_bpf, BPF_PROG_LOAD, &attr, sizeof(attr));
421b76c13eSWang Nan }
43