Add hppa*-*-* to dg-error targets at line 5
[official-gcc.git] / libsanitizer / tsan / tsan_rtl_amd64.S
blobf848be9dd46c346e1befb269c4b6d070f64054e2
1 // The content of this file is x86_64-only:
2 #if defined(__x86_64__)
4 #include "sanitizer_common/sanitizer_asm.h"
6 #if !defined(__APPLE__)
7 .section .text
8 #else
9 .section __TEXT,__text
10 #endif
12 ASM_HIDDEN(__tsan_setjmp)
13 #if defined(__NetBSD__)
14 .comm _ZN14__interception15real___setjmp14E,8,8
15 #elif !defined(__APPLE__)
16 .comm _ZN14__interception11real_setjmpE,8,8
17 #endif
18 #if defined(__NetBSD__)
19 .globl ASM_SYMBOL_INTERCEPTOR(__setjmp14)
20 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__setjmp14))
21 ASM_SYMBOL_INTERCEPTOR(__setjmp14):
22 #else
23 .globl ASM_SYMBOL_INTERCEPTOR(setjmp)
24 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp))
25 ASM_SYMBOL_INTERCEPTOR(setjmp):
26 #endif
27   CFI_STARTPROC
28   _CET_ENDBR
29   // save env parameter
30   push %rdi
31   CFI_ADJUST_CFA_OFFSET(8)
32   CFI_REL_OFFSET(%rdi, 0)
33   // obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
34 #if defined(__FreeBSD__) || defined(__NetBSD__)
35   lea 8(%rsp), %rdi
36 #elif defined(__linux__) || defined(__APPLE__)
37   lea 16(%rsp), %rdi
38 #else
39 # error "Unknown platform"
40 #endif
41   // call tsan interceptor
42   call ASM_SYMBOL(__tsan_setjmp)
43   // restore env parameter
44   pop %rdi
45   CFI_ADJUST_CFA_OFFSET(-8)
46   CFI_RESTORE(%rdi)
47   // tail jump to libc setjmp
48   movl $0, %eax
49 #if defined(__NetBSD__)
50   movq _ZN14__interception15real___setjmp14E@GOTPCREL(%rip), %rdx
51   jmp *(%rdx)
52 #elif !defined(__APPLE__)
53   movq _ZN14__interception11real_setjmpE@GOTPCREL(%rip), %rdx
54   jmp *(%rdx)
55 #else
56   jmp ASM_SYMBOL(setjmp)
57 #endif
58   CFI_ENDPROC
59 #if defined(__NetBSD__)
60 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__setjmp14))
61 #else
62 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp))
63 #endif
65 .comm _ZN14__interception12real__setjmpE,8,8
66 .globl ASM_SYMBOL_INTERCEPTOR(_setjmp)
67 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp))
68 ASM_SYMBOL_INTERCEPTOR(_setjmp):
69   CFI_STARTPROC
70   _CET_ENDBR
71   // save env parameter
72   push %rdi
73   CFI_ADJUST_CFA_OFFSET(8)
74   CFI_REL_OFFSET(%rdi, 0)
75   // obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
76 #if defined(__FreeBSD__) || defined(__NetBSD__)
77   lea 8(%rsp), %rdi
78 #elif defined(__linux__) || defined(__APPLE__)
79   lea 16(%rsp), %rdi
80 #else
81 # error "Unknown platform"
82 #endif
83   // call tsan interceptor
84   call ASM_SYMBOL(__tsan_setjmp)
85   // restore env parameter
86   pop %rdi
87   CFI_ADJUST_CFA_OFFSET(-8)
88   CFI_RESTORE(%rdi)
89   // tail jump to libc setjmp
90   movl $0, %eax
91 #if !defined(__APPLE__)
92   movq _ZN14__interception12real__setjmpE@GOTPCREL(%rip), %rdx
93   jmp *(%rdx)
94 #else
95   jmp ASM_SYMBOL(_setjmp)
96 #endif
97   CFI_ENDPROC
98 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp))
100 #if defined(__NetBSD__)
101 .comm _ZN14__interception18real___sigsetjmp14E,8,8
102 .globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14)
103 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14))
104 ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14):
105 #else
106 .comm _ZN14__interception14real_sigsetjmpE,8,8
107 .globl ASM_SYMBOL_INTERCEPTOR(sigsetjmp)
108 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
109 ASM_SYMBOL_INTERCEPTOR(sigsetjmp):
110 #endif
111   CFI_STARTPROC
112   _CET_ENDBR
113   // save env parameter
114   push %rdi
115   CFI_ADJUST_CFA_OFFSET(8)
116   CFI_REL_OFFSET(%rdi, 0)
117   // save savesigs parameter
118   push %rsi
119   CFI_ADJUST_CFA_OFFSET(8)
120   CFI_REL_OFFSET(%rsi, 0)
121   // align stack frame
122   sub $8, %rsp
123   CFI_ADJUST_CFA_OFFSET(8)
124   // obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
125 #if defined(__FreeBSD__) || defined(__NetBSD__)
126   lea 24(%rsp), %rdi
127 #elif defined(__linux__) || defined(__APPLE__)
128   lea 32(%rsp), %rdi
129 #else
130 # error "Unknown platform"
131 #endif
132   // call tsan interceptor
133   call ASM_SYMBOL(__tsan_setjmp)
134   // unalign stack frame
135   add $8, %rsp
136   CFI_ADJUST_CFA_OFFSET(-8)
137   // restore savesigs parameter
138   pop %rsi
139   CFI_ADJUST_CFA_OFFSET(-8)
140   CFI_RESTORE(%rsi)
141   // restore env parameter
142   pop %rdi
143   CFI_ADJUST_CFA_OFFSET(-8)
144   CFI_RESTORE(%rdi)
145   // tail jump to libc sigsetjmp
146   movl $0, %eax
147 #if defined(__NetBSD__)
148   movq _ZN14__interception18real___sigsetjmp14E@GOTPCREL(%rip), %rdx
149   jmp *(%rdx)
150 #elif !defined(__APPLE__)
151   movq _ZN14__interception14real_sigsetjmpE@GOTPCREL(%rip), %rdx
152   jmp *(%rdx)
153 #else
154   jmp ASM_SYMBOL(sigsetjmp)
155 #endif
156   CFI_ENDPROC
157 #if defined(__NetBSD__)
158 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp14))
159 #else
160 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp))
161 #endif
163 #if !defined(__APPLE__) && !defined(__NetBSD__)
164 .comm _ZN14__interception16real___sigsetjmpE,8,8
165 .globl ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)
166 ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
167 ASM_SYMBOL_INTERCEPTOR(__sigsetjmp):
168   CFI_STARTPROC
169   _CET_ENDBR
170   // save env parameter
171   push %rdi
172   CFI_ADJUST_CFA_OFFSET(8)
173   CFI_REL_OFFSET(%rdi, 0)
174   // save savesigs parameter
175   push %rsi
176   CFI_ADJUST_CFA_OFFSET(8)
177   CFI_REL_OFFSET(%rsi, 0)
178   // align stack frame
179   sub $8, %rsp
180   CFI_ADJUST_CFA_OFFSET(8)
181   // obtain SP, store in %rdi, first argument to `void __tsan_setjmp(uptr sp)`
182 #if defined(__FreeBSD__)
183   lea 24(%rsp), %rdi
184 #else
185   lea 32(%rsp), %rdi
186 #endif
187   // call tsan interceptor
188   call ASM_SYMBOL(__tsan_setjmp)
189   // unalign stack frame
190   add $8, %rsp
191   CFI_ADJUST_CFA_OFFSET(-8)
192   // restore savesigs parameter
193   pop %rsi
194   CFI_ADJUST_CFA_OFFSET(-8)
195   CFI_RESTORE(%rsi)
196   // restore env parameter
197   pop %rdi
198   CFI_ADJUST_CFA_OFFSET(-8)
199   CFI_RESTORE(%rdi)
200   // tail jump to libc sigsetjmp
201   movl $0, %eax
202   movq _ZN14__interception16real___sigsetjmpE@GOTPCREL(%rip), %rdx
203   jmp *(%rdx)
204   CFI_ENDPROC
205 ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp))
206 #endif  // !defined(__APPLE__) && !defined(__NetBSD__)
208 NO_EXEC_STACK_DIRECTIVE
210 #endif