Skip to content

Commit 628868d

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 628868d

File tree

4 files changed

+27
-13
lines changed

4 files changed

+27
-13
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: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@
99
#include <linux/init.h>
1010
#include <linux/linkage.h>
1111
#include <asm-generic/export.h>
12+
13+
#ifdef CONFIG_ISA_ARCV3
1214
#include <asm/asm-macro-64-bit.h>
15+
#else
16+
#include <asm/asm-macro-32-bit.h>
17+
#endif
1318

1419
.text
1520
; ftrace placeholder, just return to caller
@@ -31,11 +36,9 @@ ENDPROC(ftrace_stub)
3136
.macro SAVE_ABI_RET
3237
PUSHR r0
3338
PUSHR r1
34-
PUSHR blink
3539
.endm
3640

3741
.macro LOAD_ABI_RET
38-
POPR blink
3942
POPR r1
4043
POPR r0
4144
.endm
@@ -68,21 +71,21 @@ ENTRY(_mcount)
6871

6972
; *ftrace_graph_return != ftrace_stub
7073
MOVA r3, ftrace_graph_return
71-
LD64 r3, r3
74+
LDR r3, r3
7275
MOVA r4, @ftrace_stub
7376
brne r3, r4, @do_ftrace_graph_caller
7477

7578
; *ftrace_graph_entry != *ftrace_graph_entry_stub
7679
MOVA r3, @ftrace_graph_entry
77-
LD64 r3, r3
80+
LDR r3, r3
7881
MOVA r4, @ftrace_graph_entry_stub
7982
brne r3, r4, @do_ftrace_graph_caller
8083

8184
#endif
8285

8386
; *ftrace_trace_function != ftrace_stub
8487
MOVA r2, ftrace_trace_function
85-
LD64 r2, r2
88+
LDR r2, r2
8689

8790
MOVA r3, @ftrace_stub
8891
brne r2, r3, @do_trace
@@ -95,9 +98,23 @@ ENDPROC(_mcount)
9598
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
9699
do_ftrace_graph_caller:
97100

98-
SAVE_ABI
101+
#ifndef CONFIG_ISA_ARCV3
102+
# ABI does not allow us to infer blink location
103+
# ARC GCC port inserts into r1 the delta between the pushed blink and
104+
# the sp at call time
105+
# We perform calculation before any push (sp change) happens
106+
ADDR r0, r1, sp
107+
108+
SAVE_ABI
109+
110+
SUBR r0, r0, 4
111+
#else
112+
SAVE_ABI
99113

100114
ADDR r0, fp, 8
115+
#endif
116+
117+
101118
MOVR r1, blink
102119

103120
MOVA r2, @prepare_ftrace_return

0 commit comments

Comments
 (0)