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 <duwe@xxxxxxx> > > --- > 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(-) [...] > --- 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 <julien.thierry@xxxxxxx> Cheers, -- Julien Thierry