]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/compiler-rt/lib/tsan/rtl/tsan_rtl_mips64.S
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm-project / compiler-rt / lib / tsan / rtl / tsan_rtl_mips64.S
1 .section .text
2 .set noreorder
3
4 .hidden __tsan_setjmp
5 .comm _ZN14__interception11real_setjmpE,8,8
6 .globl setjmp
7 .type setjmp, @function
8 setjmp:
9
10   // save env parameters
11   daddiu $sp,$sp,-40
12   sd $s0,32($sp)
13   sd $ra,24($sp)
14   sd $fp,16($sp)
15   sd $gp,8($sp)
16
17   // calculate and save pointer to GOT
18   lui $gp,%hi(%neg(%gp_rel(setjmp)))
19   daddu $gp,$gp,$t9
20   daddiu $gp,$gp,%lo(%neg(%gp_rel(setjmp)))
21   move $s0,$gp
22
23   // save jmp_buf
24   sd $a0,0($sp)
25
26   // obtain $sp
27   dadd $a0,$zero,$sp
28
29   // call tsan interceptor
30   jal __tsan_setjmp
31   daddiu $a1,$a0,40
32
33   // restore jmp_buf
34   ld $a0,0($sp)
35
36   // restore gp
37   move $gp,$s0
38
39   // load pointer of libc setjmp to t9
40   dla $t9,(_ZN14__interception11real_setjmpE) 
41
42   // restore env parameters
43   ld $gp,8($sp)
44   ld $fp,16($sp)
45   ld $ra,24($sp)
46   ld $s0,32($sp)
47   daddiu $sp,$sp,40
48
49   // tail jump to libc setjmp
50   ld $t9,0($t9)
51   jr $t9
52   nop
53
54 .size setjmp, .-setjmp
55
56 .hidden __tsan_setjmp
57 .globl _setjmp
58 .comm _ZN14__interception12real__setjmpE,8,8
59 .type _setjmp, @function
60 _setjmp:
61
62   // Save env parameters
63   daddiu $sp,$sp,-40
64   sd $s0,32($sp)
65   sd $ra,24($sp)
66   sd $fp,16($sp)
67   sd $gp,8($sp)
68
69   // calculate and save pointer to GOT
70   lui $gp,%hi(%neg(%gp_rel(_setjmp)))
71   daddu $gp,$gp,$t9
72   daddiu $gp,$gp,%lo(%neg(%gp_rel(_setjmp)))
73   move $s0,$gp
74
75   // save jmp_buf
76   sd $a0,0($sp)
77
78   // obtain $sp
79   dadd $a0,$zero,$sp
80
81   // call tsan interceptor
82   jal __tsan_setjmp
83   daddiu $a1,$a0,40
84
85   // restore jmp_buf
86   ld $a0,0($sp)
87
88   // restore gp
89   move $gp,$s0
90
91   // load pointer of libc _setjmp to t9
92   dla $t9,(_ZN14__interception12real__setjmpE)
93
94   // restore env parameters
95   ld $gp,8($sp)
96   ld $fp,16($sp)
97   ld $ra,24($sp)
98   ld $s0,32($sp)
99   daddiu $sp,$sp,40
100
101   // tail jump to libc _setjmp
102   ld $t9,0($t9)
103   jr $t9
104   nop
105
106 .size _setjmp, .-_setjmp
107
108 .hidden __tsan_setjmp
109 .globl sigsetjmp
110 .comm _ZN14__interception14real_sigsetjmpE,8,8
111 .type sigsetjmp, @function
112 sigsetjmp:
113
114   // Save env parameters
115   daddiu $sp,$sp,-48
116   sd $s0,40($sp)
117   sd $ra,32($sp)
118   sd $fp,24($sp)
119   sd $gp,16($sp)
120
121   // calculate and save pointer to GOT
122   lui $gp,%hi(%neg(%gp_rel(sigsetjmp)))
123   daddu $gp,$gp,$t9
124   daddiu $gp,$gp,%lo(%neg(%gp_rel(sigsetjmp)))
125   move $s0,$gp
126
127   // save jmp_buf and savesig
128   sd $a0,0($sp)
129   sd $a1,8($sp)
130
131   // obtain $sp
132   dadd $a0,$zero,$sp
133
134   // call tsan interceptor
135   jal __tsan_setjmp
136   daddiu $a1,$a0,48
137
138   // restore jmp_buf and savesig
139   ld $a0,0($sp)
140   ld $a1,8($sp)
141
142   // restore gp
143   move $gp,$s0
144
145   // load pointer of libc sigsetjmp to t9
146   dla $t9,(_ZN14__interception14real_sigsetjmpE) 
147
148   // restore env parameters
149   ld $gp,16($sp)
150   ld $fp,24($sp)
151   ld $ra,32($sp)
152   ld $s0,40($sp)
153   daddiu $sp,$sp,48
154
155   // tail jump to libc sigsetjmp
156   ld $t9,0($t9)
157   jr $t9
158   nop
159
160 .size sigsetjmp, .-sigsetjmp
161
162 .hidden __tsan_setjmp
163 .comm _ZN14__interception16real___sigsetjmpE,8,8
164 .globl __sigsetjmp
165 .type __sigsetjmp, @function
166 __sigsetjmp:
167
168   // Save env parameters
169   daddiu $sp,$sp,-48
170   sd $s0,40($sp)
171   sd $ra,32($sp)
172   sd $fp,24($sp)
173   sd $gp,16($sp)
174
175   // calculate and save pointer to GOT
176   lui $gp,%hi(%neg(%gp_rel(__sigsetjmp)))
177   daddu $gp,$gp,$t9
178   daddiu $gp,$gp,%lo(%neg(%gp_rel(__sigsetjmp)))
179   move $s0,$gp
180
181   // save jmp_buf and savesig
182   sd $a0,0($sp)
183   sd $a1,8($sp)
184
185   // obtain $sp
186   dadd $a0,$zero,$sp
187
188   // call tsan interceptor
189   jal __tsan_setjmp
190   daddiu $a1,$a0,48
191
192   // restore jmp_buf and savesig
193   ld $a0,0($sp)
194   ld $a1,8($sp)
195
196   // restore gp
197   move $gp,$s0
198
199   // load pointer to libc __sigsetjmp in t9
200   dla $t9,(_ZN14__interception16real___sigsetjmpE)
201
202   // restore env parameters
203   ld $gp,16($sp)
204   ld $fp,24($sp)
205   ld $ra,32($sp)
206   ld $s0,40($sp)
207   daddiu $sp,$sp,48
208
209   // tail jump to libc __sigsetjmp
210   ld $t9,0($t9)
211   jr $t9
212   nop
213
214 .size __sigsetjmp, .-__sigsetjmp