99#include <linux/init.h>
1010#include <linux/linkage.h>
1111#include <asm-generic/export.h>
12- #include <asm/asm-macro-64-bit .h>
12+ #include <asm/assembler .h>
1313
1414.text
1515; ftrace placeholder, just return to caller
@@ -31,11 +31,9 @@ ENDPROC(ftrace_stub)
3131.macro SAVE_ABI_RET
3232 PUSHR r0
3333 PUSHR r1
34- PUSHR blink
3534.endm
3635
3736.macro LOAD_ABI_RET
38- POPR blink
3937 POPR r1
4038 POPR r0
4139.endm
@@ -68,21 +66,21 @@ ENTRY(_mcount)
6866
6967 ; *ftrace_graph_return != ftrace_stub
7068 MOVA r3, ftrace_graph_return
71- LD64 r3, r3
69+ LDR r3, r3
7270 MOVA r4, @ftrace_stub
7371 brne r3, r4, @do_ftrace_graph_caller
7472
7573 ; *ftrace_graph_entry != *ftrace_graph_entry_stub
7674 MOVA r3, @ftrace_graph_entry
77- LD64 r3, r3
75+ LDR r3, r3
7876 MOVA r4, @ftrace_graph_entry_stub
7977 brne r3, r4, @do_ftrace_graph_caller
8078
8179#endif
8280
8381 ; *ftrace_trace_function != ftrace_stub
8482 MOVA r2, ftrace_trace_function
85- LD64 r2, r2
83+ LDR r2, r2
8684
8785 MOVA r3, @ftrace_stub
8886 brne r2, r3, @do_trace
@@ -95,9 +93,23 @@ ENDPROC(_mcount)
9593#ifdef CONFIG_FUNCTION_GRAPH_TRACER
9694do_ftrace_graph_caller:
9795
98- SAVE_ABI
96+ #ifndef CONFIG_ISA_ARCV3
97+ # ABI does not allow us to infer blink location
98+ # ARC GCC port inserts into r1 the delta between the pushed blink and
99+ # the sp at call time
100+ # We perform calculation before any push (sp change) happens
101+ ADDR r0, r1, sp
102+
103+ SAVE_ABI
104+
105+ SUBR r0, r0, REGSZASM
106+ #else
107+ SAVE_ABI
108+
109+ ADDR r0, fp, REGSZASM
110+ #endif
111+
99112
100- ADDR r0, fp, 8
101113 MOVR r1, blink
102114
103115 MOVA r2, @prepare_ftrace_return
@@ -117,3 +129,5 @@ SAVE_ABI
117129
118130LOAD_ABI
119131 j_s [blink]
132+
133+ EXPORT_SYMBOL(_mcount)
0 commit comments