On 04/23/2019 10:24 PM, Daniel T. Lee 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 <[email protected]>
Applied, thanks.