From: Ihor Solodrai <ihor.solodrai@linux.dev>
To: dwarves@vger.kernel.org, bpf@vger.kernel.org
Cc: acme@kernel.org, alan.maguire@oracle.com, ast@kernel.org,
andrii@kernel.org, eddyz87@gmail.com, mykolal@fb.com,
kernel-team@meta.com
Subject: [PATCH dwarves 3/3] pahole: introduce --btf_feature=attributes
Date: Thu, 6 Feb 2025 18:14:42 -0800 [thread overview]
Message-ID: <20250207021442.155703-4-ihor.solodrai@linux.dev> (raw)
In-Reply-To: <20250207021442.155703-1-ihor.solodrai@linux.dev>
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(-)
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;
}
--
2.48.1
next prev parent reply other threads:[~2025-02-07 2:15 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-07 2:14 [PATCH dwarves 0/3] btf_encoder: emit type tags for bpf_arena pointers Ihor Solodrai
2025-02-07 2:14 ` [PATCH dwarves 2/3] " Ihor Solodrai
2025-02-10 22:11 ` Alan Maguire
2025-02-11 0:11 ` Ihor Solodrai
2025-02-07 2:14 ` Ihor Solodrai [this message]
2025-02-10 22:13 ` [PATCH dwarves 3/3] pahole: introduce --btf_feature=attributes Alan Maguire
2025-02-11 0:16 ` Ihor Solodrai
[not found] ` <20250207021442.155703-2-ihor.solodrai@linux.dev>
2025-02-10 20:57 ` [PATCH dwarves 1/3] btf_encoder: collect kfuncs info in btf_encoder__new Eduard Zingerman
2025-02-10 22:42 ` Ihor Solodrai
2025-02-11 0:35 ` Eduard Zingerman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250207021442.155703-4-ihor.solodrai@linux.dev \
--to=ihor.solodrai@linux.dev \
--cc=acme@kernel.org \
--cc=alan.maguire@oracle.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=dwarves@vger.kernel.org \
--cc=eddyz87@gmail.com \
--cc=kernel-team@meta.com \
--cc=mykolal@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox