Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/loongarch/kernel/rethook_trampoline.S
26424 views
1
/* SPDX-License-Identifier: GPL-2.0+ */
2
#include <linux/linkage.h>
3
#include <asm/stackframe.h>
4
5
.text
6
7
.macro save_all_base_regs
8
cfi_st ra, PT_R1
9
cfi_st tp, PT_R2
10
cfi_st a0, PT_R4
11
cfi_st a1, PT_R5
12
cfi_st a2, PT_R6
13
cfi_st a3, PT_R7
14
cfi_st a4, PT_R8
15
cfi_st a5, PT_R9
16
cfi_st a6, PT_R10
17
cfi_st a7, PT_R11
18
cfi_st t0, PT_R12
19
cfi_st t1, PT_R13
20
cfi_st t2, PT_R14
21
cfi_st t3, PT_R15
22
cfi_st t4, PT_R16
23
cfi_st t5, PT_R17
24
cfi_st t6, PT_R18
25
cfi_st t7, PT_R19
26
cfi_st t8, PT_R20
27
cfi_st u0, PT_R21
28
cfi_st fp, PT_R22
29
cfi_st s0, PT_R23
30
cfi_st s1, PT_R24
31
cfi_st s2, PT_R25
32
cfi_st s3, PT_R26
33
cfi_st s4, PT_R27
34
cfi_st s5, PT_R28
35
cfi_st s6, PT_R29
36
cfi_st s7, PT_R30
37
cfi_st s8, PT_R31
38
csrrd t0, LOONGARCH_CSR_CRMD
39
andi t0, t0, 0x7 /* extract bit[1:0] PLV, bit[2] IE */
40
LONG_S t0, sp, PT_CRMD
41
.endm
42
43
.macro restore_all_base_regs
44
cfi_ld tp, PT_R2
45
cfi_ld a0, PT_R4
46
cfi_ld a1, PT_R5
47
cfi_ld a2, PT_R6
48
cfi_ld a3, PT_R7
49
cfi_ld a4, PT_R8
50
cfi_ld a5, PT_R9
51
cfi_ld a6, PT_R10
52
cfi_ld a7, PT_R11
53
cfi_ld t0, PT_R12
54
cfi_ld t1, PT_R13
55
cfi_ld t2, PT_R14
56
cfi_ld t3, PT_R15
57
cfi_ld t4, PT_R16
58
cfi_ld t5, PT_R17
59
cfi_ld t6, PT_R18
60
cfi_ld t7, PT_R19
61
cfi_ld t8, PT_R20
62
cfi_ld u0, PT_R21
63
cfi_ld fp, PT_R22
64
cfi_ld s0, PT_R23
65
cfi_ld s1, PT_R24
66
cfi_ld s2, PT_R25
67
cfi_ld s3, PT_R26
68
cfi_ld s4, PT_R27
69
cfi_ld s5, PT_R28
70
cfi_ld s6, PT_R29
71
cfi_ld s7, PT_R30
72
cfi_ld s8, PT_R31
73
LONG_L t0, sp, PT_CRMD
74
li.d t1, 0x7 /* mask bit[1:0] PLV, bit[2] IE */
75
csrxchg t0, t1, LOONGARCH_CSR_CRMD
76
.endm
77
78
SYM_CODE_START(arch_rethook_trampoline)
79
UNWIND_HINT_UNDEFINED
80
addi.d sp, sp, -PT_SIZE
81
save_all_base_regs
82
83
addi.d t0, sp, PT_SIZE
84
LONG_S t0, sp, PT_R3
85
86
move a0, sp /* pt_regs */
87
88
bl arch_rethook_trampoline_callback
89
90
/* use the result as the return-address */
91
move ra, a0
92
93
restore_all_base_regs
94
addi.d sp, sp, PT_SIZE
95
96
jr ra
97
SYM_CODE_END(arch_rethook_trampoline)
98
99