aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/include/asm/ftrace.h
diff options
context:
space:
mode:
authorAbel Vesa <abelvesa@linux.com>2017-05-26 21:49:47 +0100
committerRussell King <rmk+kernel@armlinux.org.uk>2017-06-18 22:25:16 +0100
commit620176f335017fbfcbc79d26a8c9beb6e64f4868 (patch)
treee5865d1ab6cfe66b5009ce118c08d4b9cc49a711 /arch/arm/include/asm/ftrace.h
parentARM: make configuration of userspace Thumb support an expert option (diff)
downloadlinux-dev-620176f335017fbfcbc79d26a8c9beb6e64f4868.tar.xz
linux-dev-620176f335017fbfcbc79d26a8c9beb6e64f4868.zip
ARM: 8678/1: ftrace: Adds support for CONFIG_DYNAMIC_FTRACE_WITH_REGS
The DYNAMIC_FTRACE_WITH_REGS configuration makes it possible for a ftrace operation to specify if registers need to saved/restored by the ftrace handler. This is needed by kgraft and possibly other ftrace-based tools, and the ARM architecture is currently lacking this feature. It would also be the first step to support the "Kprobes-on-ftrace" optimization on ARM. This patch introduces a new ftrace handler that stores the registers on the stack before calling the next stage. The registers are restored from the stack before going back to the instrumented function. A side-effect of this patch is to activate the support for ftrace_modify_call() as it defines ARCH_SUPPORTS_FTRACE_OPS for the ARM architecture. Signed-off-by: Abel Vesa <abelvesa@linux.com> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Diffstat (limited to 'arch/arm/include/asm/ftrace.h')
-rw-r--r--arch/arm/include/asm/ftrace.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/arm/include/asm/ftrace.h b/arch/arm/include/asm/ftrace.h
index 22b73112b75f..f379881d5cc3 100644
--- a/arch/arm/include/asm/ftrace.h
+++ b/arch/arm/include/asm/ftrace.h
@@ -1,6 +1,10 @@
#ifndef _ASM_ARM_FTRACE
#define _ASM_ARM_FTRACE
+#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
+#define ARCH_SUPPORTS_FTRACE_OPS 1
+#endif
+
#ifdef CONFIG_FUNCTION_TRACER
#define MCOUNT_ADDR ((unsigned long)(__gnu_mcount_nc))
#define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */