Re: more bpf samples build breakage...
From: David Miller <davem@davemloft.net>
Date: 2017-05-01 19:44:57
Subsystem:
bpf [general] (safe dynamic programs and tools), bpf [selftests] (test runners & infrastructure), kernel selftest framework, the rest · Maintainers:
Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko, Eduard Zingerman, Kumar Kartikeya Dwivedi, Shuah Khan, Shuah Khan, Linus Torvalds
From: David Miller <davem@davemloft.net> Date: Mon, 01 May 2017 15:30:05 -0400 (EDT)
Inlcuding bpf_util.h into test_pkt_access.c et al. broke the build even
more so than it already is on sparc.
The problem is we end up including all the stdio.h bits and eventually
hit things like:
In file included from /usr/include/stdio.h:933:
/usr/include/bits/stdio-ldbl.h:28:20: error: cannot apply asm label to function after its first use
__LDBL_REDIR_DECL (vfprintf)
~~~~~~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/sys/cdefs.h:373:26: note: expanded from macro '__LDBL_REDIR_DECL'
extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name));
So please let's put CLANG compiled helpers into header files
specifically meant to be included by CLANG compiled BPF programs
rather than the host build environment.I'm pushing the following quick fix for this for now:
From bc1bafbbe9b3558d7789ff151ef4f185b6ad21f3 Mon Sep 17 00:00:00 2001
From: "David S. Miller" <davem@davemloft.net> Date: Mon, 1 May 2017 12:43:49 -0700 Subject: [PATCH] bpf: Move endianness BPF helpers out of bpf_util.h We do not want to include things like stdio.h and friends into eBPF program builds. bpf_util.h is for host compiled programs, so eBPF C-code helpers don't really belong there. Add a new bpf_endian.h as a quick fix for this for now. Signed-off-by: David S. Miller <davem@davemloft.net> --- tools/testing/selftests/bpf/bpf_endian.h | 23 +++++++++++++++++++++++ tools/testing/selftests/bpf/bpf_util.h | 19 ------------------- tools/testing/selftests/bpf/test_l4lb.c | 2 +- tools/testing/selftests/bpf/test_pkt_access.c | 2 +- 4 files changed, 25 insertions(+), 21 deletions(-) create mode 100644 tools/testing/selftests/bpf/bpf_endian.h
diff --git a/tools/testing/selftests/bpf/bpf_endian.h b/tools/testing/selftests/bpf/bpf_endian.h
new file mode 100644
index 0000000..19d0604
--- /dev/null
+++ b/tools/testing/selftests/bpf/bpf_endian.h@@ -0,0 +1,23 @@ +#ifndef __BPF_ENDIAN__ +#define __BPF_ENDIAN__ + +#include <asm/byteorder.h> + +#if __BYTE_ORDER == __LITTLE_ENDIAN +# define __bpf_ntohs(x) __builtin_bswap16(x) +# define __bpf_htons(x) __builtin_bswap16(x) +#elif __BYTE_ORDER == __BIG_ENDIAN +# define __bpf_ntohs(x) (x) +# define __bpf_htons(x) (x) +#else +# error "Fix your __BYTE_ORDER?!" +#endif + +#define bpf_htons(x) \ + (__builtin_constant_p(x) ? \ + __constant_htons(x) : __bpf_htons(x)) +#define bpf_ntohs(x) \ + (__builtin_constant_p(x) ? \ + __constant_ntohs(x) : __bpf_ntohs(x)) + +#endif
diff --git a/tools/testing/selftests/bpf/bpf_util.h b/tools/testing/selftests/bpf/bpf_util.h
index 369e7d7..20ecbaa 100644
--- a/tools/testing/selftests/bpf/bpf_util.h
+++ b/tools/testing/selftests/bpf/bpf_util.h@@ -6,25 +6,6 @@ #include <string.h> #include <errno.h> -#include <asm/byteorder.h> - -#if __BYTE_ORDER == __LITTLE_ENDIAN -# define __bpf_ntohs(x) __builtin_bswap16(x) -# define __bpf_htons(x) __builtin_bswap16(x) -#elif __BYTE_ORDER == __BIG_ENDIAN -# define __bpf_ntohs(x) (x) -# define __bpf_htons(x) (x) -#else -# error "Fix your __BYTE_ORDER?!" -#endif - -#define bpf_htons(x) \ - (__builtin_constant_p(x) ? \ - __constant_htons(x) : __bpf_htons(x)) -#define bpf_ntohs(x) \ - (__builtin_constant_p(x) ? \ - __constant_ntohs(x) : __bpf_ntohs(x)) - static inline unsigned int bpf_num_possible_cpus(void) { static const char *fcpu = "/sys/devices/system/cpu/possible";
diff --git a/tools/testing/selftests/bpf/test_l4lb.c b/tools/testing/selftests/bpf/test_l4lb.c
index b68b212..1e10c95 100644
--- a/tools/testing/selftests/bpf/test_l4lb.c
+++ b/tools/testing/selftests/bpf/test_l4lb.c@@ -19,7 +19,7 @@ #include <linux/udp.h> #include "bpf_helpers.h" #include "test_iptunnel_common.h" -#include "bpf_util.h" +#include "bpf_endian.h" int _version SEC("version") = 1;
diff --git a/tools/testing/selftests/bpf/test_pkt_access.c b/tools/testing/selftests/bpf/test_pkt_access.c
index 7113005..39387bb 100644
--- a/tools/testing/selftests/bpf/test_pkt_access.c
+++ b/tools/testing/selftests/bpf/test_pkt_access.c@@ -14,7 +14,7 @@ #include <linux/tcp.h> #include <linux/pkt_cls.h> #include "bpf_helpers.h" -#include "bpf_util.h" +#include "bpf_endian.h" #define barrier() __asm__ __volatile__("": : :"memory") int _version SEC("version") = 1;
--
2.1.2.532.g19b5d50