aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/include/asm/ftrace.h
diff options
context:
space:
mode:
authorRabin Vincent <rabin@rab.in>2010-08-10 19:43:28 +0100
committerRussell King <rmk+kernel@arm.linux.org.uk>2010-09-02 15:27:40 +0100
commit3b6c223b1b97ad60bbb0f4efda57d649414ac2a2 (patch)
tree291dcb285e8cb64415a82ed1c65dc9681921a257 /arch/arm/include/asm/ftrace.h
parentf9810a82536e0c730c57844753e6c08cc7f77881 (diff)
downloadkernel_samsung_smdk4412-3b6c223b1b97ad60bbb0f4efda57d649414ac2a2.zip
kernel_samsung_smdk4412-3b6c223b1b97ad60bbb0f4efda57d649414ac2a2.tar.gz
kernel_samsung_smdk4412-3b6c223b1b97ad60bbb0f4efda57d649414ac2a2.tar.bz2
ARM: 6318/1: ftrace: fix and update dynamic ftrace
This adds mcount recording and updates dynamic ftrace for ARM to work with the new ftrace dyamic tracing implementation. It also adds support for the mcount format used by newer ARM compilers. With dynamic tracing, mcount() is implemented as a nop. Callsites are patched on startup with nops, and dynamically patched to call to the ftrace_caller() routine as needed. Acked-by: Steven Rostedt <rostedt@goodmis.org> [recordmcount.pl change] Signed-off-by: Rabin Vincent <rabin@rab.in> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/include/asm/ftrace.h')
-rw-r--r--arch/arm/include/asm/ftrace.h19
1 files changed, 18 insertions, 1 deletions
diff --git a/arch/arm/include/asm/ftrace.h b/arch/arm/include/asm/ftrace.h
index 103f7ee..4a56a2e 100644
--- a/arch/arm/include/asm/ftrace.h
+++ b/arch/arm/include/asm/ftrace.h
@@ -2,12 +2,29 @@
#define _ASM_ARM_FTRACE
#ifdef CONFIG_FUNCTION_TRACER
-#define MCOUNT_ADDR ((long)(mcount))
+#define MCOUNT_ADDR ((unsigned long)(__gnu_mcount_nc))
#define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */
#ifndef __ASSEMBLY__
extern void mcount(void);
extern void __gnu_mcount_nc(void);
+
+#ifdef CONFIG_DYNAMIC_FTRACE
+struct dyn_arch_ftrace {
+#ifdef CONFIG_OLD_MCOUNT
+ bool old_mcount;
+#endif
+};
+
+static inline unsigned long ftrace_call_adjust(unsigned long addr)
+{
+ return addr;
+}
+
+extern void ftrace_caller_old(void);
+extern void ftrace_call_old(void);
+#endif
+
#endif
#endif