On Tue, 05 Sep 2023 09:17:02 +0200 Sven Schnelle <svens@xxxxxxxxxxxxx> wrote: > Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> writes: > > > I found that this is not enough becuase s390/loongarch already implemented > > their rethook, and as far as I can see, the s390 ftrace_regs does not save > > the required registers for rethook. Thus, for such architecture, we need > > another kconfig flag and keep using the pt_regs for rethook. > > Looking into arch_rethook_trampoline() i think we save all required > registers - which register do you think are missing? Or is there another > function i should look at? Yes, arch_rethook_trampoline() is good. It needs to save all registers. In this series, I'm trying to change the pt_regs with ftrace_regs which will reduce trampoline overhead if DYNAMIC_FTRACE_WITH_ARGS=y. kprobe -> (pt_regs) -> rethook_try_hook() fprobe -> (ftrace_regs) -> rethook_try_hook_ftrace() # new function Thus, we need to ensure that the ftrace_regs which is saved in the ftrace *without* FTRACE_WITH_REGS flags, can be used for hooking the function return. I saw; void arch_rethook_prepare(struct rethook_node *rh, struct pt_regs *regs, bool mcount) { rh->ret_addr = regs->gprs[14]; rh->frame = regs->gprs[15]; /* Replace the return addr with trampoline addr */ regs->gprs[14] = (unsigned long)&arch_rethook_trampoline; } gprs[15] is a stack pointer, so it is saved in ftrace_regs too, but what about gprs[14]? (I guess it is a link register) We need to read the gprs[14] and ensure that is restored to gpr14 when the ftrace is exit even without FTRACE_WITH_REGS flag. IOW, it is ftrace save regs/restore regs code issue. I need to check how the function_graph implements it. Thank you, -- Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>