Re: [PATCH v8 4/5] arm64: implement ftrace with regs
From: Julien Thierry <hidden>
Date: 2019-02-13 10:30:19
Also in:
lkml
Hi Torsten, On 08/02/2019 15:10, Torsten Duwe wrote:
Implement ftrace with regs, based on the new gcc flag -fpatchable-function-entry (=2) Now that gcc8 added 2 NOPs at the beginning of each function, replace the first NOP thus generated with a quick LR saver (move it to scratch reg x9), so the 2nd replacement insn, the call to ftrace, does not clobber the value. Ftrace will then generate the standard stack frames. Note that patchable-function-entry in GCC disables IPA-RA, which means ABI register calling conventions are obeyed and scratch registers such as x9 are available. Introduce and handle an ftrace_regs_trampoline for module PLTs, right after ftrace_trampoline in an ftrace_trampolines[2] array, and double the size of the corresponding special section. Signed-off-by: Torsten Duwe <redacted> --- arch/arm64/include/asm/ftrace.h | 16 ++++ arch/arm64/include/asm/module.h | 3 arch/arm64/kernel/entry-ftrace.S | 125 +++++++++++++++++++++++++++++++++++++-- arch/arm64/kernel/ftrace.c | 117 ++++++++++++++++++++++++++++-------- arch/arm64/kernel/module-plts.c | 3 arch/arm64/kernel/module.c | 2 6 files changed, 231 insertions(+), 35 deletions(-)
[...]
quoted hunk ↗ jump to hunk
--- a/arch/arm64/include/asm/module.h +++ b/arch/arm64/include/asm/module.h@@ -32,7 +32,8 @@ struct mod_arch_specific { struct mod_plt_sec init; /* for CONFIG_DYNAMIC_FTRACE */ - struct plt_entry *ftrace_trampoline; + struct plt_entry *ftrace_trampolines; +#define MOD_ARCH_NR_FTRACE_TRAMPOLINES 2
Nit: I'd define this outside of the struct, just below MODULE_ARCH_VERMAGIC, and use the prefix "MODULE_ARCH" instead of "MOD_ARCH" as this seem to be already in use for a few other defines. Otherwise things look good to me: Reviewed-by: Julien Thierry <redacted> Cheers, -- Julien Thierry _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel