diff options
author | Wang Nan <wangnan0@huawei.com> | 2016-01-11 08:47:57 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-01-11 17:22:20 -0500 |
commit | 8f9e05fb298f16c0cda2e7e78b603331a79f9c10 (patch) | |
tree | 4da7ca69cedbe6aa09a1d17fb5248ecd482b94a2 | |
parent | 3167eea27b27b29d375ee6b34dd83035c04d5da8 (diff) |
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>
-rw-r--r-- | tools/build/feature/test-bpf.c | 20 | ||||
-rw-r--r-- | tools/lib/bpf/bpf.c | 4 |
2 files changed, 21 insertions, 3 deletions
diff --git a/tools/build/feature/test-bpf.c b/tools/build/feature/test-bpf.c index 062bac811af9..b389026839b9 100644 --- a/tools/build/feature/test-bpf.c +++ b/tools/build/feature/test-bpf.c | |||
@@ -1,9 +1,23 @@ | |||
1 | #include <asm/unistd.h> | ||
1 | #include <linux/bpf.h> | 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 | int main(void) | 16 | int main(void) |
4 | { | 17 | { |
5 | union bpf_attr attr; | 18 | union bpf_attr attr; |
6 | 19 | ||
20 | /* Check fields in attr */ | ||
7 | attr.prog_type = BPF_PROG_TYPE_KPROBE; | 21 | attr.prog_type = BPF_PROG_TYPE_KPROBE; |
8 | attr.insn_cnt = 0; | 22 | attr.insn_cnt = 0; |
9 | attr.insns = 0; | 23 | attr.insns = 0; |
@@ -14,5 +28,9 @@ int main(void) | |||
14 | attr.kern_version = 0; | 28 | attr.kern_version = 0; |
15 | 29 | ||
16 | attr = attr; | 30 | attr = attr; |
17 | return 0; | 31 | /* |
32 | * Test existence of __NR_bpf and BPF_PROG_LOAD. | ||
33 | * This call should fail if we run the testcase. | ||
34 | */ | ||
35 | return syscall(__NR_bpf, BPF_PROG_LOAD, attr, sizeof(attr)); | ||
18 | } | 36 | } |
diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c index 5bdc6eab6852..1f91cc941b7c 100644 --- a/tools/lib/bpf/bpf.c +++ b/tools/lib/bpf/bpf.c | |||
@@ -14,8 +14,8 @@ | |||
14 | #include "bpf.h" | 14 | #include "bpf.h" |
15 | 15 | ||
16 | /* | 16 | /* |
17 | * When building perf, unistd.h is override. Define __NR_bpf is | 17 | * When building perf, unistd.h is overrided. __NR_bpf is |
18 | * required to be defined. | 18 | * required to be defined explicitly. |
19 | */ | 19 | */ |
20 | #ifndef __NR_bpf | 20 | #ifndef __NR_bpf |
21 | # if defined(__i386__) | 21 | # if defined(__i386__) |