Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf tools: Fix PowerPC native building

Checks BPF syscall number, turn off libbpf building on platform doesn't
correctly support sys_bpf instead of blocking compiling.

Reported-and-Tested-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1452520124-2073-7-git-send-email-wangnan0@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Wang Nan and committed by
Arnaldo Carvalho de Melo
8f9e05fb 3167eea2

+21 -3
+19 -1
tools/build/feature/test-bpf.c
··· 1 + #include <asm/unistd.h> 1 2 #include <linux/bpf.h> 3 + #include <unistd.h> 4 + 5 + #ifndef __NR_bpf 6 + # if defined(__i386__) 7 + # define __NR_bpf 357 8 + # elif defined(__x86_64__) 9 + # define __NR_bpf 321 10 + # elif defined(__aarch64__) 11 + # define __NR_bpf 280 12 + # error __NR_bpf not defined. libbpf does not support your arch. 13 + # endif 14 + #endif 2 15 3 16 int main(void) 4 17 { 5 18 union bpf_attr attr; 6 19 20 + /* Check fields in attr */ 7 21 attr.prog_type = BPF_PROG_TYPE_KPROBE; 8 22 attr.insn_cnt = 0; 9 23 attr.insns = 0; ··· 28 14 attr.kern_version = 0; 29 15 30 16 attr = attr; 31 - return 0; 17 + /* 18 + * Test existence of __NR_bpf and BPF_PROG_LOAD. 19 + * This call should fail if we run the testcase. 20 + */ 21 + return syscall(__NR_bpf, BPF_PROG_LOAD, attr, sizeof(attr)); 32 22 }
+2 -2
tools/lib/bpf/bpf.c
··· 14 14 #include "bpf.h" 15 15 16 16 /* 17 - * When building perf, unistd.h is override. Define __NR_bpf is 18 - * required to be defined. 17 + * When building perf, unistd.h is overrided. __NR_bpf is 18 + * required to be defined explicitly. 19 19 */ 20 20 #ifndef __NR_bpf 21 21 # if defined(__i386__)