Skip to content

Commit 6ca8ec3

Browse files
ARCv2: Implemented ftrace
Adapted ARCv3 tracing to work for ARCv2. ARCv2 requires extra support from GCC Signed-off-by: BrunoASMauricio <[email protected]>
1 parent 9f972b6 commit 6ca8ec3

File tree

4 files changed

+26
-15
lines changed

4 files changed

+26
-15
lines changed

arch/arc/Kconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ config ARC
3838
select HAVE_KERNEL_LZMA
3939
select HAVE_KPROBES
4040
select HAVE_KRETPROBES
41-
select HAVE_FUNCTION_TRACER if ISA_ARCV3
42-
select HAVE_FUNCTION_GRAPH_TRACER if ISA_ARCV3
41+
select HAVE_FUNCTION_TRACER
42+
select HAVE_FUNCTION_GRAPH_TRACER
4343
select HAVE_MOD_ARCH_SPECIFIC
4444
select HAVE_PERF_EVENTS
4545
select HANDLE_DOMAIN_IRQ

arch/arc/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,10 @@ cflags-$(CONFIG_ARC_HAS_LL128) += -m128
6262
endif
6363

6464
ifdef CONFIG_FTRACE
65+
ifdef CONFIG_ISA_ARCV3
6566
cflags-y += -fno-omit-frame-pointer
6667
endif
68+
endif
6769

6870
cflags-y += -Wa,-I$(srctree)/arch/arc/include
6971

arch/arc/kernel/Makefile

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ endif
1515

1616
ifdef CONFIG_FTRACE
1717

18-
# Currently ftrace only works on arcv3 due to ABI
19-
ifdef CONFIG_ISA_ARCV3
20-
2118
# ftrace cant be traced (infinite loop)
2219
CFLAGS_REMOVE_ftrace.o = -pg
2320
CFLAGS_REMOVE_mcount.o = -pg
@@ -28,8 +25,6 @@ obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o
2825

2926
endif
3027

31-
endif
32-
3328
obj-$(CONFIG_ISA_ARCOMPACT) += entry-compact.o
3429
obj-$(CONFIG_ISA_ARCV2) += entry-arcv2.o
3530
obj-$(CONFIG_ISA_ARCV3) += entry-arcv3.o

arch/arc/kernel/mcount.S

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
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
9694
do_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

118130
LOAD_ABI
119131
j_s [blink]
132+
133+
EXPORT_SYMBOL(_mcount)

0 commit comments

Comments
 (0)