^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /* Copyright (C) 2017 Andes Technology Corporation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #include <linux/init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include <asm/asm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include <asm/csr.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <asm/unistd.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <asm/thread_info.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <asm/asm-offsets.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <asm-generic/export.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <asm/ftrace.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) .text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) .macro SAVE_ABI_STATE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #ifdef CONFIG_FUNCTION_GRAPH_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) addi sp, sp, -48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) sd s0, 32(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) sd ra, 40(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) addi s0, sp, 48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) sd t0, 24(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) sd t1, 16(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #ifdef HAVE_FUNCTION_GRAPH_FP_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) sd t2, 8(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) addi sp, sp, -16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) sd s0, 0(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) sd ra, 8(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) addi s0, sp, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) .macro RESTORE_ABI_STATE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #ifdef CONFIG_FUNCTION_GRAPH_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) ld s0, 32(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) ld ra, 40(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) addi sp, sp, 48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) ld ra, 8(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) ld s0, 0(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) addi sp, sp, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) .macro RESTORE_GRAPH_ARGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) ld a0, 24(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) ld a1, 16(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #ifdef HAVE_FUNCTION_GRAPH_FP_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) ld a2, 8(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) ENTRY(ftrace_graph_caller)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) addi sp, sp, -16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) sd s0, 0(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) sd ra, 8(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) addi s0, sp, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) ftrace_graph_call:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) .global ftrace_graph_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) * Calling ftrace_enable/disable_ftrace_graph_caller would overwrite the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) * call below. Check ftrace_modify_all_code for details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) call ftrace_stub
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) ld ra, 8(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) ld s0, 0(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) addi sp, sp, 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) ENDPROC(ftrace_graph_caller)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) ENTRY(ftrace_caller)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) * a0: the address in the caller when calling ftrace_caller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) * a1: the caller's return address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) * a2: the address of global variable function_trace_op
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) ld a1, -8(s0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) addi a0, ra, -MCOUNT_INSN_SIZE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) la t5, function_trace_op
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) ld a2, 0(t5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #ifdef CONFIG_FUNCTION_GRAPH_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) * the graph tracer (specifically, prepare_ftrace_return) needs these
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) * arguments but for now the function tracer occupies the regs, so we
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) * save them in temporary regs to recover later.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) addi t0, s0, -8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) mv t1, a0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #ifdef HAVE_FUNCTION_GRAPH_FP_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) ld t2, -16(s0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) SAVE_ABI_STATE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) ftrace_call:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) .global ftrace_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) * For the dynamic ftrace to work, here we should reserve at least
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) * 8 bytes for a functional auipc-jalr pair. The following call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) * serves this purpose.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) * Calling ftrace_update_ftrace_func would overwrite the nops below.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) * Check ftrace_modify_all_code for details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) call ftrace_stub
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #ifdef CONFIG_FUNCTION_GRAPH_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) RESTORE_GRAPH_ARGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) call ftrace_graph_caller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) RESTORE_ABI_STATE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) ENDPROC(ftrace_caller)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) .macro SAVE_ALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) addi sp, sp, -(PT_SIZE_ON_STACK+16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) sd s0, (PT_SIZE_ON_STACK)(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) sd ra, (PT_SIZE_ON_STACK+8)(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) addi s0, sp, (PT_SIZE_ON_STACK+16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) sd x1, PT_RA(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) sd x2, PT_SP(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) sd x3, PT_GP(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) sd x4, PT_TP(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) sd x5, PT_T0(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) sd x6, PT_T1(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) sd x7, PT_T2(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) sd x8, PT_S0(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) sd x9, PT_S1(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) sd x10, PT_A0(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) sd x11, PT_A1(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) sd x12, PT_A2(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) sd x13, PT_A3(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) sd x14, PT_A4(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) sd x15, PT_A5(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) sd x16, PT_A6(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) sd x17, PT_A7(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) sd x18, PT_S2(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) sd x19, PT_S3(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) sd x20, PT_S4(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) sd x21, PT_S5(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) sd x22, PT_S6(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) sd x23, PT_S7(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) sd x24, PT_S8(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) sd x25, PT_S9(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) sd x26, PT_S10(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) sd x27, PT_S11(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) sd x28, PT_T3(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) sd x29, PT_T4(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) sd x30, PT_T5(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) sd x31, PT_T6(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) .macro RESTORE_ALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) ld x1, PT_RA(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) ld x2, PT_SP(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) ld x3, PT_GP(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) ld x4, PT_TP(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) ld x5, PT_T0(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) ld x6, PT_T1(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) ld x7, PT_T2(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) ld x8, PT_S0(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) ld x9, PT_S1(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) ld x10, PT_A0(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) ld x11, PT_A1(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) ld x12, PT_A2(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) ld x13, PT_A3(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) ld x14, PT_A4(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) ld x15, PT_A5(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) ld x16, PT_A6(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) ld x17, PT_A7(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) ld x18, PT_S2(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) ld x19, PT_S3(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) ld x20, PT_S4(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) ld x21, PT_S5(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) ld x22, PT_S6(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) ld x23, PT_S7(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) ld x24, PT_S8(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) ld x25, PT_S9(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) ld x26, PT_S10(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) ld x27, PT_S11(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) ld x28, PT_T3(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) ld x29, PT_T4(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) ld x30, PT_T5(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) ld x31, PT_T6(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) ld s0, (PT_SIZE_ON_STACK)(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) ld ra, (PT_SIZE_ON_STACK+8)(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) addi sp, sp, (PT_SIZE_ON_STACK+16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) .macro RESTORE_GRAPH_REG_ARGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) ld a0, PT_T0(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) ld a1, PT_T1(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #ifdef HAVE_FUNCTION_GRAPH_FP_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) ld a2, PT_T2(sp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) .endm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) * Most of the contents are the same as ftrace_caller.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) ENTRY(ftrace_regs_caller)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) * a3: the address of all registers in the stack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) ld a1, -8(s0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) addi a0, ra, -MCOUNT_INSN_SIZE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) la t5, function_trace_op
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) ld a2, 0(t5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) addi a3, sp, -(PT_SIZE_ON_STACK+16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #ifdef CONFIG_FUNCTION_GRAPH_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) addi t0, s0, -8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) mv t1, a0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) #ifdef HAVE_FUNCTION_GRAPH_FP_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) ld t2, -16(s0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) SAVE_ALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) ftrace_regs_call:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) .global ftrace_regs_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) call ftrace_stub
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) #ifdef CONFIG_FUNCTION_GRAPH_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) RESTORE_GRAPH_REG_ARGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) call ftrace_graph_caller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) RESTORE_ALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) ENDPROC(ftrace_regs_caller)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) #endif /* CONFIG_DYNAMIC_FTRACE_WITH_REGS */