Hi, On Mon, 8 Jun 2026 23:24:16 +0900 "Masami Hiramatsu (Google)" <[email protected]> wrote:
> Hi, > > Here is a series of patches to introduce more typecast features > to probe events, which includes 1. expanding BTF typecast to > fprobe and kprobe events, 2. introducing container_of like typecst > option, 3. supporting nested typecast, 4. adding $current special > variable support, 5. adding per-cpu dereference support, 6. adding > a testcase to check typecasts. Sashiko found many issues on this series. I'll fix those. BTW, for $current, I think it should typecasted to task_struct without typecast. (except if it is the container_of() type typecasting) In this case, ctx->strcut_btf will be updated automatically if $current is specified. Also, I'm thinking redesign +CPU/+PCPU/this_cpu_ptr(). Instead of those, what about introducing followings? - this_cpu_read(VAR) - this_cpu_ptr(VAR) Comments are welcome! Thanks, > > Steve introduced BTF typecast feature for eprobe[1]. > This series extends it and add more options: > > 1. Expanding BTF typecast to kprobe and fprobe. > (currently only function entry/exit) > > 2. Introduce container_of like typecast. This adds a "assigned > member" option to the typecast. > > (STRUCT,MEMBER)VAR->ANOTHER_MEMBER > > This casts VAR to STRUCT type but the VAR is as the address > of STRUCT.MEMBER. In C, it is: > > container_of(VAR, STRUCT, MEMBER)->ANOTHER_MEMBER > > 3. Support nested typecast, e.g. > > (STRUCT)((STRUCT2)VAR->MEMBER2)->MEMBER > > the nest level must be smaller than 3. > > 4. Add $current variable to point "current" task_struct. > This is useful with typecast, e.g. > > (task_struct)$current->pid > > 5. per-cpu dereference support. > > +CPU(VAR) is the same as this_cpu_read(VAR), and > +PCPU(VAR) is the same as this_cpu_ptr(VAR). > Also, "this_cpu_ptr(VAR)" is available. This is good > with nesting expression. > > (STRUCT)(this_cpu_ptr(VAR))->MEMBER > > (However, it might be better to allow a special way to omit > parentheses for thi_cpu_ptr()) > > And added a test script to test part of them. > > [1] https://lore.kernel.org/all/[email protected]/ > > > --- > > Masami Hiramatsu (Google) (7): > tracing/probes: Support typecast for various probe events > tracing/probes: Support nested typecast > tracing/probes: Support field specifier option for typecast > tracing/probes: Add $current variable support > tracing/probes: Add +CPU() and +PCPU() dereference method to fetcharg > tracing/probes: Support reserved this_cpu_ptr() method > tracing/probes: Add a new testcase for BTF typecasts > > > Documentation/trace/eprobetrace.rst | 11 + > Documentation/trace/fprobetrace.rst | 11 + > Documentation/trace/kprobetrace.rst | 12 + > kernel/trace/trace.c | 6 > kernel/trace/trace_probe.c | 312 > +++++++++++++++----- > kernel/trace/trace_probe.h | 12 + > kernel/trace/trace_probe_tmpl.h | 33 ++ > samples/trace_events/trace-events-sample.c | 38 ++ > samples/trace_events/trace-events-sample.h | 34 ++ > .../ftrace/test.d/dynevent/btf_probe_event.tc | 52 +++ > 10 files changed, 422 insertions(+), 99 deletions(-) > create mode 100644 > tools/testing/selftests/ftrace/test.d/dynevent/btf_probe_event.tc > > -- > Signature -- Masami Hiramatsu (Google) <[email protected]>
