162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci#include <asm/unistd.h>
362306a36Sopenharmony_ci#include <linux/bpf.h>
462306a36Sopenharmony_ci#include <unistd.h>
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef __NR_bpf
762306a36Sopenharmony_ci# if defined(__i386__)
862306a36Sopenharmony_ci#  define __NR_bpf 357
962306a36Sopenharmony_ci# elif defined(__x86_64__)
1062306a36Sopenharmony_ci#  define __NR_bpf 321
1162306a36Sopenharmony_ci# elif defined(__aarch64__)
1262306a36Sopenharmony_ci#  define __NR_bpf 280
1362306a36Sopenharmony_ci# elif defined(__sparc__)
1462306a36Sopenharmony_ci#  define __NR_bpf 349
1562306a36Sopenharmony_ci# elif defined(__s390__)
1662306a36Sopenharmony_ci#  define __NR_bpf 351
1762306a36Sopenharmony_ci# elif defined(__mips__) && defined(_ABIO32)
1862306a36Sopenharmony_ci#  define __NR_bpf 4355
1962306a36Sopenharmony_ci# elif defined(__mips__) && defined(_ABIN32)
2062306a36Sopenharmony_ci#  define __NR_bpf 6319
2162306a36Sopenharmony_ci# elif defined(__mips__) && defined(_ABI64)
2262306a36Sopenharmony_ci#  define __NR_bpf 5315
2362306a36Sopenharmony_ci# else
2462306a36Sopenharmony_ci#  error __NR_bpf not defined. libbpf does not support your arch.
2562306a36Sopenharmony_ci# endif
2662306a36Sopenharmony_ci#endif
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ciint main(void)
2962306a36Sopenharmony_ci{
3062306a36Sopenharmony_ci	union bpf_attr attr;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	/* Check fields in attr */
3362306a36Sopenharmony_ci	attr.prog_type = BPF_PROG_TYPE_KPROBE;
3462306a36Sopenharmony_ci	attr.insn_cnt = 0;
3562306a36Sopenharmony_ci	attr.insns = 0;
3662306a36Sopenharmony_ci	attr.license = 0;
3762306a36Sopenharmony_ci	attr.log_buf = 0;
3862306a36Sopenharmony_ci	attr.log_size = 0;
3962306a36Sopenharmony_ci	attr.log_level = 0;
4062306a36Sopenharmony_ci	attr.kern_version = 0;
4162306a36Sopenharmony_ci	attr.prog_flags = 0;
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	/*
4462306a36Sopenharmony_ci	 * Test existence of __NR_bpf and BPF_PROG_LOAD.
4562306a36Sopenharmony_ci	 * This call should fail if we run the testcase.
4662306a36Sopenharmony_ci	 */
4762306a36Sopenharmony_ci	return syscall(__NR_bpf, BPF_PROG_LOAD, &attr, sizeof(attr));
4862306a36Sopenharmony_ci}
49