[ARM] support tracing when using newer compilers
Since gcc 4.4 the name and calling convention for function profiling on ARM changed. With this patch both types are supported. See http://sourceware.org/ml/libc-ports/2008-04/msg00009.html for some details. Lightly-Tested-by: Anand Gadiyar <gadiyar@ti.com> Tested-by: Kevin Hilman <khilman@deeprootsystems.com> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
This commit is contained in:
Родитель
b88fb83b13
Коммит
181f817eaa
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
extern void mcount(void);
|
extern void mcount(void);
|
||||||
|
extern void __gnu_mcount_nc(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -186,4 +186,5 @@ EXPORT_SYMBOL(_find_next_bit_be);
|
||||||
|
|
||||||
#ifdef CONFIG_FUNCTION_TRACER
|
#ifdef CONFIG_FUNCTION_TRACER
|
||||||
EXPORT_SYMBOL(mcount);
|
EXPORT_SYMBOL(mcount);
|
||||||
|
EXPORT_SYMBOL(__gnu_mcount_nc);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -132,6 +132,25 @@ ftrace_call:
|
||||||
|
|
||||||
#else
|
#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)
|
ENTRY(mcount)
|
||||||
stmdb sp!, {r0-r3, lr}
|
stmdb sp!, {r0-r3, lr}
|
||||||
ldr r0, =ftrace_trace_function
|
ldr r0, =ftrace_trace_function
|
||||||
|
|
Загрузка…
Ссылка в новой задаче