On 10/28/22 10:13 AM, Andrii Nakryiko wrote:
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?
Yes, we discussed this before. This will need to add additional work
in preprocessor. I just made a discussion topic in llvm discourse
https://discourse.llvm.org/t/add-a-type-checking-macro-is-type-defined-type/66268
Let us see whether we can get some upstream agreement or not.
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