| ================== |
| BPF Selftest Notes |
| ================== |
| General instructions on running selftests can be found in |
| `Documentation/bpf/bpf_devel_QA.rst`_. |
| |
| Additional information about selftest failures are |
| documented here. |
| |
| bpf_iter test failures with clang/llvm 10.0.0 |
| ============================================= |
| |
| With clang/llvm 10.0.0, the following two bpf_iter tests failed: |
| * ``bpf_iter/ipv6_route`` |
| * ``bpf_iter/netlink`` |
| |
| The symptom for ``bpf_iter/ipv6_route`` looks like |
| |
| .. code-block:: c |
| |
| 2: (79) r8 = *(u64 *)(r1 +8) |
| ... |
| 14: (bf) r2 = r8 |
| 15: (0f) r2 += r1 |
| ; BPF_SEQ_PRINTF(seq, "%pi6 %02x ", &rt->fib6_dst.addr, rt->fib6_dst.plen); |
| 16: (7b) *(u64 *)(r8 +64) = r2 |
| only read is supported |
| |
| The symptom for ``bpf_iter/netlink`` looks like |
| |
| .. code-block:: c |
| |
| ; struct netlink_sock *nlk = ctx->sk; |
| 2: (79) r7 = *(u64 *)(r1 +8) |
| ... |
| 15: (bf) r2 = r7 |
| 16: (0f) r2 += r1 |
| ; BPF_SEQ_PRINTF(seq, "%pK %-3d ", s, s->sk_protocol); |
| 17: (7b) *(u64 *)(r7 +0) = r2 |
| only read is supported |
| |
| This is due to a llvm BPF backend bug. The fix |
| https://reviews.llvm.org/D78466 |
| has been pushed to llvm 10.x release branch and will be |
| available in 10.0.1. The fix is available in llvm 11.0.0 trunk. |