Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
bpf: Prevent inlining of bpf_fentry_test7()
With latest clang18, I hit test_progs failures for the following test: torvalds#13/2 bpf_cookie/multi_kprobe_link_api:FAIL torvalds#13/3 bpf_cookie/multi_kprobe_attach_api:FAIL torvalds#13 bpf_cookie:FAIL torvalds#75 fentry_fexit:FAIL torvalds#76/1 fentry_test/fentry:FAIL torvalds#76 fentry_test:FAIL torvalds#80/1 fexit_test/fexit:FAIL torvalds#80 fexit_test:FAIL torvalds#110/1 kprobe_multi_test/skel_api:FAIL torvalds#110/2 kprobe_multi_test/link_api_addrs:FAIL torvalds#110/3 kprobe_multi_test/link_api_syms:FAIL torvalds#110/4 kprobe_multi_test/attach_api_pattern:FAIL torvalds#110/5 kprobe_multi_test/attach_api_addrs:FAIL torvalds#110/6 kprobe_multi_test/attach_api_syms:FAIL torvalds#110 kprobe_multi_test:FAIL For example, for torvalds#13/2, the error messages are ... kprobe_multi_test_run:FAIL:kprobe_test7_result unexpected kprobe_test7_result: actual 0 != expected 1 ... kprobe_multi_test_run:FAIL:kretprobe_test7_result unexpected kretprobe_test7_result: actual 0 != expected 1 clang17 does not have this issue. Further investigation shows that kernel func bpf_fentry_test7(), used in the above tests, is inlined by the compiler although it is marked as noinline. int noinline bpf_fentry_test7(struct bpf_fentry_test_t *arg) { return (long)arg; } It is known that for simple functions like the above (e.g. just returning a constant or an input argument), the clang compiler may still do inlining for a noinline function. Adding 'asm volatile ("")' in the beginning of the bpf_fentry_test7() can prevent inlining. Signed-off-by: Yonghong Song <[email protected]>
- Loading branch information