summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorSimo Melenius <smelenius@nvidia.com>2010-04-16 12:52:36 +0300
committerAntti Hatala <ahatala@nvidia.com>2010-05-18 02:20:46 -0700
commit187d29263033449288573b6243d65f0fd5aef149 (patch)
treebba507ecfc2458db58b87bedaad6e6e303c31425 /arch
parent73c7b9730c740ccf34c4e080653f5cdfaa8680de (diff)
Enable ftrace using gcc 4.4 calling conventions.
This is a patch from http://marc.info/?l=linux-arm-kernel&m=124946219616111&w=2 that enables ftrace on ARM linux-2.6.29 by supporting newer gcc 4.4 calling conventions. See discussion in http://nvbugs/674756. Change-Id: I46c84ef6d9c025f5c56db5cd3934283e1a7a07d2 Reviewed-on: http://git-master/r/1147 Reviewed-by: Gary King <gking@nvidia.com> Reviewed-by: Simo Melenius <smelenius@nvidia.com> Tested-by: Simo Melenius <smelenius@nvidia.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/include/asm/ftrace.h1
-rw-r--r--arch/arm/kernel/armksyms.c1
-rw-r--r--arch/arm/kernel/entry-common.S19
3 files changed, 21 insertions, 0 deletions
diff --git a/arch/arm/include/asm/ftrace.h b/arch/arm/include/asm/ftrace.h
index 39c8bc1a006a..0d4c478e01b6 100644
--- a/arch/arm/include/asm/ftrace.h
+++ b/arch/arm/include/asm/ftrace.h
@@ -7,6 +7,7 @@
#ifndef __ASSEMBLY__
extern void mcount(void);
+extern void __gnu_mcount_nc(void);
#endif
#endif
diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c
index 6b5a79d64807..30c5a70b664b 100644
--- a/arch/arm/kernel/armksyms.c
+++ b/arch/arm/kernel/armksyms.c
@@ -190,4 +190,5 @@ EXPORT_SYMBOL(_find_next_bit_be);
#ifdef CONFIG_FUNCTION_TRACER
EXPORT_SYMBOL(mcount);
+EXPORT_SYMBOL(__gnu_mcount_nc);
#endif
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
index a68def8c9237..2ea14e7fab4e 100644
--- a/arch/arm/kernel/entry-common.S
+++ b/arch/arm/kernel/entry-common.S
@@ -122,6 +122,25 @@ ftrace_call:
#else
+ENTRY(__gnu_mcount_nc)
+ stmdb sp!, {r0-r3, lr}
+ ldr r0, =ftrace_trace_function
+ ldr r2, [r0]
+ adr r0, ftrace_stub
+ cmp r0, r2
+ bne gnu_trace
+ ldmia sp!, {r0-r3, ip, lr}
+ bx ip
+
+gnu_trace:
+ ldr r1, [sp, #20] @ lr of instrumented routine
+ mov r0, lr
+ sub r0, r0, #MCOUNT_INSN_SIZE
+ mov lr, pc
+ mov pc, r2
+ ldmia sp!, {r0-r3, ip, lr}
+ bx ip
+
ENTRY(mcount)
stmdb sp!, {r0-r3, lr}
ldr r0, =ftrace_trace_function