> cc Jose E. Marchesi > > Hi, Jose, just let you know that the BTF format for BTF_KIND_TAG is > changed since v1 as the new format can simplify kernel/libbpf > implementation. Thanks! Noted. Thanks for the update. > > On 9/13/21 8:51 AM, Yonghong Song 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: >> v1 -> v2: >> - BTF ELF format changed in llvm ([4] above), >> so cross-board change to use the new format. >> - Clarified in commit message that BTF_KIND_TAG >> is not emitted by bpftool btf dump format c. >> - Fix various comments from Andrii. >> Yonghong Song (11): >> btf: change BTF_KIND_* macros to enums >> bpf: support for new btf kind BTF_KIND_TAG >> libbpf: rename btf_{hash,equal}_int to btf_{hash,equal}_int_tag >> libbpf: add support for BTF_KIND_TAG >> bpftool: add support for BTF_KIND_TAG >> selftests/bpf: test libbpf API function btf__add_tag() >> selftests/bpf: change NAME_NTH/IS_NAME_NTH for BTF_KIND_TAG format >> selftests/bpf: add BTF_KIND_TAG unit tests >> selftests/bpf: test BTF_KIND_TAG for deduplication >> selftests/bpf: add a test with a bpf program with btf_tag attributes >> docs/bpf: add documentation for BTF_KIND_TAG >> Documentation/bpf/btf.rst | 27 +- >> include/uapi/linux/btf.h | 52 +-- >> kernel/bpf/btf.c | 120 +++++++ >> tools/bpf/bpftool/btf.c | 12 + >> tools/include/uapi/linux/btf.h | 52 +-- >> tools/lib/bpf/btf.c | 85 ++++- >> tools/lib/bpf/btf.h | 15 + >> tools/lib/bpf/btf_dump.c | 3 + >> tools/lib/bpf/libbpf.c | 31 +- >> tools/lib/bpf/libbpf.map | 5 + >> tools/lib/bpf/libbpf_internal.h | 2 + >> tools/testing/selftests/bpf/btf_helpers.c | 7 +- >> tools/testing/selftests/bpf/prog_tests/btf.c | 318 ++++++++++++++++-- >> .../selftests/bpf/prog_tests/btf_tag.c | 14 + >> .../selftests/bpf/prog_tests/btf_write.c | 21 ++ >> tools/testing/selftests/bpf/progs/tag.c | 39 +++ >> tools/testing/selftests/bpf/test_btf.h | 3 + >> 17 files changed, 736 insertions(+), 70 deletions(-) >> create mode 100644 tools/testing/selftests/bpf/prog_tests/btf_tag.c >> create mode 100644 tools/testing/selftests/bpf/progs/tag.c >>