On Tue, Oct 25, 2022 at 3:28 PM Eduard Zingerman <eddyz87@xxxxxxxxx> wrote: > > Hi BPF community, > > AFAIK there is a long standing feature request to use kernel headers > alongside `vmlinux.h` generated by `bpftool`. For example significant > effort was put to add an attribute `bpf_dominating_decl` (see [1]) to > clang, unfortunately this effort was stuck due to concerns regarding C > language semantics. > Maybe we should make another attempt to implement bpf_dominating_decl? That seems like a more elegant solution than any other implemented or discussed alternative. Yonghong, WDYT? BTW, I suggest splitting libbpf btf_dedup and btf_dump changes into a separate series and sending them as non-RFC sooner. Those improvements are independent of all the header guards stuff, let's get them landed sooner. > After some discussion with Alexei and Yonghong I'd like to request > your comments regarding a somewhat brittle and partial solution to > this issue that relies on adding `#ifndef FOO_H ... #endif` guards in > the generated `vmlinux.h`. > [...] > Eduard Zingerman (12): > libbpf: Deduplicate unambigous standalone forward declarations > selftests/bpf: Tests for standalone forward BTF declarations > deduplication > libbpf: Support for BTF_DECL_TAG dump in C format > selftests/bpf: Tests for BTF_DECL_TAG dump in C format > libbpf: Header guards for selected data structures in vmlinux.h > selftests/bpf: Tests for header guards printing in BTF dump > bpftool: Enable header guards generation > kbuild: Script to infer header guard values for uapi headers > kbuild: Header guards for types from include/uapi/*.h in kernel BTF > selftests/bpf: Script to verify uapi headers usage with vmlinux.h > selftests/bpf: Known good uapi headers for test_uapi_headers.py > selftests/bpf: script for infer_header_guards.pl testing > > scripts/infer_header_guards.pl | 191 +++++ > scripts/link-vmlinux.sh | 13 +- > tools/bpf/bpftool/btf.c | 4 +- > tools/lib/bpf/btf.c | 178 ++++- > tools/lib/bpf/btf.h | 7 +- > tools/lib/bpf/btf_dump.c | 232 +++++- > .../selftests/bpf/good_uapi_headers.txt | 677 ++++++++++++++++++ > tools/testing/selftests/bpf/prog_tests/btf.c | 152 ++++ > .../selftests/bpf/prog_tests/btf_dump.c | 11 +- > .../bpf/progs/btf_dump_test_case_decl_tag.c | 39 + > .../progs/btf_dump_test_case_header_guards.c | 94 +++ > .../bpf/test_uapi_header_guards_infer.sh | 33 + > .../selftests/bpf/test_uapi_headers.py | 197 +++++ > 13 files changed, 1816 insertions(+), 12 deletions(-) > create mode 100755 scripts/infer_header_guards.pl > create mode 100644 tools/testing/selftests/bpf/good_uapi_headers.txt > create mode 100644 tools/testing/selftests/bpf/progs/btf_dump_test_case_decl_tag.c > create mode 100644 tools/testing/selftests/bpf/progs/btf_dump_test_case_header_guards.c > create mode 100755 tools/testing/selftests/bpf/test_uapi_header_guards_infer.sh > create mode 100755 tools/testing/selftests/bpf/test_uapi_headers.py > > -- > 2.34.1 >