Message ID | 20250207021442.155703-4-ihor.solodrai@linux.dev (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | btf_encoder: emit type tags for bpf_arena pointers | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
On 07/02/2025 02:14, Ihor Solodrai wrote: > Add a feature flag "attributes" (default: false) controlling whether > pahole is allowed to generate BTF attributes: type tags and decl tags > with kind_flag = 1. > > This is necessary for backward compatibility, as BPF verifier does not > recognize tags with kind_flag = 1 prior to (at least) 6.14-rc1 [1]. > > [1] https://lore.kernel.org/bpf/20250130201239.1429648-1-ihor.solodrai@linux.dev/ > > Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev> Needs update to pahole man page describing the new "attributes" btf_feature, but aside from that LGTM. Reviewed-by: Alan Maguire <alan.maguire@oracle.com> > --- > btf_encoder.c | 6 ++++-- > dwarves.h | 1 + > pahole.c | 11 +++++++++++ > 3 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/btf_encoder.c b/btf_encoder.c > index d7837c2..0a734d4 100644 > --- a/btf_encoder.c > +++ b/btf_encoder.c > @@ -142,7 +142,8 @@ struct btf_encoder { > gen_floats, > skip_encoding_decl_tag, > tag_kfuncs, > - gen_distilled_base; > + gen_distilled_base, > + encode_attributes; > uint32_t array_index_id; > struct elf_secinfo *secinfo; > size_t seccnt; > @@ -800,7 +801,7 @@ static int btf_encoder__add_bpf_arena_type_tags(struct btf_encoder *encoder, str > int ret_type_id; > int err = 0; > > - if (!state || !state->elf || !state->elf->kfunc) > + if (!encoder->encode_attributes || !state || !state->elf || !state->elf->kfunc) > goto out; > > kfunc = btf_encoder__kfunc_by_name(encoder, state->elf->name); > @@ -2553,6 +2554,7 @@ struct btf_encoder *btf_encoder__new(struct cu *cu, const char *detached_filenam > encoder->skip_encoding_decl_tag = conf_load->skip_encoding_btf_decl_tag; > encoder->tag_kfuncs = conf_load->btf_decl_tag_kfuncs; > encoder->gen_distilled_base = conf_load->btf_gen_distilled_base; > + encoder->encode_attributes = conf_load->btf_attributes; > encoder->verbose = verbose; > encoder->has_index_type = false; > encoder->need_index_type = false; > diff --git a/dwarves.h b/dwarves.h > index 8234e1a..99ed783 100644 > --- a/dwarves.h > +++ b/dwarves.h > @@ -89,6 +89,7 @@ struct conf_load { > bool reproducible_build; > bool btf_decl_tag_kfuncs; > bool btf_gen_distilled_base; > + bool btf_attributes; > uint8_t hashtable_bits; > uint8_t max_hashtable_bits; > uint16_t kabi_prefix_len; > diff --git a/pahole.c b/pahole.c > index af3e1cf..0bda249 100644 > --- a/pahole.c > +++ b/pahole.c > @@ -1152,6 +1152,7 @@ ARGP_PROGRAM_VERSION_HOOK_DEF = dwarves_print_version; > #define ARG_padding_ge 347 > #define ARG_padding 348 > #define ARGP_with_embedded_flexible_array 349 > +#define ARGP_btf_attributes 350 > > /* --btf_features=feature1[,feature2,..] allows us to specify > * a list of requested BTF features or "default" to enable all default > @@ -1210,6 +1211,9 @@ struct btf_feature { > BTF_NON_DEFAULT_FEATURE(distilled_base, btf_gen_distilled_base, false), > #endif > BTF_NON_DEFAULT_FEATURE(global_var, encode_btf_global_vars, false), > +#if LIBBPF_MAJOR_VERSION >= 1 && LIBBPF_MINOR_VERSION >= 6 > + BTF_NON_DEFAULT_FEATURE(attributes, btf_attributes, false), > +#endif > }; > > #define BTF_MAX_FEATURE_STR 1024 > @@ -1785,6 +1789,11 @@ static const struct argp_option pahole__options[] = { > .key = ARGP_running_kernel_vmlinux, > .doc = "Search for, possibly getting from a debuginfo server, a vmlinux matching the running kernel build-id (from /sys/kernel/notes)" > }, > + { > + .name = "btf_attributes", > + .key = ARGP_btf_attributes, > + .doc = "Allow generation of attributes in BTF. Attributes are the type tags and decl tags with the kind_flag set to 1.", > + }, > { > .name = NULL, > } > @@ -1979,6 +1988,8 @@ static error_t pahole__options_parser(int key, char *arg, > show_supported_btf_features(stdout); exit(0); > case ARGP_btf_features_strict: > parse_btf_features(arg, true); break; > + case ARGP_btf_attributes: > + conf_load.btf_attributes = true; break; > default: > return ARGP_ERR_UNKNOWN; > }
On 2/10/25 2:13 PM, Alan Maguire wrote: > On 07/02/2025 02:14, Ihor Solodrai wrote: >> Add a feature flag "attributes" (default: false) controlling whether >> pahole is allowed to generate BTF attributes: type tags and decl tags >> with kind_flag = 1. >> >> This is necessary for backward compatibility, as BPF verifier does not >> recognize tags with kind_flag = 1 prior to (at least) 6.14-rc1 [1]. >> >> [1] https://lore.kernel.org/bpf/20250130201239.1429648-1-ihor.solodrai@linux.dev/ >> >> Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev> > Needs update to pahole man page describing the new "attributes" > btf_feature, but aside from that LGTM. I was wondering what have I missed. Thanks. > > Reviewed-by: Alan Maguire <alan.maguire@oracle.com> > > [...]
diff --git a/btf_encoder.c b/btf_encoder.c index d7837c2..0a734d4 100644 --- a/btf_encoder.c +++ b/btf_encoder.c @@ -142,7 +142,8 @@ struct btf_encoder { gen_floats, skip_encoding_decl_tag, tag_kfuncs, - gen_distilled_base; + gen_distilled_base, + encode_attributes; uint32_t array_index_id; struct elf_secinfo *secinfo; size_t seccnt; @@ -800,7 +801,7 @@ static int btf_encoder__add_bpf_arena_type_tags(struct btf_encoder *encoder, str int ret_type_id; int err = 0; - if (!state || !state->elf || !state->elf->kfunc) + if (!encoder->encode_attributes || !state || !state->elf || !state->elf->kfunc) goto out; kfunc = btf_encoder__kfunc_by_name(encoder, state->elf->name); @@ -2553,6 +2554,7 @@ struct btf_encoder *btf_encoder__new(struct cu *cu, const char *detached_filenam encoder->skip_encoding_decl_tag = conf_load->skip_encoding_btf_decl_tag; encoder->tag_kfuncs = conf_load->btf_decl_tag_kfuncs; encoder->gen_distilled_base = conf_load->btf_gen_distilled_base; + encoder->encode_attributes = conf_load->btf_attributes; encoder->verbose = verbose; encoder->has_index_type = false; encoder->need_index_type = false; diff --git a/dwarves.h b/dwarves.h index 8234e1a..99ed783 100644 --- a/dwarves.h +++ b/dwarves.h @@ -89,6 +89,7 @@ struct conf_load { bool reproducible_build; bool btf_decl_tag_kfuncs; bool btf_gen_distilled_base; + bool btf_attributes; uint8_t hashtable_bits; uint8_t max_hashtable_bits; uint16_t kabi_prefix_len; diff --git a/pahole.c b/pahole.c index af3e1cf..0bda249 100644 --- a/pahole.c +++ b/pahole.c @@ -1152,6 +1152,7 @@ ARGP_PROGRAM_VERSION_HOOK_DEF = dwarves_print_version; #define ARG_padding_ge 347 #define ARG_padding 348 #define ARGP_with_embedded_flexible_array 349 +#define ARGP_btf_attributes 350 /* --btf_features=feature1[,feature2,..] allows us to specify * a list of requested BTF features or "default" to enable all default @@ -1210,6 +1211,9 @@ struct btf_feature { BTF_NON_DEFAULT_FEATURE(distilled_base, btf_gen_distilled_base, false), #endif BTF_NON_DEFAULT_FEATURE(global_var, encode_btf_global_vars, false), +#if LIBBPF_MAJOR_VERSION >= 1 && LIBBPF_MINOR_VERSION >= 6 + BTF_NON_DEFAULT_FEATURE(attributes, btf_attributes, false), +#endif }; #define BTF_MAX_FEATURE_STR 1024 @@ -1785,6 +1789,11 @@ static const struct argp_option pahole__options[] = { .key = ARGP_running_kernel_vmlinux, .doc = "Search for, possibly getting from a debuginfo server, a vmlinux matching the running kernel build-id (from /sys/kernel/notes)" }, + { + .name = "btf_attributes", + .key = ARGP_btf_attributes, + .doc = "Allow generation of attributes in BTF. Attributes are the type tags and decl tags with the kind_flag set to 1.", + }, { .name = NULL, } @@ -1979,6 +1988,8 @@ static error_t pahole__options_parser(int key, char *arg, show_supported_btf_features(stdout); exit(0); case ARGP_btf_features_strict: parse_btf_features(arg, true); break; + case ARGP_btf_attributes: + conf_load.btf_attributes = true; break; default: return ARGP_ERR_UNKNOWN; }
Add a feature flag "attributes" (default: false) controlling whether pahole is allowed to generate BTF attributes: type tags and decl tags with kind_flag = 1. This is necessary for backward compatibility, as BPF verifier does not recognize tags with kind_flag = 1 prior to (at least) 6.14-rc1 [1]. [1] https://lore.kernel.org/bpf/20250130201239.1429648-1-ihor.solodrai@linux.dev/ Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev> --- btf_encoder.c | 6 ++++-- dwarves.h | 1 + pahole.c | 11 +++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-)