Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/compiler-rt/lib/tsan/rtl/tsan_rtl_loongarch64.S
35269 views
1
#include "sanitizer_common/sanitizer_asm.h"
2
3
.section .text
4
5
ASM_HIDDEN(__tsan_setjmp)
6
.comm _ZN14__interception11real_setjmpE,8,8
7
.globl ASM_SYMBOL_INTERCEPTOR(setjmp)
8
ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp))
9
ASM_SYMBOL_INTERCEPTOR(setjmp):
10
CFI_STARTPROC
11
12
// Save frame pointer and return address register
13
addi.d $sp, $sp, -32
14
st.d $ra, $sp, 24
15
st.d $fp, $sp, 16
16
CFI_DEF_CFA_OFFSET (32)
17
CFI_OFFSET (1, -8)
18
CFI_OFFSET (22, -16)
19
20
// Adjust the SP for previous frame
21
addi.d $fp, $sp, 32
22
CFI_DEF_CFA_REGISTER (22)
23
24
// Save env parameter
25
st.d $a0, $sp, 8
26
CFI_OFFSET (4, -24)
27
28
// Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
29
addi.d $a0, $fp, 0
30
31
// call tsan interceptor
32
bl ASM_SYMBOL(__tsan_setjmp)
33
34
// Restore env parameter
35
ld.d $a0, $sp, 8
36
CFI_RESTORE (4)
37
38
// Restore frame/link register
39
ld.d $fp, $sp, 16
40
ld.d $ra, $sp, 24
41
addi.d $sp, $sp, 32
42
CFI_RESTORE (22)
43
CFI_RESTORE (1)
44
CFI_DEF_CFA (3, 0)
45
46
// tail jump to libc setjmp
47
la.local $a1, _ZN14__interception11real_setjmpE
48
ld.d $a1, $a1, 0
49
jr $a1
50
51
CFI_ENDPROC
52
ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp))
53
54
.comm _ZN14__interception12real__setjmpE,8,8
55
.globl ASM_SYMBOL_INTERCEPTOR(_setjmp)
56
ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp))
57
ASM_SYMBOL_INTERCEPTOR(_setjmp):
58
CFI_STARTPROC
59
60
// Save frame pointer and return address register
61
addi.d $sp, $sp, -32
62
st.d $ra, $sp, 24
63
st.d $fp, $sp, 16
64
CFI_DEF_CFA_OFFSET (32)
65
CFI_OFFSET (1, -8)
66
CFI_OFFSET (22, -16)
67
68
// Adjust the SP for previous frame
69
addi.d $fp, $sp, 32
70
CFI_DEF_CFA_REGISTER (22)
71
72
// Save env parameter
73
st.d $a0, $sp, 8
74
CFI_OFFSET (4, -24)
75
76
// Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
77
addi.d $a0, $fp, 0
78
79
// call tsan interceptor
80
bl ASM_SYMBOL(__tsan_setjmp)
81
82
// Restore env parameter
83
ld.d $a0, $sp, 8
84
CFI_RESTORE (4)
85
86
// Restore frame/link register
87
ld.d $fp, $sp, 16
88
ld.d $ra, $sp, 24
89
addi.d $sp, $sp, 32
90
CFI_RESTORE (22)
91
CFI_RESTORE (1)
92
CFI_DEF_CFA (3, 0)
93
94
// tail jump to libc setjmp
95
la.local $a1, _ZN14__interception12real__setjmpE
96
ld.d $a1, $a1, 0
97
jr $a1
98
99
CFI_ENDPROC
100
ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp))
101
102
.comm _ZN14__interception14real_sigsetjmpE,8,8
103
.globl ASM_SYMBOL_INTERCEPTOR(sigsetjmp)
104
ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
105
ASM_SYMBOL_INTERCEPTOR(sigsetjmp):
106
CFI_STARTPROC
107
108
// Save frame pointer and return address register
109
addi.d $sp, $sp, -32
110
st.d $ra, $sp, 24
111
st.d $fp, $sp, 16
112
CFI_DEF_CFA_OFFSET (32)
113
CFI_OFFSET (1, -8)
114
CFI_OFFSET (22, -16)
115
116
// Adjust the SP for previous frame
117
addi.d $fp, $sp, 32
118
CFI_DEF_CFA_REGISTER (22)
119
120
// Save env parameter
121
st.d $a0, $sp, 8
122
CFI_OFFSET (4, -24)
123
124
// Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
125
addi.d $a0, $fp, 0
126
127
// call tsan interceptor
128
bl ASM_SYMBOL(__tsan_setjmp)
129
130
// Restore env parameter
131
ld.d $a0, $sp, 8
132
CFI_RESTORE (4)
133
134
// Restore frame/link register
135
ld.d $fp, $sp, 16
136
ld.d $ra, $sp, 24
137
addi.d $sp, $sp, 32
138
CFI_RESTORE (22)
139
CFI_RESTORE (1)
140
CFI_DEF_CFA (3, 0)
141
142
// tail jump to libc setjmp
143
la.local $a1, _ZN14__interception14real_sigsetjmpE
144
ld.d $a1, $a1, 0
145
jr $a1
146
147
CFI_ENDPROC
148
ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
149
150
.comm _ZN14__interception16real___sigsetjmpE,8,8
151
.globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)
152
ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
153
ASM_SYMBOL_INTERCEPTOR(__sigsetjmp):
154
CFI_STARTPROC
155
156
// Save frame pointer and return address register
157
addi.d $sp, $sp, -32
158
st.d $ra, $sp, 24
159
st.d $fp, $sp, 16
160
CFI_DEF_CFA_OFFSET (32)
161
CFI_OFFSET (1, -8)
162
CFI_OFFSET (22, -16)
163
164
// Adjust the SP for previous frame
165
addi.d $fp, $sp, 32
166
CFI_DEF_CFA_REGISTER (22)
167
168
// Save env parameter
169
st.d $a0, $sp, 8
170
CFI_OFFSET (4, -24)
171
172
// Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
173
addi.d $a0, $fp, 0
174
175
// call tsan interceptor
176
bl ASM_SYMBOL(__tsan_setjmp)
177
178
// Restore env parameter
179
ld.d $a0, $sp, 8
180
CFI_RESTORE (4)
181
182
// Restore frame/link register
183
ld.d $fp, $sp, 16
184
ld.d $ra, $sp, 24
185
addi.d $sp, $sp, 32
186
CFI_RESTORE (22)
187
CFI_RESTORE (1)
188
CFI_DEF_CFA (3, 0)
189
190
// tail jump to libc setjmp
191
la.local $a1, _ZN14__interception16real___sigsetjmpE
192
ld.d $a1, $a1, 0
193
jr $a1
194
195
CFI_ENDPROC
196
ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
197
198