c++: result location and explicit inst [PR108496]
[official-gcc.git] / libsanitizer / tsan / tsan_rtl_aarch64.S
blobe0b4c71dfed9a9ac9424c8f557161bf905516cd4
1 // The content of this file is AArch64-only:
2 #if defined(__aarch64__)
4 #include "sanitizer_common/sanitizer_asm.h"
6 #if defined(__APPLE__)
7 .align  2
9 .section  __DATA,__nl_symbol_ptr,non_lazy_symbol_pointers
10 .long _setjmp$non_lazy_ptr
11 _setjmp$non_lazy_ptr:
12 .indirect_symbol _setjmp
13 .long 0
15 .section  __DATA,__nl_symbol_ptr,non_lazy_symbol_pointers
16 .long __setjmp$non_lazy_ptr
17 __setjmp$non_lazy_ptr:
18 .indirect_symbol __setjmp
19 .long 0
21 .section  __DATA,__nl_symbol_ptr,non_lazy_symbol_pointers
22 .long _sigsetjmp$non_lazy_ptr
23 _sigsetjmp$non_lazy_ptr:
24 .indirect_symbol _sigsetjmp
25 .long 0
26 #endif
28 #if !defined(__APPLE__)
29 .section .text
30 #else
31 .section __TEXT,__text
32 .align 3
33 #endif
35 ASM_HIDDEN(__tsan_setjmp)
36 .comm _ZN14__interception11real_setjmpE,8,8
37 .globl ASM_SYMBOL_INTERCEPTOR(setjmp)
38 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp))
39 ASM_SYMBOL_INTERCEPTOR(setjmp):
40   CFI_STARTPROC
42   // Save frame/link register
43   stp     x29, x30, [sp, -32]!
44   CFI_DEF_CFA_OFFSET (32)
45   CFI_OFFSET (29, -32)
46   CFI_OFFSET (30, -24)
48   // Adjust the SP for previous frame
49   add     x29, sp, 0
50   CFI_DEF_CFA_REGISTER (29)
52   // Save env parameter
53   str     x0, [sp, 16]
54   CFI_OFFSET (0, -16)
56   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
57   add     x0, x29, 32
59   // call tsan interceptor
60   bl      ASM_SYMBOL(__tsan_setjmp)
62   // Restore env parameter
63   ldr     x0, [sp, 16]
64   CFI_RESTORE (0)
66   // Restore frame/link register
67   ldp     x29, x30, [sp], 32
68   CFI_RESTORE (29)
69   CFI_RESTORE (30)
70   CFI_DEF_CFA (31, 0)
72   // tail jump to libc setjmp
73 #if !defined(__APPLE__)
74   adrp    x1, :got:_ZN14__interception11real_setjmpE
75   ldr     x1, [x1, #:got_lo12:_ZN14__interception11real_setjmpE]
76   ldr     x1, [x1]
77 #else
78   adrp    x1, _setjmp$non_lazy_ptr@page
79   add     x1, x1, _setjmp$non_lazy_ptr@pageoff
80   ldr     x1, [x1]
81 #endif
82   br      x1
84   CFI_ENDPROC
85 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp))
87 .comm _ZN14__interception12real__setjmpE,8,8
88 .globl ASM_SYMBOL_INTERCEPTOR(_setjmp)
89 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp))
90 ASM_SYMBOL_INTERCEPTOR(_setjmp):
91   CFI_STARTPROC
93   // Save frame/link register
94   stp     x29, x30, [sp, -32]!
95   CFI_DEF_CFA_OFFSET (32)
96   CFI_OFFSET (29, -32)
97   CFI_OFFSET (30, -24)
99   // Adjust the SP for previous frame
100   add     x29, sp, 0
101   CFI_DEF_CFA_REGISTER (29)
103   // Save env parameter
104   str     x0, [sp, 16]
105   CFI_OFFSET (0, -16)
107   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
108   add     x0, x29, 32
110   // call tsan interceptor
111   bl      ASM_SYMBOL(__tsan_setjmp)
113   // Restore env parameter
114   ldr     x0, [sp, 16]
115   CFI_RESTORE (0)
117   // Restore frame/link register
118   ldp     x29, x30, [sp], 32
119   CFI_RESTORE (29)
120   CFI_RESTORE (30)
121   CFI_DEF_CFA (31, 0)
123   // tail jump to libc setjmp
124 #if !defined(__APPLE__)
125   adrp    x1, :got:_ZN14__interception12real__setjmpE
126   ldr     x1, [x1, #:got_lo12:_ZN14__interception12real__setjmpE]
127   ldr     x1, [x1]
128 #else
129   adrp    x1, __setjmp$non_lazy_ptr@page
130   add     x1, x1, __setjmp$non_lazy_ptr@pageoff
131   ldr     x1, [x1]
132 #endif
133   br      x1
135   CFI_ENDPROC
136 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp))
138 .comm _ZN14__interception14real_sigsetjmpE,8,8
139 .globl ASM_SYMBOL_INTERCEPTOR(sigsetjmp)
140 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
141 ASM_SYMBOL_INTERCEPTOR(sigsetjmp):
142   CFI_STARTPROC
144   // Save frame/link register
145   stp     x29, x30, [sp, -32]!
146   CFI_DEF_CFA_OFFSET (32)
147   CFI_OFFSET (29, -32)
148   CFI_OFFSET (30, -24)
150   // Adjust the SP for previous frame
151   add     x29, sp, 0
152   CFI_DEF_CFA_REGISTER (29)
154   // Save env and savesigs parameter
155   stp     x0, x1, [sp, 16]
156   CFI_OFFSET (0, -16)
157   CFI_OFFSET (1, -8)
159   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
160   add     x0, x29, 32
162   // call tsan interceptor
163   bl      ASM_SYMBOL(__tsan_setjmp)
165   // Restore env and savesigs parameter
166   ldp     x0, x1, [sp, 16]
167   CFI_RESTORE (0)
168   CFI_RESTORE (1)
170   // Restore frame/link register
171   ldp     x29, x30, [sp], 32
172   CFI_RESTORE (29)
173   CFI_RESTORE (30)
174   CFI_DEF_CFA (31, 0)
176   // tail jump to libc sigsetjmp
177 #if !defined(__APPLE__)
178   adrp    x2, :got:_ZN14__interception14real_sigsetjmpE
179   ldr     x2, [x2, #:got_lo12:_ZN14__interception14real_sigsetjmpE]
180   ldr     x2, [x2]
181 #else
182   adrp    x2, _sigsetjmp$non_lazy_ptr@page
183   add     x2, x2, _sigsetjmp$non_lazy_ptr@pageoff
184   ldr     x2, [x2]
185 #endif
186   br      x2
187   CFI_ENDPROC
188 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
190 #if !defined(__APPLE__)
191 .comm _ZN14__interception16real___sigsetjmpE,8,8
192 .globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)
193 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
194 ASM_SYMBOL_INTERCEPTOR(__sigsetjmp):
195   CFI_STARTPROC
197   // Save frame/link register
198   stp     x29, x30, [sp, -32]!
199   CFI_DEF_CFA_OFFSET (32)
200   CFI_OFFSET (29, -32)
201   CFI_OFFSET (30, -24)
203   // Adjust the SP for previous frame
204   add     x29, sp, 0
205   CFI_DEF_CFA_REGISTER (29)
207   // Save env and savesigs parameter
208   stp     x0, x1, [sp, 16]
209   CFI_OFFSET (0, -16)
210   CFI_OFFSET (1, -8)
212   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
213   add     x0, x29, 32
215   // call tsan interceptor
216   bl      ASM_SYMBOL(__tsan_setjmp)
218   // Restore env and savesigs parameter
219   ldp     x0, x1, [sp, 16]
220   CFI_RESTORE (0)
221   CFI_RESTORE (1)
223   // Restore frame/link register
224   ldp     x29, x30, [sp], 32
225   CFI_RESTORE (29)
226   CFI_RESTORE (30)
227   CFI_DEF_CFA (31, 0)
229   // tail jump to libc __sigsetjmp
230 #if !defined(__APPLE__)
231   adrp    x2, :got:_ZN14__interception16real___sigsetjmpE
232   ldr     x2, [x2, #:got_lo12:_ZN14__interception16real___sigsetjmpE]
233   ldr     x2, [x2]
234 #else
235   adrp    x2, ASM_SYMBOL(__sigsetjmp)@page
236   add     x2, x2, ASM_SYMBOL(__sigsetjmp)@pageoff
237 #endif
238   br      x2
239   CFI_ENDPROC
240 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
241 #endif
243 NO_EXEC_STACK_DIRECTIVE
245 #endif