@@ -136,7 +136,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;
@@ -823,7 +824,7 @@ static int32_t btf_encoder__add_func_proto(struct btf_encoder *encoder, struct f
assert(ftype != NULL || state != NULL);
#if LIBBPF_MAJOR_VERSION >= 1 && LIBBPF_MINOR_VERSION >= 6
- if (is_kfunc_state(state) && encoder->tag_kfuncs)
+ if (is_kfunc_state(state) && encoder->tag_kfuncs && encoder->encode_attributes)
if (btf__add_bpf_arena_type_tags(encoder->btf, state) < 0)
return -1;
#endif
@@ -2417,6 +2418,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;
@@ -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;
@@ -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;
}