mcount.S (c6380ecd8e9bee7aba3d9a5a94b58168244c4a61) mcount.S (c15ac4fd60d5ffdb151bb2c7805f377fd7f90363)
1/* SPDX-License-Identifier: GPL-2.0 */
2/* Copyright (C) 2017 Andes Technology Corporation */
3
4#include <linux/init.h>
5#include <linux/linkage.h>
6#include <asm/asm.h>
7#include <asm/csr.h>
8#include <asm/unistd.h>

--- 18 unchanged lines hidden (view full) ---

27 .macro SAVE_RET_ABI_STATE
28 addi sp, sp, -32
29 sd s0, 16(sp)
30 sd ra, 24(sp)
31 sd a0, 8(sp)
32 addi s0, sp, 32
33 .endm
34
1/* SPDX-License-Identifier: GPL-2.0 */
2/* Copyright (C) 2017 Andes Technology Corporation */
3
4#include <linux/init.h>
5#include <linux/linkage.h>
6#include <asm/asm.h>
7#include <asm/csr.h>
8#include <asm/unistd.h>

--- 18 unchanged lines hidden (view full) ---

27 .macro SAVE_RET_ABI_STATE
28 addi sp, sp, -32
29 sd s0, 16(sp)
30 sd ra, 24(sp)
31 sd a0, 8(sp)
32 addi s0, sp, 32
33 .endm
34
35 .macro STORE_ABI_STATE
35 .macro RESTORE_ABI_STATE
36 ld ra, 8(sp)
37 ld s0, 0(sp)
38 addi sp, sp, 16
39 .endm
40
36 ld ra, 8(sp)
37 ld s0, 0(sp)
38 addi sp, sp, 16
39 .endm
40
41 .macro STORE_RET_ABI_STATE
41 .macro RESTORE_RET_ABI_STATE
42 ld ra, 24(sp)
43 ld s0, 16(sp)
44 ld a0, 8(sp)
45 addi sp, sp, 32
46 .endm
47
48ENTRY(ftrace_stub)
42 ld ra, 24(sp)
43 ld s0, 16(sp)
44 ld a0, 8(sp)
45 addi sp, sp, 32
46 .endm
47
48ENTRY(ftrace_stub)
49#ifdef CONFIG_DYNAMIC_FTRACE
50 .global _mcount
51 .set _mcount, ftrace_stub
52#endif
49 ret
50ENDPROC(ftrace_stub)
51
52#ifdef CONFIG_FUNCTION_GRAPH_TRACER
53ENTRY(return_to_handler)
54/*
55 * On implementing the frame point test, the ideal way is to compare the
56 * s0 (frame pointer, if enabled) on entry and the sp (stack pointer) on return.

--- 4 unchanged lines hidden (view full) ---

61 */
62#ifdef HAVE_FUNCTION_GRAPH_FP_TEST
63 mv t6, s0
64#endif
65 SAVE_RET_ABI_STATE
66#ifdef HAVE_FUNCTION_GRAPH_FP_TEST
67 mv a0, t6
68#endif
53 ret
54ENDPROC(ftrace_stub)
55
56#ifdef CONFIG_FUNCTION_GRAPH_TRACER
57ENTRY(return_to_handler)
58/*
59 * On implementing the frame point test, the ideal way is to compare the
60 * s0 (frame pointer, if enabled) on entry and the sp (stack pointer) on return.

--- 4 unchanged lines hidden (view full) ---

65 */
66#ifdef HAVE_FUNCTION_GRAPH_FP_TEST
67 mv t6, s0
68#endif
69 SAVE_RET_ABI_STATE
70#ifdef HAVE_FUNCTION_GRAPH_FP_TEST
71 mv a0, t6
72#endif
69 la t0, ftrace_return_to_handler
70 jalr t0
73 call ftrace_return_to_handler
71 mv a1, a0
74 mv a1, a0
72 STORE_RET_ABI_STATE
75 RESTORE_RET_ABI_STATE
73 jalr a1
74ENDPROC(return_to_handler)
75EXPORT_SYMBOL(return_to_handler)
76#endif
77
76 jalr a1
77ENDPROC(return_to_handler)
78EXPORT_SYMBOL(return_to_handler)
79#endif
80
81#ifndef CONFIG_DYNAMIC_FTRACE
78ENTRY(_mcount)
79 la t4, ftrace_stub
80#ifdef CONFIG_FUNCTION_GRAPH_TRACER
81 la t0, ftrace_graph_return
82 ld t1, 0(t0)
83 bne t1, t4, do_ftrace_graph_caller
84
85 la t3, ftrace_graph_entry

--- 13 unchanged lines hidden (view full) ---

99 */
100do_ftrace_graph_caller:
101 addi a0, s0, -8
102 mv a1, ra
103#ifdef HAVE_FUNCTION_GRAPH_FP_TEST
104 ld a2, -16(s0)
105#endif
106 SAVE_ABI_STATE
82ENTRY(_mcount)
83 la t4, ftrace_stub
84#ifdef CONFIG_FUNCTION_GRAPH_TRACER
85 la t0, ftrace_graph_return
86 ld t1, 0(t0)
87 bne t1, t4, do_ftrace_graph_caller
88
89 la t3, ftrace_graph_entry

--- 13 unchanged lines hidden (view full) ---

103 */
104do_ftrace_graph_caller:
105 addi a0, s0, -8
106 mv a1, ra
107#ifdef HAVE_FUNCTION_GRAPH_FP_TEST
108 ld a2, -16(s0)
109#endif
110 SAVE_ABI_STATE
107 la t0, prepare_ftrace_return
108 jalr t0
109 STORE_ABI_STATE
111 call prepare_ftrace_return
112 RESTORE_ABI_STATE
110 ret
111#endif
112
113/*
114 * A pseudo representation for the function tracer:
115 * (*ftrace_trace_function)(ra_to_caller, ra_to_caller_of_caller)
116 */
117do_trace:
118 ld a1, -8(s0)
119 mv a0, ra
120
121 SAVE_ABI_STATE
122 jalr t5
113 ret
114#endif
115
116/*
117 * A pseudo representation for the function tracer:
118 * (*ftrace_trace_function)(ra_to_caller, ra_to_caller_of_caller)
119 */
120do_trace:
121 ld a1, -8(s0)
122 mv a0, ra
123
124 SAVE_ABI_STATE
125 jalr t5
123 STORE_ABI_STATE
126 RESTORE_ABI_STATE
124 ret
125ENDPROC(_mcount)
126EXPORT_SYMBOL(_mcount)
127 ret
128ENDPROC(_mcount)
129EXPORT_SYMBOL(_mcount)
130#endif