btf_encoder: Allow disabling BTF var encoding.
A new feature was introduced in commit f3d9054ba8
("btf_encoder: Teach
pahole to store percpu variables in vmlinux BTF.") which encodes kernel
percpu variables into BTF. Add a flag --skip_encoding_btf_vars to allow
users to toggle this feature off, so that the rollout of pahole v1.18
can be protected by potential bugs in this feature.
Committer notes:
Added missing man page entry.
Signed-off-by: Hao Luo <haoluo@google.com>
Cc: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Yonghong Song <yhs@fb.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
f5847773d9
commit
da4ad2f650
|
@ -237,7 +237,8 @@ static struct variable *hashaddr__find_variable(const struct hlist_head hashtabl
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cu__encode_btf(struct cu *cu, int verbose, bool force)
|
int cu__encode_btf(struct cu *cu, int verbose, bool force,
|
||||||
|
bool skip_encoding_vars)
|
||||||
{
|
{
|
||||||
bool add_index_type = false;
|
bool add_index_type = false;
|
||||||
uint32_t type_id_off;
|
uint32_t type_id_off;
|
||||||
|
@ -314,6 +315,8 @@ int cu__encode_btf(struct cu *cu, int verbose, bool force)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (skip_encoding_vars)
|
||||||
|
goto out;
|
||||||
|
|
||||||
if (btfe->percpu_shndx == 0 || !btfe->symtab)
|
if (btfe->percpu_shndx == 0 || !btfe->symtab)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
|
@ -13,6 +13,7 @@ struct cu;
|
||||||
|
|
||||||
int btf_encoder__encode();
|
int btf_encoder__encode();
|
||||||
|
|
||||||
int cu__encode_btf(struct cu *cu, int verbose, bool force);
|
int cu__encode_btf(struct cu *cu, int verbose, bool force,
|
||||||
|
bool skip_encoding_vars);
|
||||||
|
|
||||||
#endif /* _BTF_ENCODER_H_ */
|
#endif /* _BTF_ENCODER_H_ */
|
||||||
|
|
|
@ -177,6 +177,10 @@ Show only structs with at least NR_HOLES holes.
|
||||||
Show the file and line number where the tags were defined, if available in
|
Show the file and line number where the tags were defined, if available in
|
||||||
the debugging information.
|
the debugging information.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-\-skip_encoding_btf_vars
|
||||||
|
Do not encode VARs in BTF.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-l, \-\-show_first_biggest_size_base_type_member
|
.B \-l, \-\-show_first_biggest_size_base_type_member
|
||||||
Show first biggest size base_type member.
|
Show first biggest size base_type member.
|
||||||
|
|
11
pahole.c
11
pahole.c
|
@ -26,6 +26,7 @@
|
||||||
static bool btf_encode;
|
static bool btf_encode;
|
||||||
static bool ctf_encode;
|
static bool ctf_encode;
|
||||||
static bool first_obj_only;
|
static bool first_obj_only;
|
||||||
|
static bool skip_encoding_btf_vars;
|
||||||
|
|
||||||
static uint8_t class__include_anonymous;
|
static uint8_t class__include_anonymous;
|
||||||
static uint8_t class__include_nested_anonymous;
|
static uint8_t class__include_nested_anonymous;
|
||||||
|
@ -809,6 +810,7 @@ ARGP_PROGRAM_VERSION_HOOK_DEF = dwarves_print_version;
|
||||||
#define ARGP_header_type 314
|
#define ARGP_header_type 314
|
||||||
#define ARGP_size_bytes 315
|
#define ARGP_size_bytes 315
|
||||||
#define ARGP_range 316
|
#define ARGP_range 316
|
||||||
|
#define ARGP_skip_encoding_btf_vars 317
|
||||||
|
|
||||||
static const struct argp_option pahole__options[] = {
|
static const struct argp_option pahole__options[] = {
|
||||||
{
|
{
|
||||||
|
@ -1087,6 +1089,11 @@ static const struct argp_option pahole__options[] = {
|
||||||
.key = 'J',
|
.key = 'J',
|
||||||
.doc = "Encode as BTF",
|
.doc = "Encode as BTF",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "skip_encoding_btf_vars",
|
||||||
|
.key = ARGP_skip_encoding_btf_vars,
|
||||||
|
.doc = "Do not encode VARs in BTF."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.name = "force",
|
.name = "force",
|
||||||
.key = 'j',
|
.key = 'j',
|
||||||
|
@ -1207,6 +1214,8 @@ static error_t pahole__options_parser(int key, char *arg,
|
||||||
conf.range = arg; break;
|
conf.range = arg; break;
|
||||||
case ARGP_header_type:
|
case ARGP_header_type:
|
||||||
conf.header_type = arg; break;
|
conf.header_type = arg; break;
|
||||||
|
case ARGP_skip_encoding_btf_vars:
|
||||||
|
skip_encoding_btf_vars = true; break;
|
||||||
default:
|
default:
|
||||||
return ARGP_ERR_UNKNOWN;
|
return ARGP_ERR_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
@ -2352,7 +2361,7 @@ static enum load_steal_kind pahole_stealer(struct cu *cu,
|
||||||
goto filter_it;
|
goto filter_it;
|
||||||
|
|
||||||
if (btf_encode) {
|
if (btf_encode) {
|
||||||
cu__encode_btf(cu, global_verbose, force);
|
cu__encode_btf(cu, global_verbose, force, skip_encoding_btf_vars);
|
||||||
return LSK__KEEPIT;
|
return LSK__KEEPIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue