aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Maguire <alan.maguire@oracle.com>2023-10-23 10:57:25 +0100
committerArnaldo Carvalho de Melo <acme@redhat.com>2023-10-25 15:23:22 -0300
commit74a238a4368223c9502d2b24ff71f93039a45328 (patch)
treed2a360c30ea1d0f03a3d01fb65c040e9be1774bd
parent7bc9b9975545ab53c9329c2e7dd725c5ae17d6d1 (diff)
downloadpahole-74a238a4368223c9502d2b24ff71f93039a45328.tar.gz
pahole: Add --supported_btf_features
By design --btf_features=FEATURE1[,FEATURE2,...] will not complain if an unrecognized feature is specified. This allows the kernel build process to specify new features regardless of whether they are supported by the version of pahole used; in such cases we do not wish for every invocation of pahole to complain. However it is still valuable to have a way of knowing which BTF features pahole supports; this could be logged as part of the build process for example. By specifying --supported_btf_features a comma-separated list is returned; for example: $ pahole --supported_btf_features encode_force,var,float,decl_tag,type_tag,enum64,optimized_func,consistent_func $ Signed-off-by: Alan Maguire <alan.maguire@oracle.com> Acked-by: Andrii Nakryiko <andrii@kernel.org> Acked-by: Eduard Zingerman <eddyz87@gmail.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com> Cc: Daniel Borkmann <daniel@iogearbox.net> Cc: Hao Luo <haoluo@google.com> Cc: John Fastabend <john.fastabend@gmail.com> Cc: KP Singh <kpsingh@kernel.org> Cc: Martin KaFai Lau <martin.lau@linux.dev> Cc: Mykola Lysenko <mykolal@fb.com> Cc: Song Liu <song@kernel.org> Cc: Stanislav Fomichev <sdf@google.com> Cc: Yonghong Song <yhs@fb.com> Cc: bpf@vger.kernel.org Link: https://lore.kernel.org/r/20231023095726.1179529-5-alan.maguire@oracle.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--man-pages/pahole.14
-rw-r--r--pahole.c20
2 files changed, 24 insertions, 0 deletions
diff --git a/man-pages/pahole.1 b/man-pages/pahole.1
index a09885f4..61489157 100644
--- a/man-pages/pahole.1
+++ b/man-pages/pahole.1
@@ -298,6 +298,10 @@ Encode BTF using the specified feature list, or specify 'all' for all features s
So for example, specifying \-\-btf_encode=var,enum64 will result in a BTF encoding that (as well as encoding basic BTF information) will contain variables and enum64 values.
.TP
+.B \-\-supported_btf_features
+Show set of BTF features supported by \-\-btf_features option and exit. Useful for checking which features are supported since \-\-btf_features will not emit an error if an unrecognized feature is specified.
+
+.TP
.B \-l, \-\-show_first_biggest_size_base_type_member
Show first biggest size base_type member.
diff --git a/pahole.c b/pahole.c
index fe1cc6a1..37fd2a4b 100644
--- a/pahole.c
+++ b/pahole.c
@@ -1230,6 +1230,7 @@ ARGP_PROGRAM_VERSION_HOOK_DEF = dwarves_print_version;
#define ARGP_btf_gen_optimized 339
#define ARGP_skip_encoding_btf_inconsistent_proto 340
#define ARGP_btf_features 341
+#define ARGP_supported_btf_features 342
/* --btf_features=feature1[,feature2,..] allows us to specify
* a list of requested BTF features or "all" to enable all features.
@@ -1317,6 +1318,18 @@ static void enable_btf_feature(struct btf_feature *feature)
*feature->conf_value = !feature->default_value;
}
+static void show_supported_btf_features(FILE *output)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(btf_features); i++) {
+ if (i > 0)
+ fprintf(output, ",");
+ fprintf(output, "%s", btf_features[i].name);
+ }
+ fprintf(output, "\n");
+}
+
/* Translate --btf_features=feature1[,feature2] into conf_load values.
* Explicitly ignores unrecognized features to allow future specification
* of new opt-in features.
@@ -1780,6 +1793,11 @@ static const struct argp_option pahole__options[] = {
.doc = "Specify supported BTF features in FEATURE_LIST or 'all' for all supported features. See the pahole manual page for the list of supported features."
},
{
+ .name = "supported_btf_features",
+ .key = ARGP_supported_btf_features,
+ .doc = "Show list of btf_features supported by pahole and exit."
+ },
+ {
.name = NULL,
}
};
@@ -1956,6 +1974,8 @@ static error_t pahole__options_parser(int key, char *arg,
conf_load.skip_encoding_btf_inconsistent_proto = true; break;
case ARGP_btf_features:
parse_btf_features(arg); break;
+ case ARGP_supported_btf_features:
+ show_supported_btf_features(stdout); exit(0);
default:
return ARGP_ERR_UNKNOWN;
}