Message ID | 171509091569.162236.17928081833857878443.stgit@devnote2 (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | tracing: fprobe: function_graph: Multi-function graph and fprobe on fgraph | expand |
On Tue, 7 May 2024 23:08:35 +0900 "Masami Hiramatsu (Google)" <mhiramat@kernel.org> wrote: > From: Masami Hiramatsu (Google) <mhiramat@kernel.org> > > Add ftrace_regs definition for x86_64 in the ftrace header to > clarify what register will be accessible from ftrace_regs. > > Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> > --- > Changes in v3: > - Add rip to be saved. > Changes in v2: > - Newly added. > --- > arch/x86/include/asm/ftrace.h | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/arch/x86/include/asm/ftrace.h b/arch/x86/include/asm/ftrace.h > index cf88cc8cc74d..c88bf47f46da 100644 > --- a/arch/x86/include/asm/ftrace.h > +++ b/arch/x86/include/asm/ftrace.h > @@ -36,6 +36,12 @@ static inline unsigned long ftrace_call_adjust(unsigned long addr) > > #ifdef CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS > struct ftrace_regs { > + /* > + * On the x86_64, the ftrace_regs saves; > + * rax, rcx, rdx, rdi, rsi, r8, r9, rbp, rip and rsp. > + * Also orig_ax is used for passing direct trampoline address. > + * x86_32 doesn't support ftrace_regs. Should add a comment that if fregs->regs.cs is set, then all of the pt_regs is valid. And x86_32 does support ftrace_regs, it just doesn't support having a subset of it. -- Steve > + */ > struct pt_regs regs; > }; >
On Thu, 23 May 2024 19:14:59 -0400 Steven Rostedt <rostedt@goodmis.org> wrote: > On Tue, 7 May 2024 23:08:35 +0900 > "Masami Hiramatsu (Google)" <mhiramat@kernel.org> wrote: > > > From: Masami Hiramatsu (Google) <mhiramat@kernel.org> > > > > Add ftrace_regs definition for x86_64 in the ftrace header to > > clarify what register will be accessible from ftrace_regs. > > > > Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> > > --- > > Changes in v3: > > - Add rip to be saved. > > Changes in v2: > > - Newly added. > > --- > > arch/x86/include/asm/ftrace.h | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/arch/x86/include/asm/ftrace.h b/arch/x86/include/asm/ftrace.h > > index cf88cc8cc74d..c88bf47f46da 100644 > > --- a/arch/x86/include/asm/ftrace.h > > +++ b/arch/x86/include/asm/ftrace.h > > @@ -36,6 +36,12 @@ static inline unsigned long ftrace_call_adjust(unsigned long addr) > > > > #ifdef CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS > > struct ftrace_regs { > > + /* > > + * On the x86_64, the ftrace_regs saves; > > + * rax, rcx, rdx, rdi, rsi, r8, r9, rbp, rip and rsp. > > + * Also orig_ax is used for passing direct trampoline address. > > + * x86_32 doesn't support ftrace_regs. > > Should add a comment that if fregs->regs.cs is set, then all of the pt_regs > is valid. But what about rbx and r1*? Only regs->cs should be care for pt_regs? Or, did you mean "the ftrace_regs is valid"? > And x86_32 does support ftrace_regs, it just doesn't support > having a subset of it. Oh, thanks. I'll update the comment about x86_32. Thank you, > > -- Steve > > > > + */ > > struct pt_regs regs; > > }; > > > >
On Fri, 24 May 2024 10:37:54 +0900 Masami Hiramatsu (Google) <mhiramat@kernel.org> wrote: > > > > > > #ifdef CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS > > > struct ftrace_regs { > > > + /* > > > + * On the x86_64, the ftrace_regs saves; > > > + * rax, rcx, rdx, rdi, rsi, r8, r9, rbp, rip and rsp. > > > + * Also orig_ax is used for passing direct trampoline address. > > > + * x86_32 doesn't support ftrace_regs. > > > > Should add a comment that if fregs->regs.cs is set, then all of the pt_regs > > is valid. > > But what about rbx and r1*? Only regs->cs should be care for pt_regs? > Or, did you mean "the ftrace_regs is valid"? Yeah, on x86_64 ftrace_regs uses regs.cs to denote if it is valid or not: static __always_inline struct pt_regs * arch_ftrace_get_regs(struct ftrace_regs *fregs) { /* Only when FL_SAVE_REGS is set, cs will be non zero */ if (!fregs->regs.cs) return NULL; return &fregs->regs; } -- Steve
diff --git a/arch/x86/include/asm/ftrace.h b/arch/x86/include/asm/ftrace.h index cf88cc8cc74d..c88bf47f46da 100644 --- a/arch/x86/include/asm/ftrace.h +++ b/arch/x86/include/asm/ftrace.h @@ -36,6 +36,12 @@ static inline unsigned long ftrace_call_adjust(unsigned long addr) #ifdef CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS struct ftrace_regs { + /* + * On the x86_64, the ftrace_regs saves; + * rax, rcx, rdx, rdi, rsi, r8, r9, rbp, rip and rsp. + * Also orig_ax is used for passing direct trampoline address. + * x86_32 doesn't support ftrace_regs. + */ struct pt_regs regs; };