ARM: 9457/1: ftrace: Implement HAVE_FUNCTION_GRAPH_FREGS

Enable support for ftrace's funcgraph-retval feature by capturing r0-r3
and fp.
Since ARM does not provide its own __arch_ftrace_regs structure,
we instead populate pt_regs with the registers required by ftrace.

Cc: Donglin Peng <pengdonglin@sangfor.com.cn>
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
This commit is contained in:
Richard Weinberger
2025-08-20 09:12:46 +01:00
committed by Russell King (Oracle)
parent fb0e5f266e
commit 9aa791c8d7
2 changed files with 15 additions and 4 deletions

View File

@@ -108,6 +108,7 @@ config ARM
select HAVE_GUP_FAST if ARM_LPAE
select HAVE_FUNCTION_ERROR_INJECTION
select HAVE_FUNCTION_GRAPH_TRACER
select HAVE_FUNCTION_GRAPH_FREGS
select HAVE_FUNCTION_TRACER if !XIP_KERNEL
select HAVE_GCC_PLUGINS
select HAVE_HW_BREAKPOINT if PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)

View File

@@ -257,11 +257,21 @@ ENDPROC(ftrace_graph_regs_caller)
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
ENTRY(return_to_handler)
stmdb sp!, {r0-r3}
add r0, sp, #16 @ sp at exit of instrumented routine
mov ip, sp @ sp at exit of instrumented routine
sub sp, #PT_REGS_SIZE
str r0, [sp, #S_R0]
str r1, [sp, #S_R1]
str r2, [sp, #S_R2]
str r3, [sp, #S_R3]
str ip, [sp, #S_FP]
mov r0, sp
bl ftrace_return_to_handler
mov lr, r0 @ r0 has real ret addr
ldmia sp!, {r0-r3}
mov lr, r0 @ r0 has real ret addr
ldr r3, [sp, #S_R3]
ldr r2, [sp, #S_R2]
ldr r1, [sp, #S_R1]
ldr r0, [sp, #S_R0]
add sp, sp, #PT_REGS_SIZE @ restore stack pointer
ret lr
ENDPROC(return_to_handler)
#endif