bpf: simplify tnum output if a fully known constant
Emit tnum representation as just a constant if all bits are known. Use decimal-vs-hex logic to determine exact format of emitted constant value, just like it's done for register range values. For that move tnum_strn() to kernel/bpf/log.c to reuse decimal-vs-hex determination logic and constants. Acked-by: Shung-Hsi Yu <shung-hsi.yu@suse.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/r/20231202175705.885270-12-andrii@kernel.org Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
committed by
Alexei Starovoitov
parent
5c19e1d05e
commit
81eff2e364
@@ -539,6 +539,19 @@ static void verbose_snum(struct bpf_verifier_env *env, s64 num)
|
||||
verbose(env, "%#llx", num);
|
||||
}
|
||||
|
||||
int tnum_strn(char *str, size_t size, struct tnum a)
|
||||
{
|
||||
/* print as a constant, if tnum is fully known */
|
||||
if (a.mask == 0) {
|
||||
if (is_unum_decimal(a.value))
|
||||
return snprintf(str, size, "%llu", a.value);
|
||||
else
|
||||
return snprintf(str, size, "%#llx", a.value);
|
||||
}
|
||||
return snprintf(str, size, "(%#llx; %#llx)", a.value, a.mask);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tnum_strn);
|
||||
|
||||
static void print_scalar_ranges(struct bpf_verifier_env *env,
|
||||
const struct bpf_reg_state *reg,
|
||||
const char **sep)
|
||||
|
||||
Reference in New Issue
Block a user