77
88#include <linux/linkage.h>
99#include <asm-generic/export.h>
10+ #include <asm/assembler.h>
1011
1112; ftrace placeholder, just return to caller
1213ENTRY(ftrace_stub)
1314 j_s [blink]
1415ENDPROC(ftrace_stub)
1516
1617.macro SAVE_ABI
17- push blink
18+ PUSHR blink
19+ PUSHR fp
1820.endm
1921
2022.macro LOAD_ABI
21- pop blink
23+ POPR fp
24+ POPR blink
2225.endm
2326
2427.macro SAVE_ABI_RET
25- push r0
26- push r1
28+ PUSHR r0
29+ PUSHR r1
2730.endm
2831
2932.macro LOAD_ABI_RET
30- pop r1
31- pop r0
33+ POPR r1
34+ POPR r0
3235.endm
3336
3437; r0 has the frompc (targets parent ip)
@@ -38,17 +41,23 @@ ENTRY(_mcount)
3841#ifdef CONFIG_FUNCTION_GRAPH_TRACER
3942
4043 ; *ftrace_graph_return != ftrace_stub
41- ld r3 , [ ftrace_graph_return ]
42- brne r3 , @ftrace_stub , @do_ftrace_graph_caller
44+ MOVA r3, ftrace_graph_return
45+ LDR r3, r3
46+ MOVA r4, @ftrace_stub
47+ brne r3, r4, @do_ftrace_graph_caller
4348 ; *ftrace_graph_entry != *ftrace_graph_entry_stub
44- ld r3 , [ ftrace_graph_entry ]
45- brne r3 , @ftrace_graph_entry_stub , @do_ftrace_graph_caller
49+ MOVA r3, @ftrace_graph_entry
50+ LDR r3, r3
51+ MOVA r4, @ftrace_graph_entry_stub
52+ brne r3, r4, @do_ftrace_graph_caller
4653
4754#endif
4855
4956 ; *ftrace_trace_function != ftrace_stub
50- ld r2 , [ ftrace_trace_function ]
51- brne r2 , @ftrace_stub , @do_trace
57+ MOVA r2, ftrace_trace_function
58+ LDR r2, r2
59+ MOVA r3, @ftrace_stub
60+ brne r2, r3, @do_trace
5261 ; Return
5362 j_s [blink]
5463
@@ -61,31 +70,40 @@ ENTRY(return_to_handler)
6170 ; Save return value (if any) from handled routine
6271 SAVE_ABI_RET
6372 ; Will return true blink on r0
64- jl ftrace_return_to_handler
65- mov r2 , r0
73+ MOVA r0, @ftrace_return_to_handler
74+ jl [r0]
75+ MOVR r2, r0
6676 LOAD_ABI_RET
6777 j [r2]
6878
6979ENDPROC(return_to_handler)
7080
7181do_ftrace_graph_caller:
82+
83+ #ifndef CONFIG_ISA_ARCV3
7284 ; ABI does not allow us to infer blink location
7385 ; ARC GCC port inserts into r1 the delta between the pushed blink and
7486 ; the sp at call time
7587 ; We perform calculation before any push (sp change) happens
76- add r0 , r1 , sp
88+ ADDR r0, r1, sp
89+ SAVE_ABI
90+ SUBR r0, r0, REGSZASM
91+ #else
7792 SAVE_ABI
78- sub r0 , r0 , 4
79- mov r1 , blink
80- jl prepare_ftrace_return
93+ ADDR r0, fp, REGSZASM
94+ #endif
95+
96+ MOVR r1, blink
97+ MOVA r2, @prepare_ftrace_return
98+ jl [r2]
8199 LOAD_ABI
82100 j_s [blink]
83101#endif
84102
85103do_trace:
86104 SAVE_ABI
87- mov r1 , r0
88- mov r0 , blink
105+ MOVR r1, r0
106+ MOVR r0, blink
89107 jl [r2]
90108 ; load ABI state and jump to blink (in stack)
91109 LOAD_ABI
0 commit comments