Skip to content

Commit cba6505

Browse files
ARCv3: Support ftrace and function graph tracer
Signed-off-by: Bruno Mauricio <[email protected]>
1 parent 0942769 commit cba6505

File tree

3 files changed

+46
-22
lines changed

3 files changed

+46
-22
lines changed

arch/arc/Kconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ config ARC
3232
select HAVE_ARCH_TRANSPARENT_HUGEPAGE if ARC_MMU_V4
3333
select HAVE_DEBUG_STACKOVERFLOW
3434
select HAVE_DEBUG_KMEMLEAK
35-
select HAVE_FUNCTION_TRACER if ISA_ARCV2
36-
select HAVE_FUNCTION_GRAPH_TRACER if (ISA_ARCV2 && GCC_VERSION >= 140000)
35+
select HAVE_FUNCTION_TRACER if (ISA_ARCV2 || ISA_ARCV3)
36+
select HAVE_FUNCTION_GRAPH_TRACER if ISA_ARCV3 || (ISA_ARCV2 && GCC_VERSION >= 140000)
3737
select HAVE_FUTEX_CMPXCHG if FUTEX
3838
select HAVE_IOREMAP_PROT if !(ISA_ARCV3 && !64BIT)
3939
select HAVE_KERNEL_GZIP

arch/arc/Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ endif
1919
endif
2020
endif
2121

22+
ifdef CONFIG_FTRACE
23+
ifdef CONFIG_ISA_ARCV3
24+
cflags-y += -fno-omit-frame-pointer
25+
endif
26+
endif
27+
2228
ifdef CONFIG_ISA_ARCV3
2329
ifdef CONFIG_64BIT
2430
UTS_MACHINE := arc64

arch/arc/kernel/mcount.S

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,31 @@
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
1213
ENTRY(ftrace_stub)
1314
j_s [blink]
1415
ENDPROC(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

6979
ENDPROC(return_to_handler)
7080

7181
do_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

85103
do_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

Comments
 (0)