xref: /openbmc/linux/tools/testing/selftests/bpf/README.rst (revision 0760aad038b5a032c31ea124feed63d88627d2f1)
1==================
2BPF Selftest Notes
3==================
4General instructions on running selftests can be found in
5`Documentation/bpf/bpf_devel_QA.rst`_.
6
7Additional information about selftest failures are
8documented here.
9
10bpf_iter test failures with clang/llvm 10.0.0
11=============================================
12
13With clang/llvm 10.0.0, the following two bpf_iter tests failed:
14  * ``bpf_iter/ipv6_route``
15  * ``bpf_iter/netlink``
16
17The symptom for ``bpf_iter/ipv6_route`` looks like
18
19.. code-block:: c
20
21  2: (79) r8 = *(u64 *)(r1 +8)
22  ...
23  14: (bf) r2 = r8
24  15: (0f) r2 += r1
25  ; BPF_SEQ_PRINTF(seq, "%pi6 %02x ", &rt->fib6_dst.addr, rt->fib6_dst.plen);
26  16: (7b) *(u64 *)(r8 +64) = r2
27  only read is supported
28
29The symptom for ``bpf_iter/netlink`` looks like
30
31.. code-block:: c
32
33  ; struct netlink_sock *nlk = ctx->sk;
34  2: (79) r7 = *(u64 *)(r1 +8)
35  ...
36  15: (bf) r2 = r7
37  16: (0f) r2 += r1
38  ; BPF_SEQ_PRINTF(seq, "%pK %-3d ", s, s->sk_protocol);
39  17: (7b) *(u64 *)(r7 +0) = r2
40  only read is supported
41
42This is due to a llvm BPF backend bug. The fix
43  https://reviews.llvm.org/D78466
44has been pushed to llvm 10.x release branch and will be
45available in 10.0.1. The fix is available in llvm 11.0.0 trunk.
46
47BPF CO-RE-based tests and Clang version
48=======================================
49
50A set of selftests use BPF target-specific built-ins, which might require
51bleeding-edge Clang versions (Clang 12 nightly at this time).
52
53Few sub-tests of core_reloc test suit (part of test_progs test runner) require
54the following built-ins, listed with corresponding Clang diffs introducing
55them to Clang/LLVM. These sub-tests are going to be skipped if Clang is too
56old to support them, they shouldn't cause build failures or runtime test
57failures:
58
59  - __builtin_btf_type_id() ([0], [1], [2]);
60  - __builtin_preserve_type_info(), __builtin_preserve_enum_value() ([3], [4]).
61
62  [0] https://reviews.llvm.org/D74572
63  [1] https://reviews.llvm.org/D74668
64  [2] https://reviews.llvm.org/D85174
65  [3] https://reviews.llvm.org/D83878
66  [4] https://reviews.llvm.org/D83242
67