diff options
author | Simo Melenius <smelenius@nvidia.com> | 2010-04-16 12:52:36 +0300 |
---|---|---|
committer | Antti Hatala <ahatala@nvidia.com> | 2010-05-18 02:20:46 -0700 |
commit | 187d29263033449288573b6243d65f0fd5aef149 (patch) | |
tree | bba507ecfc2458db58b87bedaad6e6e303c31425 /arch | |
parent | 73c7b9730c740ccf34c4e080653f5cdfaa8680de (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.h | 1 | ||||
-rw-r--r-- | arch/arm/kernel/armksyms.c | 1 | ||||
-rw-r--r-- | arch/arm/kernel/entry-common.S | 19 |
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 |