selftest/bpf: fix compilation on clang 11
Subsystems (3)
PATCH 1/1 selftest/bpf: fix compilation on clang 11
Before this patch, profiler.inc.h wouldn't compile with clang-11 (before the __builtin_preserve_enum_value LLVM builtin was introduced in
https://reviews.llvm.org/D83242).
Another test that uses this builtin (test_core_enumval) is conditionally skipped if the compiler is too old. In that spirit, this patch inhibits part of populate_cgroup_info(), which needs this CO-RE builtin. The selftests build again on clang-11. The affected test (the profiler test) doesn't pass on clang-11 because it's missing
https://reviews.llvm.org/D85570, but at least the test suite as a whole compiles. The test's expected failure is already called out in the README.
--- tools/testing/selftests/bpf/progs/profiler.inc.h | 3 +++ 1 file changed, 3 insertions(+)
tools/testing/selftests/bpf/progs/profiler.inc.h +3 -0
@@ -256,6 +256,8 @@ static INLINE void* populate_cgroup_info(struct cgroup_data_t* cgroup_data,BPF_CORE_READ (task, nsproxy, cgroup_ns, root_cset, dfl_cgrp, kn);struct kernfs_node * proc_kernfs =BPF_CORE_READ (task, cgroups, dfl_cgrp, kn); + +#if __has_builtin (__builtin_preserve_enum_value)if (ENABLE_CGROUP_V1_RESOLVER &&CONFIG_CGROUP_PIDS ) { int cgrp_id = bpf_core_enum_value(enum cgroup_subsys_id___local, pids_cgrp_id___local);
@@ -275,6 +277,7 @@ static INLINE void* populate_cgroup_info(struct cgroup_data_t* cgroup_data, } } } +#endif cgroup_data->cgroup_root_inode =get_inode_from_kernfs (root_kernfs); cgroup_data->cgroup_proc_inode =get_inode_from_kernfs (proc_kernfs);
Signature · 1 line
2.27.0
Quoted 12 lines · Andrei Matei
Before this patch,
profiler.inc.hwouldn't compile with clang-11 (before the__builtin_preserve_enum_valueLLVM builtin was introduced in
https://reviews.llvm.org/D83242 ).
Another test that uses this builtin (test_core_enumval) is conditionally skipped if the compiler is too old. In that spirit, this patch inhibits part ofpopulate_cgroup_info(), which needs this CO-RE builtin. The selftests build again on clang-11. The affected test (the profiler test) doesn't pass on clang-11 because it's missing
https://reviews.llvm.org/D85570 , but at least the test suite as a whole compiles. The test's expected failure is already called out in the README.
Quoted 1 line
Signed-off-by Andrei Matei <[email protected]>
Thanks for the fix! This change won't impact correctness as profiler.c mostly to test verifier.
Quoted 12 lines · Andrei Matei
Before this patch,
profiler.inc.hwouldn't compile with clang-11 (before the__builtin_preserve_enum_valueLLVM builtin was introduced in
https://reviews.llvm.org/D83242).
Another test that uses this builtin (test_core_enumval) is conditionally skipped if the compiler is too old. In that spirit, this patch inhibits part ofpopulate_cgroup_info(), which needs this CO-RE builtin. The selftests build again on clang-11. The affected test (the profiler test) doesn't pass on clang-11 because it's missing
https://reviews.llvm.org/D85570, but at least the test suite as a whole compiles. The test's expected failure is already called out in the README.
Quoted 1 line
Signed-off-by Andrei Matei <[email protected]>
Thanks for the fix!
Quoted 28 lines
--- tools/testing/selftests/bpf/progs/profiler.inc.h | 3 +++ 1 file changed, 3 insertions(+)tools/testing/selftests/bpf/progs/profiler.inc.h +3
-0@@ -256,6 +256,8 @@ static INLINE void* populate_cgroup_info(struct cgroup_data_t* cgroup_data,BPF_CORE_READ (task, nsproxy, cgroup_ns, root_cset, dfl_cgrp, kn);struct kernfs_node * proc_kernfs =BPF_CORE_READ (task, cgroups, dfl_cgrp, kn); + +#if __has_builtin (__builtin_preserve_enum_value)if (ENABLE_CGROUP_V1_RESOLVER &&CONFIG_CGROUP_PIDS ) { int cgrp_id = bpf_core_enum_value(enum cgroup_subsys_id___local, pids_cgrp_id___local);@@ -275,6 +277,7 @@ static INLINE void* populate_cgroup_info(struct cgroup_data_t* cgroup_data, } } } +#endif cgroup_data->cgroup_root_inode =get_inode_from_kernfs (root_kernfs); cgroup_data->cgroup_proc_inode =get_inode_from_kernfs (proc_kernfs);Signature · 1 line
2.27.0
Daniel Borkmann
maintainerQuoted 12 lines · Andrei Matei
Before this patch,
profiler.inc.hwouldn't compile with clang-11 (before the__builtin_preserve_enum_valueLLVM builtin was introduced in
https://reviews.llvm.org/D83242).
Another test that uses this builtin (test_core_enumval) is conditionally skipped if the compiler is too old. In that spirit, this patch inhibits part ofpopulate_cgroup_info(), which needs this CO-RE builtin. The selftests build again on clang-11. The affected test (the profiler test) doesn't pass on clang-11 because it's missing
https://reviews.llvm.org/D85570, but at least the test suite as a whole compiles. The test's expected failure is already called out in the README.
Quoted 1 line
Signed-off-by Andrei Matei <[email protected]>
Looks good, applied, thanks!