On Tue, Sep 14, 2021 at 3:30 PM Yonghong Song <yhs@xxxxxx> wrote: > > LLVM14 added support for a new C attribute ([1]) > __attribute__((btf_tag("arbitrary_str"))) > This attribute will be emitted to dwarf ([2]) and pahole > will convert it to BTF. Or for bpf target, this > attribute will be emitted to BTF directly ([3], [4]). > The attribute is intended to provide additional > information for > - struct/union type or struct/union member > - static/global variables > - static/global function or function parameter. > > This new attribute can be used to add attributes > to kernel codes, e.g., pre- or post- conditions, > allow/deny info, or any other info in which only > the kernel is interested. Such attributes will > be processed by clang frontend and emitted to > dwarf, converting to BTF by pahole. Ultimiately > the verifier can use these information for > verification purpose. > > The new attribute can also be used for bpf > programs, e.g., tagging with __user attributes > for function parameters, specifying global > function preconditions, etc. Such information > may help verifier to detect user program > bugs. > > After this series, pahole dwarf->btf converter > will be enhanced to support new llvm tag > for btf_tag attribute. With pahole support, > we will then try to add a few real use case, > e.g., __user/__rcu tagging, allow/deny list, > some kernel function precondition, etc, > in the kernel. > > In the rest of the series, Patches 1-2 had > kernel support. Patches 3-4 added > libbpf support. Patch 5 added bpftool > support. Patches 6-10 added various selftests. > Patch 11 added documentation for the new kind. > > [1] https://reviews.llvm.org/D106614 > [2] https://reviews.llvm.org/D106621 > [3] https://reviews.llvm.org/D106622 > [4] https://reviews.llvm.org/D109560 > > Changelog: > v2 -> v3: > - put NR_BTF_KINDS and BTF_KIND_MAX into enum as well > - check component_idx earlier (check_meta stage) in kernel > - add more tests > - fix misc nits Applied. Please send an update to selftests/bpf/README. Since folks will be puzzled with messages: progs/tag.c:23:20: warning: unknown attribute 'btf_tag' ignored [-Wunknown-attributes] Even with old clang: ./test_progs -t tag #21 btf_tag:OK Summary: 1/0 PASSED, 0 SKIPPED, 0 FAILED The test probably should fail with old clang ?