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*4882a593Smuzhiyunint 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