Re: [PATCH bpf-next v2] selftests/bpf: add bpf-gcc support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 9/12/19 6:05 PM, Ilya Leoshkevich wrote:
Now that binutils and gcc support for BPF is upstream, make use of it in
BPF selftests using alu32-like approach. Share as much as possible of
CFLAGS calculation with clang.

Fixes only obvious issues, leaving more complex ones for later:
- Use gcc-provided bpf-helpers.h instead of manually defining the
   helpers, change bpf_helpers.h include guard to avoid conflict.
- Include <linux/stddef.h> for __always_inline.
- Add $(OUTPUT)/../usr/include to include path in order to use local
   kernel headers instead of system kernel headers when building with O=.

In order to activate the bpf-gcc support, one needs to configure
binutils and gcc with --target=bpf and make them available in $PATH. In
particular, gcc must be installed as `bpf-gcc`, which is the default.

Right now with binutils 25a2915e8dba and gcc r275589 only a handful of
tests work:

	# ./test_progs_bpf_gcc
	# Summary: 7/39 PASSED, 1 SKIPPED, 98 FAILED

The reason for those failures are as follows:

- Build errors:
   - `error: too many function arguments for eBPF` for __always_inline
     functions read_str_var and read_map_var - must be inlining issue,
     and for process_l3_headers_v6, which relies on optimizing away
     function arguments.
   - `error: indirect call in function, which are not supported by eBPF`
     where there are no obvious indirect calls in the source calls, e.g.
     in __encap_ipip_none.
   - `error: field 'lock' has incomplete type` for fields of `struct
     bpf_spin_lock` type - bpf_spin_lock is re#defined by bpf-helpers.h,
     so its usage is sensitive to order of #includes.
   - `error: eBPF stack limit exceeded` in sysctl_tcp_mem.
- Load errors:
   - Missing object files due to above build errors.
   - `libbpf: failed to create map (name: 'test_ver.bss')`.
   - `libbpf: object file doesn't contain bpf program`.
   - `libbpf: Program '.text' contains unrecognized relo data pointing to
     section 0`.
   - `libbpf: BTF is required, but is missing or corrupted` - no BTF
     support in gcc yet.

Signed-off-by: Ilya Leoshkevich <iii@xxxxxxxxxxxxx>
---
v1->v2: Use bpf-helpers.h, fix a few obvious compatibility problems.

I think it's a good starting point unblocking Jose and others to run the BPF test
suite against bpf-gcc. Longer term we might want to do further refactoring to really
cleanly split llvm vs gcc dependency, and compare test results back to back to make
sure it's consistent behavior. Anyway, applied, thanks!



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux