| From f09309e302f7ccdd7472dee0c1bd5a3723d1b80e Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 18 Aug 2024 21:48:13 +0900 |
| Subject: tracing: Add a comment about ftrace_regs definition |
| |
| From: Masami Hiramatsu (Google) <mhiramat@kernel.org> |
| |
| [ Upstream commit a370b72ec7165ebe1230d0225cbe66f6526e68ef ] |
| |
| To clarify what will be expected on ftrace_regs, add a comment to the |
| architecture independent definition of the ftrace_regs. |
| |
| Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> |
| Acked-by: Mark Rutland <mark.rutland@arm.com> |
| Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> |
| Stable-dep-of: aea251799998 ("x86/fgraph,bpf: Switch kprobe_multi program stack unwind to hw_regs path") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| include/linux/ftrace.h | 26 ++++++++++++++++++++++++++ |
| 1 file changed, 26 insertions(+) |
| |
| diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h |
| index fd5e84d0ec478..42106b3de3961 100644 |
| --- a/include/linux/ftrace.h |
| +++ b/include/linux/ftrace.h |
| @@ -117,6 +117,32 @@ extern int ftrace_enabled; |
| |
| #ifndef CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS |
| |
| +/** |
| + * ftrace_regs - ftrace partial/optimal register set |
| + * |
| + * ftrace_regs represents a group of registers which is used at the |
| + * function entry and exit. There are three types of registers. |
| + * |
| + * - Registers for passing the parameters to callee, including the stack |
| + * pointer. (e.g. rcx, rdx, rdi, rsi, r8, r9 and rsp on x86_64) |
| + * - Registers for passing the return values to caller. |
| + * (e.g. rax and rdx on x86_64) |
| + * - Registers for hooking the function call and return including the |
| + * frame pointer (the frame pointer is architecture/config dependent) |
| + * (e.g. rip, rbp and rsp for x86_64) |
| + * |
| + * Also, architecture dependent fields can be used for internal process. |
| + * (e.g. orig_ax on x86_64) |
| + * |
| + * On the function entry, those registers will be restored except for |
| + * the stack pointer, so that user can change the function parameters |
| + * and instruction pointer (e.g. live patching.) |
| + * On the function exit, only registers which is used for return values |
| + * are restored. |
| + * |
| + * NOTE: user *must not* access regs directly, only do it via APIs, because |
| + * the member can be changed according to the architecture. |
| + */ |
| struct ftrace_regs { |
| struct pt_regs regs; |
| }; |
| -- |
| 2.51.0 |
| |