Re: [RFC bpf-next 00/12] Use uapi kernel headers with vmlinux.h

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
> >>



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux