From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> This is initially about BTF encoding, we want to load DWARF and encode BTF from it in a way that is reproducible, i.e. no matter how many threads we use for the loading/encoding process, the output will be the same, i.e. the BTF ids produced will be the same for all builds. This first path just adds the conf_load field and allows it to be asked for with the '--reproducible_build' option in pahole. At some point we'll use with --btf_features=+reproducible_build or '--btf_features=default --btf_features=reproducible_build' to keep the default set of BTF features and be able to use this in the Linux kernel build system without doing an extra pahole version check for the availability of --reproducible_build with pahole versions that already support --btf_features and thus would ignore "reproducible_build". Cc: Alan Maguire <alan.maguire@xxxxxxxxxx> Cc: Kui-Feng Lee <kuifeng@xxxxxx> Cc: Thomas Weißschuh <linux@xxxxxxxxxxxxxx> Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> --- dwarves.h | 1 + pahole.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/dwarves.h b/dwarves.h index 2393a6c3dc836f39..4dfaa01a00f782d9 100644 --- a/dwarves.h +++ b/dwarves.h @@ -87,6 +87,7 @@ struct conf_load { bool skip_encoding_btf_vars; bool btf_gen_floats; bool btf_encode_force; + bool reproducible_build; uint8_t hashtable_bits; uint8_t max_hashtable_bits; uint16_t kabi_prefix_len; diff --git a/pahole.c b/pahole.c index 0b9c2de74f146a4d..96e153432fa212a5 100644 --- a/pahole.c +++ b/pahole.c @@ -1235,6 +1235,7 @@ ARGP_PROGRAM_VERSION_HOOK_DEF = dwarves_print_version; #define ARGP_supported_btf_features 342 #define ARGP_btf_features_strict 343 #define ARGP_contains_enumerator 344 +#define ARGP_reproducible_build 345 /* --btf_features=feature1[,feature2,..] allows us to specify * a list of requested BTF features or "all" to enable all features. @@ -1819,6 +1820,11 @@ static const struct argp_option pahole__options[] = { .arg = "FEATURE_LIST_STRICT", .doc = "Specify supported BTF features in FEATURE_LIST_STRICT or 'all' for all supported features. Unlike --btf_features, unrecognized features will trigger an error." }, + { + .name = "reproducible_build", + .key = ARGP_reproducible_build, + .doc = "Generate reproducile BTF output" + }, { .name = NULL, } @@ -1997,6 +2003,8 @@ static error_t pahole__options_parser(int key, char *arg, conf_load.btf_gen_optimized = true; break; case ARGP_skip_encoding_btf_inconsistent_proto: conf_load.skip_encoding_btf_inconsistent_proto = true; break; + case ARGP_reproducible_build: + conf_load.reproducible_build = true; break; case ARGP_btf_features: parse_btf_features(arg, false); break; case ARGP_supported_btf_features: -- 2.44.0