PR c++/85515
[official-gcc.git] / libsanitizer / tsan / tsan_rtl_mips64.S
blobd0f7a3f9af9890799d061ffb41176227ebd44c6f
1 .section .text
2 .set noreorder
4 .hidden __tsan_setjmp
5 .comm _ZN14__interception11real_setjmpE,8,8
6 .globl setjmp
7 .type setjmp, @function
8 setjmp:
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)
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
23   // save jmp_buf
24   sd $a0,0($sp)
26   // obtain $sp
27   dadd $a0,$zero,$sp
29   // call tsan interceptor
30   jal __tsan_setjmp
31   daddiu $a1,$a0,40
33   // restore jmp_buf
34   ld $a0,0($sp)
36   // restore gp
37   move $gp,$s0
39   // load pointer of libc setjmp to t9
40   dla $t9,(_ZN14__interception11real_setjmpE) 
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
49   // tail jump to libc setjmp
50   ld $t9,0($t9)
51   jr $t9
52   nop
54 .size setjmp, .-setjmp
56 .hidden __tsan_setjmp
57 .globl _setjmp
58 .comm _ZN14__interception12real__setjmpE,8,8
59 .type _setjmp, @function
60 _setjmp:
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)
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
75   // save jmp_buf
76   sd $a0,0($sp)
78   // obtain $sp
79   dadd $a0,$zero,$sp
81   // call tsan interceptor
82   jal __tsan_setjmp
83   daddiu $a1,$a0,40
85   // restore jmp_buf
86   ld $a0,0($sp)
88   // restore gp
89   move $gp,$s0
91   // load pointer of libc _setjmp to t9
92   dla $t9,(_ZN14__interception12real__setjmpE)
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
101   // tail jump to libc _setjmp
102   ld $t9,0($t9)
103   jr $t9
104   nop
106 .size _setjmp, .-_setjmp
108 .hidden __tsan_setjmp
109 .globl sigsetjmp
110 .comm _ZN14__interception14real_sigsetjmpE,8,8
111 .type sigsetjmp, @function
112 sigsetjmp:
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)
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
127   // save jmp_buf and savesig
128   sd $a0,0($sp)
129   sd $a1,8($sp)
131   // obtain $sp
132   dadd $a0,$zero,$sp
134   // call tsan interceptor
135   jal __tsan_setjmp
136   daddiu $a1,$a0,48
138   // restore jmp_buf and savesig
139   ld $a0,0($sp)
140   ld $a1,8($sp)
142   // restore gp
143   move $gp,$s0
145   // load pointer of libc sigsetjmp to t9
146   dla $t9,(_ZN14__interception14real_sigsetjmpE) 
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
155   // tail jump to libc sigsetjmp
156   ld $t9,0($t9)
157   jr $t9
158   nop
160 .size sigsetjmp, .-sigsetjmp
162 .hidden __tsan_setjmp
163 .comm _ZN14__interception16real___sigsetjmpE,8,8
164 .globl __sigsetjmp
165 .type __sigsetjmp, @function
166 __sigsetjmp:
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)
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
181   // save jmp_buf and savesig
182   sd $a0,0($sp)
183   sd $a1,8($sp)
185   // obtain $sp
186   dadd $a0,$zero,$sp
188   // call tsan interceptor
189   jal __tsan_setjmp
190   daddiu $a1,$a0,48
192   // restore jmp_buf and savesig
193   ld $a0,0($sp)
194   ld $a1,8($sp)
196   // restore gp
197   move $gp,$s0
199   // load pointer to libc __sigsetjmp in t9
200   dla $t9,(_ZN14__interception16real___sigsetjmpE)
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
209   // tail jump to libc __sigsetjmp
210   ld $t9,0($t9)
211   jr $t9
212   nop
214 .size __sigsetjmp, .-__sigsetjmp