[RISCV] Reduce redundancy in vnsrl tests
[llvm-project.git] / compiler-rt / lib / tsan / rtl / tsan_rtl_aarch64.S
blob7d920bee4a2db963209df565135f22f8771a0184
1 // The content of this file is AArch64-only:
2 #if defined(__aarch64__)
4 #include "sanitizer_common/sanitizer_asm.h"
5 #include "builtins/assembly.h"
7 #if !defined(__APPLE__)
8 .section .text
9 #else
10 .section __TEXT,__text
11 .align 3
12 #endif
14 ASM_HIDDEN(__tsan_setjmp)
15 .comm _ZN14__interception11real_setjmpE,8,8
16 .globl ASM_SYMBOL_INTERCEPTOR(setjmp)
17 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp))
18 ASM_SYMBOL_INTERCEPTOR(setjmp):
19   CFI_STARTPROC
20   BTI_C
22   // Save frame/link register
23   stp     x29, x30, [sp, -32]!
24   CFI_DEF_CFA_OFFSET (32)
25   CFI_OFFSET (29, -32)
26   CFI_OFFSET (30, -24)
28   // Adjust the SP for previous frame
29   add     x29, sp, 0
30   CFI_DEF_CFA_REGISTER (29)
32   // Save env parameter
33   str     x0, [sp, 16]
34   CFI_OFFSET (0, -16)
36   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
37   add     x0, x29, 32
39   // call tsan interceptor
40   bl      ASM_SYMBOL(__tsan_setjmp)
42   // Restore env parameter
43   ldr     x0, [sp, 16]
44   CFI_RESTORE (0)
46   // Restore frame/link register
47   ldp     x29, x30, [sp], 32
48   CFI_RESTORE (29)
49   CFI_RESTORE (30)
50   CFI_DEF_CFA (31, 0)
52   // tail jump to libc setjmp
53 #if !defined(__APPLE__)
54   adrp    x1, :got:_ZN14__interception11real_setjmpE
55   ldr     x1, [x1, #:got_lo12:_ZN14__interception11real_setjmpE]
56   ldr     x1, [x1]
57 #else
58   adrp    x1, _setjmp@GOTPAGE
59   ldr     x1, [x1, _setjmp@GOTPAGEOFF]
60 #endif
61   br      x1
63   CFI_ENDPROC
64 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp))
66 .comm _ZN14__interception12real__setjmpE,8,8
67 .globl ASM_SYMBOL_INTERCEPTOR(_setjmp)
68 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp))
69 ASM_SYMBOL_INTERCEPTOR(_setjmp):
70   CFI_STARTPROC
71   BTI_C
73   // Save frame/link register
74   stp     x29, x30, [sp, -32]!
75   CFI_DEF_CFA_OFFSET (32)
76   CFI_OFFSET (29, -32)
77   CFI_OFFSET (30, -24)
79   // Adjust the SP for previous frame
80   add     x29, sp, 0
81   CFI_DEF_CFA_REGISTER (29)
83   // Save env parameter
84   str     x0, [sp, 16]
85   CFI_OFFSET (0, -16)
87   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
88   add     x0, x29, 32
90   // call tsan interceptor
91   bl      ASM_SYMBOL(__tsan_setjmp)
93   // Restore env parameter
94   ldr     x0, [sp, 16]
95   CFI_RESTORE (0)
97   // Restore frame/link register
98   ldp     x29, x30, [sp], 32
99   CFI_RESTORE (29)
100   CFI_RESTORE (30)
101   CFI_DEF_CFA (31, 0)
103   // tail jump to libc setjmp
104 #if !defined(__APPLE__)
105   adrp    x1, :got:_ZN14__interception12real__setjmpE
106   ldr     x1, [x1, #:got_lo12:_ZN14__interception12real__setjmpE]
107   ldr     x1, [x1]
108 #else
109   adrp    x1, __setjmp@GOTPAGE
110   ldr     x1, [x1, __setjmp@GOTPAGEOFF]
111 #endif
112   br      x1
114   CFI_ENDPROC
115 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp))
117 .comm _ZN14__interception14real_sigsetjmpE,8,8
118 .globl ASM_SYMBOL_INTERCEPTOR(sigsetjmp)
119 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
120 ASM_SYMBOL_INTERCEPTOR(sigsetjmp):
121   CFI_STARTPROC
122   BTI_C
124   // Save frame/link register
125   stp     x29, x30, [sp, -32]!
126   CFI_DEF_CFA_OFFSET (32)
127   CFI_OFFSET (29, -32)
128   CFI_OFFSET (30, -24)
130   // Adjust the SP for previous frame
131   add     x29, sp, 0
132   CFI_DEF_CFA_REGISTER (29)
134   // Save env and savesigs parameter
135   stp     x0, x1, [sp, 16]
136   CFI_OFFSET (0, -16)
137   CFI_OFFSET (1, -8)
139   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
140   add     x0, x29, 32
142   // call tsan interceptor
143   bl      ASM_SYMBOL(__tsan_setjmp)
145   // Restore env and savesigs parameter
146   ldp     x0, x1, [sp, 16]
147   CFI_RESTORE (0)
148   CFI_RESTORE (1)
150   // Restore frame/link register
151   ldp     x29, x30, [sp], 32
152   CFI_RESTORE (29)
153   CFI_RESTORE (30)
154   CFI_DEF_CFA (31, 0)
156   // tail jump to libc sigsetjmp
157 #if !defined(__APPLE__)
158   adrp    x2, :got:_ZN14__interception14real_sigsetjmpE
159   ldr     x2, [x2, #:got_lo12:_ZN14__interception14real_sigsetjmpE]
160   ldr     x2, [x2]
161 #else
162   adrp    x2, _sigsetjmp@GOTPAGE
163   ldr     x2, [x2, _sigsetjmp@GOTPAGEOFF]
164 #endif
165   br      x2
166   CFI_ENDPROC
167 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
169 #if !defined(__APPLE__)
170 .comm _ZN14__interception16real___sigsetjmpE,8,8
171 .globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)
172 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
173 ASM_SYMBOL_INTERCEPTOR(__sigsetjmp):
174   CFI_STARTPROC
175   BTI_C
177   // Save frame/link register
178   stp     x29, x30, [sp, -32]!
179   CFI_DEF_CFA_OFFSET (32)
180   CFI_OFFSET (29, -32)
181   CFI_OFFSET (30, -24)
183   // Adjust the SP for previous frame
184   add     x29, sp, 0
185   CFI_DEF_CFA_REGISTER (29)
187   // Save env and savesigs parameter
188   stp     x0, x1, [sp, 16]
189   CFI_OFFSET (0, -16)
190   CFI_OFFSET (1, -8)
192   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
193   add     x0, x29, 32
195   // call tsan interceptor
196   bl      ASM_SYMBOL(__tsan_setjmp)
198   // Restore env and savesigs parameter
199   ldp     x0, x1, [sp, 16]
200   CFI_RESTORE (0)
201   CFI_RESTORE (1)
203   // Restore frame/link register
204   ldp     x29, x30, [sp], 32
205   CFI_RESTORE (29)
206   CFI_RESTORE (30)
207   CFI_DEF_CFA (31, 0)
209   // tail jump to libc __sigsetjmp
210 #if !defined(__APPLE__)
211   adrp    x2, :got:_ZN14__interception16real___sigsetjmpE
212   ldr     x2, [x2, #:got_lo12:_ZN14__interception16real___sigsetjmpE]
213   ldr     x2, [x2]
214 #else
215   adrp    x2, ASM_SYMBOL(__sigsetjmp)@page
216   add     x2, x2, ASM_SYMBOL(__sigsetjmp)@pageoff
217 #endif
218   br      x2
219   CFI_ENDPROC
220 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
221 #endif
223 NO_EXEC_STACK_DIRECTIVE
225 GNU_PROPERTY_BTI_PAC
227 #endif