On Thu, Oct 27, 2022 at 6:33 PM Yonghong Song <yhs@xxxxxxxx> wrote: > > > > On 10/27/22 4:14 PM, Andrii Nakryiko wrote: > > 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? > > I would say it would be very difficult for upstream to agree with > bpf_dominating_decl. We already have lots of discussions and we > likely won't be able to satisfy Aaron who wants us to emit > adequate diagnostics which will involve lots of other work > and he also thinks this is too far away from C standard and he > wants us to implement in a llvm/clang tool which is not what > we want. Ok, could we change the problem to detecting if some type is defined. Would it be possible to have something like #if !__is_type_defined(struct abc) struct abc { }; #endif I think we talked about this and there were problems with this approach, but I don't remember details and how insurmountable the problem is. Having a way to check whether some type is defined would be very useful even outside of -target bpf parlance, though, so maybe it's the problem worth attacking? > > > > > 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 > >>