Re: [PATCH RESEND] libtraceevent: Pretty print function parameters of enum-type
Donglin Peng <[email protected]> Sat, 7 Feb 2026 12:28:15 +0800
| Newsgroups | org.kernel.vger.linux-trace-devel |
|---|---|
| Message-ID | <CAErzpmuPy2t0WYFoFk13SN5LsRYmQW4Lf7t6b4-WCRGyt_wpLQ@mail.gmail.com> |
On Fri, Feb 6, 2026 at 11:01=E2=80=AFPM Steven Rostedt <[email protected]= > wrote: > > On Fri, 6 Feb 2026 17:15:12 +0800 > Donglin Peng <[email protected]> wrote: > > > From: Donglin Peng <[email protected]> > > Hi Donglin, > > > > > The tep_btf_print_args() function currently prints values of > > enum parameters in decimal format, which reduces readability. > > > > Utilize the BTF information to resolve enum type parameters > > and print their symbolic names where possible. This enhances > > the trace log readability by displaying meaningful identifiers > > instead of raw numbers. > > > > Before: > > mod_memcg_lruvec_state(lruvec=3D0xffff88800c18a540, idx=3D5, val=3D320) > > > > After: > > mod_memcg_lruvec_state(lruvec=3D0xffff88800c18a540, idx=3D5 [NR_SLAB_RE= CLAIMABLE_B], val=3D320) > > > > Cc: Steven Rostedt <[email protected]> > > Cc: Masami Hiramatsu <[email protected]> > > Signed-off-by: Donglin Peng <[email protected]> > > --- > > src/trace-btf.c | 20 +++++++++++++++++++- > > 1 file changed, 19 insertions(+), 1 deletion(-) > > > > diff --git a/src/trace-btf.c b/src/trace-btf.c > > index 859b0860ce2a..85f5fefb4d3b 100644 > > --- a/src/trace-btf.c > > +++ b/src/trace-btf.c > > @@ -32,6 +32,16 @@ struct tep_btf { > > #define REALLOC_SIZE (1 << 10) > > #define REALLOC_MASK (REALLOC_SIZE - 1) > > > > +#define for_each_enum(i, enum_type, member) \ > > + for (i =3D 0, member =3D btf_enum(enum_type); \ > > + i < BTF_INFO_VLEN(enum_type->info); \ > > + i++, member++) > > > You can make the above into: > > #define for_each_enum(enum_type, member) \ > for (int __i =3D 0, member =3D btf_enum(enum_type); \ > __i < BTF_INFO_VLEN((enum_type)->info); \ > __i++, member++) > > Then you don't need to pass in the counter "i". Good, I will fix it in the next version. > > (also it's good to put parenthesis around "enum_type"). Thanks. > > > + > > +static inline struct btf_enum *btf_enum(const struct btf_type *t) > > +{ > > + return (struct btf_enum *)(t + 1); > > +} > > + > > static const char *btf_name(struct tep_btf *btf, int off) > > { > > if (off < btf->hdr->str_len) > > @@ -546,10 +556,11 @@ int tep_btf_print_args(struct tep_handle *tep, st= ruct trace_seq *s, void *args, > > struct tep_btf *btf =3D tep->btf; > > struct btf_type *type =3D tep_btf_find_func(btf, func); > > struct btf_param *param; > > + struct btf_enum *enump; > > unsigned long long arg; > > unsigned int encode; > > const char *param_name; > > - int a, p, x, nr; > > + int a, p, x, nr, i; > > And the above doesn't need to be changed. Thanks, I understood. > > Thanks, > > -- Steve > > > > > if (!func) > > return -1; > > @@ -628,6 +639,13 @@ int tep_btf_print_args(struct tep_handle *tep, str= uct trace_seq *s, void *args, > > break; > > case BTF_KIND_ENUM: > > trace_seq_printf(s, "%lld", arg); > > + for_each_enum(i, t, enump) { > > + if (arg =3D=3D enump->val) { > > + trace_seq_printf(s, " [%s]", > > + btf_name(btf, enump->name= _off)); > > + break; > > + } > > + } > > break; > > default: > > /* This does not handle complex arguments */ >