tracing/probes: Support $argN in return probe (kprobe and fprobe)
authorMasami Hiramatsu (Google) <mhiramat@kernel.org>
Mon, 4 Mar 2024 03:40:55 +0000 (12:40 +0900)
committerMasami Hiramatsu (Google) <mhiramat@kernel.org>
Wed, 6 Mar 2024 15:27:34 +0000 (00:27 +0900)
commit25f00e40ce7953db197af3a59233711d154c9d80
tree08be7fcc68b36f8df43cc7096c4bd111d9a2f23d
parentc18f9eabeec766ac8348ce7391d6fd368198522c
tracing/probes: Support $argN in return probe (kprobe and fprobe)

Support accessing $argN in the return probe events. This will help users to
record entry data in function return (exit) event for simplfing the function
entry/exit information in one event, and record the result values (e.g.
allocated object/initialized object) at function exit.

For example, if we have a function `int init_foo(struct foo *obj, int param)`
sometimes we want to check how `obj` is initialized. In such case, we can
define a new return event like below;

 # echo 'r init_foo retval=$retval param=$arg2 field1=+0($arg1)' >> kprobe_events

Thus it records the function parameter `param` and its result `obj->field1`
(the dereference will be done in the function exit timing) value at once.

This also support fprobe, BTF args and'$arg*'. So if CONFIG_DEBUG_INFO_BTF
is enabled, we can trace both function parameters and the return value
by following command.

 # echo 'f target_function%return $arg* $retval' >> dynamic_events

Link: https://lore.kernel.org/all/170952365552.229804.224112990211602895.stgit@devnote2/
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
kernel/trace/trace.c
kernel/trace/trace_eprobe.c
kernel/trace/trace_fprobe.c
kernel/trace/trace_kprobe.c
kernel/trace/trace_probe.c
kernel/trace/trace_probe.h
kernel/trace/trace_probe_tmpl.h
kernel/trace/trace_uprobe.c
tools/testing/selftests/ftrace/test.d/dynevent/fprobe_syntax_errors.tc
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_syntax_errors.tc