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_amd64.S
35269 views
1
// The content of this file is x86_64-only:
2
#if defined(__x86_64__)
3
4
#include "sanitizer_common/sanitizer_asm.h"
5
6
#if !defined(__APPLE__)
7
.section .text
8
#else
9
.section __TEXT,__text
10
#endif
11
12
ASM_HIDDEN(__tsan_setjmp)
13
#if defined(__NetBSD__)
14
.comm _ZN14__interception15real___setjmp14E,8,8
15
#elif !defined(__APPLE__)
16
.comm _ZN14__interception11real_setjmpE,8,8
17
#endif
18
#if defined(__NetBSD__)
19
.globl ASM_SYMBOL_INTERCEPTOR(__setjmp14)
20
ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__setjmp14))
21
ASM_SYMBOL_INTERCEPTOR(__setjmp14):
22
#else
23
.globl ASM_SYMBOL_INTERCEPTOR(setjmp)
24
ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp))
25
ASM_SYMBOL_INTERCEPTOR(setjmp):
26
#endif
27
CFI_STARTPROC
28
_CET_ENDBR
29
// save env parameter
30
push %rdi
31
CFI_ADJUST_CFA_OFFSET(8)
32
CFI_REL_OFFSET(%rdi, 0)
33
// obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
34
#if defined(__FreeBSD__) || defined(__NetBSD__)
35
lea 8(%rsp), %rdi
36
#elif defined(__linux__) || defined(__APPLE__)
37
lea 16(%rsp), %rdi
38
#else
39
# error "Unknown platform"
40
#endif
41
// call tsan interceptor
42
call ASM_SYMBOL(__tsan_setjmp)
43
// restore env parameter
44
pop %rdi
45
CFI_ADJUST_CFA_OFFSET(-8)
46
CFI_RESTORE(%rdi)
47
// tail jump to libc setjmp
48
movl $0, %eax
49
#if defined(__NetBSD__)
50
movq _ZN14__interception15real___setjmp14E@GOTPCREL(%rip), %rdx
51
jmp *(%rdx)
52
#elif !defined(__APPLE__)
53
movq _ZN14__interception11real_setjmpE@GOTPCREL(%rip), %rdx
54
jmp *(%rdx)
55
#else
56
jmp ASM_SYMBOL(setjmp)
57
#endif
58
CFI_ENDPROC
59
#if defined(__NetBSD__)
60
ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__setjmp14))
61
#else
62
ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp))
63
#endif
64
65
.comm _ZN14__interception12real__setjmpE,8,8
66
.globl ASM_SYMBOL_INTERCEPTOR(_setjmp)
67
ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp))
68
ASM_SYMBOL_INTERCEPTOR(_setjmp):
69
CFI_STARTPROC
70
_CET_ENDBR
71
// save env parameter
72
push %rdi
73
CFI_ADJUST_CFA_OFFSET(8)
74
CFI_REL_OFFSET(%rdi, 0)
75
// obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
76
#if defined(__FreeBSD__) || defined(__NetBSD__)
77
lea 8(%rsp), %rdi
78
#elif defined(__linux__) || defined(__APPLE__)
79
lea 16(%rsp), %rdi
80
#else
81
# error "Unknown platform"
82
#endif
83
// call tsan interceptor
84
call ASM_SYMBOL(__tsan_setjmp)
85
// restore env parameter
86
pop %rdi
87
CFI_ADJUST_CFA_OFFSET(-8)
88
CFI_RESTORE(%rdi)
89
// tail jump to libc setjmp
90
movl $0, %eax
91
#if !defined(__APPLE__)
92
movq _ZN14__interception12real__setjmpE@GOTPCREL(%rip), %rdx
93
jmp *(%rdx)
94
#else
95
jmp ASM_SYMBOL(_setjmp)
96
#endif
97
CFI_ENDPROC
98
ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp))
99
100
#if defined(__NetBSD__)
101
.comm _ZN14__interception18real___sigsetjmp14E,8,8
102
.globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14)
103
ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14))
104
ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14):
105
#else
106
.comm _ZN14__interception14real_sigsetjmpE,8,8
107
.globl ASM_SYMBOL_INTERCEPTOR(sigsetjmp)
108
ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
109
ASM_SYMBOL_INTERCEPTOR(sigsetjmp):
110
#endif
111
CFI_STARTPROC
112
_CET_ENDBR
113
// save env parameter
114
push %rdi
115
CFI_ADJUST_CFA_OFFSET(8)
116
CFI_REL_OFFSET(%rdi, 0)
117
// save savesigs parameter
118
push %rsi
119
CFI_ADJUST_CFA_OFFSET(8)
120
CFI_REL_OFFSET(%rsi, 0)
121
// align stack frame
122
sub $8, %rsp
123
CFI_ADJUST_CFA_OFFSET(8)
124
// obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
125
#if defined(__FreeBSD__) || defined(__NetBSD__)
126
lea 24(%rsp), %rdi
127
#elif defined(__linux__) || defined(__APPLE__)
128
lea 32(%rsp), %rdi
129
#else
130
# error "Unknown platform"
131
#endif
132
// call tsan interceptor
133
call ASM_SYMBOL(__tsan_setjmp)
134
// unalign stack frame
135
add $8, %rsp
136
CFI_ADJUST_CFA_OFFSET(-8)
137
// restore savesigs parameter
138
pop %rsi
139
CFI_ADJUST_CFA_OFFSET(-8)
140
CFI_RESTORE(%rsi)
141
// restore env parameter
142
pop %rdi
143
CFI_ADJUST_CFA_OFFSET(-8)
144
CFI_RESTORE(%rdi)
145
// tail jump to libc sigsetjmp
146
movl $0, %eax
147
#if defined(__NetBSD__)
148
movq _ZN14__interception18real___sigsetjmp14E@GOTPCREL(%rip), %rdx
149
jmp *(%rdx)
150
#elif !defined(__APPLE__)
151
movq _ZN14__interception14real_sigsetjmpE@GOTPCREL(%rip), %rdx
152
jmp *(%rdx)
153
#else
154
jmp ASM_SYMBOL(sigsetjmp)
155
#endif
156
CFI_ENDPROC
157
#if defined(__NetBSD__)
158
ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14))
159
#else
160
ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
161
#endif
162
163
#if !defined(__APPLE__) && !defined(__NetBSD__)
164
.comm _ZN14__interception16real___sigsetjmpE,8,8
165
.globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)
166
ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
167
ASM_SYMBOL_INTERCEPTOR(__sigsetjmp):
168
CFI_STARTPROC
169
_CET_ENDBR
170
// save env parameter
171
push %rdi
172
CFI_ADJUST_CFA_OFFSET(8)
173
CFI_REL_OFFSET(%rdi, 0)
174
// save savesigs parameter
175
push %rsi
176
CFI_ADJUST_CFA_OFFSET(8)
177
CFI_REL_OFFSET(%rsi, 0)
178
// align stack frame
179
sub $8, %rsp
180
CFI_ADJUST_CFA_OFFSET(8)
181
// obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
182
#if defined(__FreeBSD__)
183
lea 24(%rsp), %rdi
184
#else
185
lea 32(%rsp), %rdi
186
#endif
187
// call tsan interceptor
188
call ASM_SYMBOL(__tsan_setjmp)
189
// unalign stack frame
190
add $8, %rsp
191
CFI_ADJUST_CFA_OFFSET(-8)
192
// restore savesigs parameter
193
pop %rsi
194
CFI_ADJUST_CFA_OFFSET(-8)
195
CFI_RESTORE(%rsi)
196
// restore env parameter
197
pop %rdi
198
CFI_ADJUST_CFA_OFFSET(-8)
199
CFI_RESTORE(%rdi)
200
// tail jump to libc sigsetjmp
201
movl $0, %eax
202
movq _ZN14__interception16real___sigsetjmpE@GOTPCREL(%rip), %rdx
203
jmp *(%rdx)
204
CFI_ENDPROC
205
ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
206
#endif // !defined(__APPLE__) && !defined(__NetBSD__)
207
208
NO_EXEC_STACK_DIRECTIVE
209
210
#endif
211
212