On Tue, Apr 23, 2019 at 1:26 PM Daniel T. Lee <danieltim...@gmail.com> wrote: > > Currently, building bpf samples will cause the following error. > > ./tools/lib/bpf/bpf.h:132:27: error: 'UINT32_MAX' undeclared here (not in > a function) .. > #define BPF_LOG_BUF_SIZE (UINT32_MAX >> 8) /* verifier maximum in > kernels <= 5.1 */ > ^ > ./samples/bpf/bpf_load.h:31:25: note: in expansion of macro > 'BPF_LOG_BUF_SIZE' > extern char bpf_log_buf[BPF_LOG_BUF_SIZE]; > ^~~~~~~~~~~~~~~~ > > Due to commit 4519efa6f8ea ("libbpf: fix BPF_LOG_BUF_SIZE off-by-one error") > hard-coded size of BPF_LOG_BUF_SIZE has been replaced with UINT32_MAX which is > defined in <stdint.h> header. > > Even with this change, bpf selftests are running fine since these are built > with clang and it includes header(-idirafter) from clang/6.0.0/include. > (it has <stdint.h>) > > clang -I. -I./include/uapi -I../../../include/uapi -idirafter > /usr/local/include -idirafter /usr/include \ > -idirafter /usr/lib/llvm-6.0/lib/clang/6.0.0/include -idirafter > /usr/include/x86_64-linux-gnu \ > -Wno-compare-distinct-pointer-types -O2 -target bpf -emit-llvm -c > progs/test_sysctl_prog.c -o - | \ > llc -march=bpf -mcpu=generic -filetype=obj -o > /linux/tools/testing/selftests/bpf/test_sysctl_prog.o > > But bpf samples are compiled with GCC, and it only searches and includes > headers declared at the target file. As '#include <stdint.h>' hasn't been > declared in tools/lib/bpf/bpf.h, it causes build failure of bpf samples. > > gcc -Wp,-MD,./samples/bpf/.sockex3_user.o.d -Wall -Wmissing-prototypes > -Wstrict-prototypes \ > -O2 -fomit-frame-pointer -std=gnu89 -I./usr/include -I./tools/lib/ > -I./tools/testing/selftests/bpf/ \ > -I./tools/ lib/ -I./tools/include -I./tools/perf -c -o > ./samples/bpf/sockex3_user.o ./samples/bpf/sockex3_user.c; > > This commit add declaration of '#include <stdint.h>' to tools/lib/bpf/bpf.h > to fix this problem. > > Signed-off-by: Daniel T. Lee <danieltim...@gmail.com> > --- > tools/lib/bpf/bpf.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/tools/lib/bpf/bpf.h b/tools/lib/bpf/bpf.h > index ff2506fe6bd2..9593fec75652 100644 > --- a/tools/lib/bpf/bpf.h > +++ b/tools/lib/bpf/bpf.h > @@ -26,6 +26,7 @@ > #include <linux/bpf.h> > #include <stdbool.h> > #include <stddef.h> > +#include <stdint.h>
I my case, I have the following in /usr/include/linux/bpf.h: #include <linux/types.h> #include <linux/bpf_common.h> The <linux/bpf.h> is included in tools/lib/bpf/bpf.h. and at tools/include/linux/types.h, I got #include <stdbool.h> #include <stddef.h> #include <stdint.h> So I don't have any issues. Could you check your system whether any of the above files missing or mismatched during compilation process? > > #ifdef __cplusplus > extern "C" { > -- > 2.17.1 >