On 1/22/25 2:13 AM, Alan Maguire wrote:
> On 22/01/2025 02:53, Ihor Solodrai wrote:
>> This patch series extends BPF Type Format (BTF) to support arbitrary
>> __attribute__ encoding.
>>
>> Setting the kind_flag to 1 in BTF type tags and decl tags now changes
>> the meaning for the encoded tag, in particular with respect to
>> btf_dump in libbpf.
>>
>> If the kflag is set, then the string encoded by the tag represents the
>> full attribute-list of an attribute specifier [1].
>>
>> This feature will allow extending tools such as pahole and bpftool to
>> capture and use more granular type information, and make it easier to
>> manage compatibility between clang and gcc BPF compilers.
>>
>
> sounds good! So presumably pahole will then have a "full_attribute" or
> similar BTF feature that will only do full attribute encoding for
> kernels that expect the kind flag to be set? Otherwise we'll run the
> risk of generating invalid BTF for older kernels with newer pahole
> (since those older kernels will fail to verify tags with a kind flag
set).
Hi Alan. Sorry I missed this message on the first pass.
Yes, this BTF extension enables pahole to encode any __attribute__ in
BTF. There is already a use case for that, which led me to this patch
series: expressing bpf_arena tags in vmlinux.h.
As to "full_attribute"-like feature in pahole, my intuition is that
it's a significant chunk of work, and it might not be necessary in the
near future. But with these changes in BTF it at least becomes a
possibility. And you're right, it will have to be an optional feature.
>
> Thanks!
>
> Alan
>
>> [1] https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/Attribute-Syntax.html
>>
>> Ihor Solodrai (5):
>> libbpf: introduce kflag for type_tags and decl_tags in BTF
>> libbpf: check the kflag of type tags in btf_dump
>> selftests/bpf: add a btf_dump test for type_tags
>> bpf: allow kind_flag for BTF type and decl tags
>> selftests/bpf: add a BTF verification test for kflagged type_tag
>>
>> Documentation/bpf/btf.rst | 27 +++-
>> kernel/bpf/btf.c | 7 +-
>> tools/include/uapi/linux/btf.h | 3 +-
>> tools/lib/bpf/btf.c | 87 +++++++---
>> tools/lib/bpf/btf.h | 3 +
>> tools/lib/bpf/btf_dump.c | 5 +-
>> tools/lib/bpf/libbpf.map | 2 +
>> tools/testing/selftests/bpf/prog_tests/btf.c | 23 ++-
>> .../selftests/bpf/prog_tests/btf_dump.c | 148 +++++++++++++-----
>> tools/testing/selftests/bpf/test_btf.h | 6 +
>> 10 files changed, 234 insertions(+), 77 deletions(-)
>>
>