Add hppa*-*-* to dg-error targets at line 5
[official-gcc.git] / libsanitizer / tsan / tsan_rtl_aarch64.S
blobc6162659b87667eb219e9b3afec1f8dda4991f28
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 .section .text
8 #else
9 .section __TEXT,__text
10 .align 3
11 #endif
13 ASM_HIDDEN(__tsan_setjmp)
14 .comm _ZN14__interception11real_setjmpE,8,8
15 .globl ASM_SYMBOL_INTERCEPTOR(setjmp)
16 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp))
17 ASM_SYMBOL_INTERCEPTOR(setjmp):
18   CFI_STARTPROC
20   // Save frame/link register
21   stp     x29, x30, [sp, -32]!
22   CFI_DEF_CFA_OFFSET (32)
23   CFI_OFFSET (29, -32)
24   CFI_OFFSET (30, -24)
26   // Adjust the SP for previous frame
27   add     x29, sp, 0
28   CFI_DEF_CFA_REGISTER (29)
30   // Save env parameter
31   str     x0, [sp, 16]
32   CFI_OFFSET (0, -16)
34   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
35   add     x0, x29, 32
37   // call tsan interceptor
38   bl      ASM_SYMBOL(__tsan_setjmp)
40   // Restore env parameter
41   ldr     x0, [sp, 16]
42   CFI_RESTORE (0)
44   // Restore frame/link register
45   ldp     x29, x30, [sp], 32
46   CFI_RESTORE (29)
47   CFI_RESTORE (30)
48   CFI_DEF_CFA (31, 0)
50   // tail jump to libc setjmp
51 #if !defined(__APPLE__)
52   adrp    x1, :got:_ZN14__interception11real_setjmpE
53   ldr     x1, [x1, #:got_lo12:_ZN14__interception11real_setjmpE]
54   ldr     x1, [x1]
55 #else
56   adrp    x1, _setjmp@GOTPAGE
57   ldr     x1, [x1, _setjmp@GOTPAGEOFF]
58 #endif
59   br      x1
61   CFI_ENDPROC
62 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp))
64 .comm _ZN14__interception12real__setjmpE,8,8
65 .globl ASM_SYMBOL_INTERCEPTOR(_setjmp)
66 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp))
67 ASM_SYMBOL_INTERCEPTOR(_setjmp):
68   CFI_STARTPROC
70   // Save frame/link register
71   stp     x29, x30, [sp, -32]!
72   CFI_DEF_CFA_OFFSET (32)
73   CFI_OFFSET (29, -32)
74   CFI_OFFSET (30, -24)
76   // Adjust the SP for previous frame
77   add     x29, sp, 0
78   CFI_DEF_CFA_REGISTER (29)
80   // Save env parameter
81   str     x0, [sp, 16]
82   CFI_OFFSET (0, -16)
84   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
85   add     x0, x29, 32
87   // call tsan interceptor
88   bl      ASM_SYMBOL(__tsan_setjmp)
90   // Restore env parameter
91   ldr     x0, [sp, 16]
92   CFI_RESTORE (0)
94   // Restore frame/link register
95   ldp     x29, x30, [sp], 32
96   CFI_RESTORE (29)
97   CFI_RESTORE (30)
98   CFI_DEF_CFA (31, 0)
100   // tail jump to libc setjmp
101 #if !defined(__APPLE__)
102   adrp    x1, :got:_ZN14__interception12real__setjmpE
103   ldr     x1, [x1, #:got_lo12:_ZN14__interception12real__setjmpE]
104   ldr     x1, [x1]
105 #else
106   adrp    x1, __setjmp@GOTPAGE
107   ldr     x1, [x1, __setjmp@GOTPAGEOFF]
108 #endif
109   br      x1
111   CFI_ENDPROC
112 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp))
114 .comm _ZN14__interception14real_sigsetjmpE,8,8
115 .globl ASM_SYMBOL_INTERCEPTOR(sigsetjmp)
116 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
117 ASM_SYMBOL_INTERCEPTOR(sigsetjmp):
118   CFI_STARTPROC
120   // Save frame/link register
121   stp     x29, x30, [sp, -32]!
122   CFI_DEF_CFA_OFFSET (32)
123   CFI_OFFSET (29, -32)
124   CFI_OFFSET (30, -24)
126   // Adjust the SP for previous frame
127   add     x29, sp, 0
128   CFI_DEF_CFA_REGISTER (29)
130   // Save env and savesigs parameter
131   stp     x0, x1, [sp, 16]
132   CFI_OFFSET (0, -16)
133   CFI_OFFSET (1, -8)
135   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
136   add     x0, x29, 32
138   // call tsan interceptor
139   bl      ASM_SYMBOL(__tsan_setjmp)
141   // Restore env and savesigs parameter
142   ldp     x0, x1, [sp, 16]
143   CFI_RESTORE (0)
144   CFI_RESTORE (1)
146   // Restore frame/link register
147   ldp     x29, x30, [sp], 32
148   CFI_RESTORE (29)
149   CFI_RESTORE (30)
150   CFI_DEF_CFA (31, 0)
152   // tail jump to libc sigsetjmp
153 #if !defined(__APPLE__)
154   adrp    x2, :got:_ZN14__interception14real_sigsetjmpE
155   ldr     x2, [x2, #:got_lo12:_ZN14__interception14real_sigsetjmpE]
156   ldr     x2, [x2]
157 #else
158   adrp    x2, _sigsetjmp@GOTPAGE
159   ldr     x2, [x2, _sigsetjmp@GOTPAGEOFF]
160 #endif
161   br      x2
162   CFI_ENDPROC
163 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
165 #if !defined(__APPLE__)
166 .comm _ZN14__interception16real___sigsetjmpE,8,8
167 .globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)
168 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
169 ASM_SYMBOL_INTERCEPTOR(__sigsetjmp):
170   CFI_STARTPROC
172   // Save frame/link register
173   stp     x29, x30, [sp, -32]!
174   CFI_DEF_CFA_OFFSET (32)
175   CFI_OFFSET (29, -32)
176   CFI_OFFSET (30, -24)
178   // Adjust the SP for previous frame
179   add     x29, sp, 0
180   CFI_DEF_CFA_REGISTER (29)
182   // Save env and savesigs parameter
183   stp     x0, x1, [sp, 16]
184   CFI_OFFSET (0, -16)
185   CFI_OFFSET (1, -8)
187   // Obtain SP, first argument to `void __tsan_setjmp(uptr sp)`
188   add     x0, x29, 32
190   // call tsan interceptor
191   bl      ASM_SYMBOL(__tsan_setjmp)
193   // Restore env and savesigs parameter
194   ldp     x0, x1, [sp, 16]
195   CFI_RESTORE (0)
196   CFI_RESTORE (1)
198   // Restore frame/link register
199   ldp     x29, x30, [sp], 32
200   CFI_RESTORE (29)
201   CFI_RESTORE (30)
202   CFI_DEF_CFA (31, 0)
204   // tail jump to libc __sigsetjmp
205 #if !defined(__APPLE__)
206   adrp    x2, :got:_ZN14__interception16real___sigsetjmpE
207   ldr     x2, [x2, #:got_lo12:_ZN14__interception16real___sigsetjmpE]
208   ldr     x2, [x2]
209 #else
210   adrp    x2, ASM_SYMBOL(__sigsetjmp)@page
211   add     x2, x2, ASM_SYMBOL(__sigsetjmp)@pageoff
212 #endif
213   br      x2
214   CFI_ENDPROC
215 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
216 #endif
218 NO_EXEC_STACK_DIRECTIVE
220 #endif