Add hppa*-*-* to dg-error targets at line 5
[official-gcc.git] / libsanitizer / tsan / tsan_rtl_loongarch64.S
blob12856bd110cd4d414b9c20668b5dd9627199aff1
1 #include "sanitizer_common/sanitizer_asm.h"
3 .section .text
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
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)
20   // Adjust the SP for previous frame
21   addi.d $fp, $sp, 32
22   CFI_DEF_CFA_REGISTER (22)
24   // Save env parameter
25   st.d $a0, $sp, 8
26   CFI_OFFSET (4, -24)
28   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
29   addi.d  $a0, $fp, 0
31   // call tsan interceptor
32   bl      ASM_SYMBOL(__tsan_setjmp)
34   // Restore env parameter
35   ld.d $a0, $sp, 8
36   CFI_RESTORE (4)
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)
46   // tail jump to libc setjmp
47   la.local $a1, _ZN14__interception11real_setjmpE
48   ld.d $a1, $a1, 0
49   jr $a1
51   CFI_ENDPROC
52 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp))
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
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)
68   // Adjust the SP for previous frame
69   addi.d $fp, $sp, 32
70   CFI_DEF_CFA_REGISTER (22)
72   // Save env parameter
73   st.d $a0, $sp, 8
74   CFI_OFFSET (4, -24)
76   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
77   addi.d  $a0, $fp, 0
79   // call tsan interceptor
80   bl      ASM_SYMBOL(__tsan_setjmp)
82   // Restore env parameter
83   ld.d $a0, $sp, 8
84   CFI_RESTORE (4)
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)
94   // tail jump to libc setjmp
95   la.local $a1, _ZN14__interception12real__setjmpE
96   ld.d $a1, $a1, 0
97   jr $a1
99   CFI_ENDPROC
100 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp))
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
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)
116   // Adjust the SP for previous frame
117   addi.d $fp, $sp, 32
118   CFI_DEF_CFA_REGISTER (22)
120   // Save env parameter
121   st.d $a0, $sp, 8
122   CFI_OFFSET (4, -24)
124   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
125   addi.d  $a0, $fp, 0
127   // call tsan interceptor
128   bl      ASM_SYMBOL(__tsan_setjmp)
130   // Restore env parameter
131   ld.d $a0, $sp, 8
132   CFI_RESTORE (4)
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)
142   // tail jump to libc setjmp
143   la.local $a1, _ZN14__interception14real_sigsetjmpE
144   ld.d $a1, $a1, 0
145   jr $a1
147   CFI_ENDPROC
148 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
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
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)
164   // Adjust the SP for previous frame
165   addi.d $fp, $sp, 32
166   CFI_DEF_CFA_REGISTER (22)
168   // Save env parameter
169   st.d $a0, $sp, 8
170   CFI_OFFSET (4, -24)
172   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
173   addi.d  $a0, $fp, 0
175   // call tsan interceptor
176   bl      ASM_SYMBOL(__tsan_setjmp)
178   // Restore env parameter
179   ld.d $a0, $sp, 8
180   CFI_RESTORE (4)
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)
190   // tail jump to libc setjmp
191   la.local $a1, _ZN14__interception16real___sigsetjmpE
192   ld.d $a1, $a1, 0
193   jr $a1
195   CFI_ENDPROC
196 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))