diff options
author | Yonghong Song <yhs@fb.com> | 2022-04-18 22:09:00 -0700 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2022-04-19 10:22:19 -0700 |
commit | 44df171a10f8969d1456e0a5af7fbac142d7fa18 (patch) | |
tree | daab59e7a6f1dc1cc86cf6562adc8f585891b0c4 /tools/testing/selftests/bpf/prog_tests/trace_ext.c | |
parent | 8c89b5db7a2894e33417dd69680729e8f65f5709 (diff) |
selftests/bpf: Workaround a verifier issue for test exhandler
The llvm patch [1] enabled opaque pointer which caused selftest
'exhandler' failure.
...
; work = task->task_works;
7: (79) r1 = *(u64 *)(r6 +2120) ; R1_w=ptr_callback_head(off=0,imm=0) R6_w=ptr_task_struct(off=0,imm=0)
; func = work->func;
8: (79) r2 = *(u64 *)(r1 +8) ; R1_w=ptr_callback_head(off=0,imm=0) R2_w=scalar()
; if (!work && !func)
9: (4f) r1 |= r2
math between ptr_ pointer and register with unbounded min value is not allowed
below is insn 10 and 11
10: (55) if r1 != 0 goto +5
11: (18) r1 = 0 ll
...
In llvm, the code generation of 'r1 |= r2' happened in codegen
selectiondag phase due to difference of opaque pointer vs. non-opaque pointer.
Without [1], the related code looks like:
r2 = *(u64 *)(r6 + 2120)
r1 = *(u64 *)(r2 + 8)
if r2 != 0 goto +6 <LBB0_4>
if r1 != 0 goto +5 <LBB0_4>
r1 = 0 ll
...
I haven't found a good way in llvm to fix this issue. So let us workaround the
problem first so bpf CI won't be blocked.
[1] https://reviews.llvm.org/D123300
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20220419050900.3136024-1-yhs@fb.com
Diffstat (limited to 'tools/testing/selftests/bpf/prog_tests/trace_ext.c')
0 files changed, 0 insertions, 0 deletions