blob: 8db62f9013a3d7ff39e8cfc86ea5d82c42892eda [file] [log] [blame]
Alexey Samsonov58e44a32013-12-05 10:40:11 +00001#include "sanitizer_common/sanitizer_asm.h"
Kostya Serebryany4ad375f2012-05-10 13:48:04 +00002.section .text
3
Dmitry Vyukov20678e22012-11-26 14:20:26 +00004.hidden __tsan_trace_switch
Kostya Serebryany4ad375f2012-05-10 13:48:04 +00005.globl __tsan_trace_switch_thunk
6__tsan_trace_switch_thunk:
Kostya Serebryany14e92c22013-12-05 07:44:35 +00007 CFI_STARTPROC
Kostya Serebryany4ad375f2012-05-10 13:48:04 +00008 # Save scratch registers.
9 push %rax
Kostya Serebryany14e92c22013-12-05 07:44:35 +000010 CFI_ADJUST_CFA_OFFSET(8)
11 CFI_REL_OFFSET(%rax, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000012 push %rcx
Kostya Serebryany14e92c22013-12-05 07:44:35 +000013 CFI_ADJUST_CFA_OFFSET(8)
14 CFI_REL_OFFSET(%rcx, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000015 push %rdx
Kostya Serebryany14e92c22013-12-05 07:44:35 +000016 CFI_ADJUST_CFA_OFFSET(8)
17 CFI_REL_OFFSET(%rdx, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000018 push %rsi
Kostya Serebryany14e92c22013-12-05 07:44:35 +000019 CFI_ADJUST_CFA_OFFSET(8)
20 CFI_REL_OFFSET(%rsi, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000021 push %rdi
Kostya Serebryany14e92c22013-12-05 07:44:35 +000022 CFI_ADJUST_CFA_OFFSET(8)
23 CFI_REL_OFFSET(%rdi, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000024 push %r8
Kostya Serebryany14e92c22013-12-05 07:44:35 +000025 CFI_ADJUST_CFA_OFFSET(8)
26 CFI_REL_OFFSET(%r8, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000027 push %r9
Kostya Serebryany14e92c22013-12-05 07:44:35 +000028 CFI_ADJUST_CFA_OFFSET(8)
29 CFI_REL_OFFSET(%r9, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000030 push %r10
Kostya Serebryany14e92c22013-12-05 07:44:35 +000031 CFI_ADJUST_CFA_OFFSET(8)
32 CFI_REL_OFFSET(%r10, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000033 push %r11
Kostya Serebryany14e92c22013-12-05 07:44:35 +000034 CFI_ADJUST_CFA_OFFSET(8)
35 CFI_REL_OFFSET(%r11, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000036 # Align stack frame.
37 push %rbx # non-scratch
Kostya Serebryany14e92c22013-12-05 07:44:35 +000038 CFI_ADJUST_CFA_OFFSET(8)
39 CFI_REL_OFFSET(%rbx, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000040 mov %rsp, %rbx # save current rsp
Kostya Serebryany14e92c22013-12-05 07:44:35 +000041 CFI_DEF_CFA_REGISTER(%rbx)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000042 shr $4, %rsp # clear 4 lsb, align to 16
43 shl $4, %rsp
44
45 call __tsan_trace_switch
46
47 # Unalign stack frame back.
48 mov %rbx, %rsp # restore the original rsp
Kostya Serebryany14e92c22013-12-05 07:44:35 +000049 CFI_DEF_CFA_REGISTER(%rsp)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000050 pop %rbx
Kostya Serebryany14e92c22013-12-05 07:44:35 +000051 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000052 # Restore scratch registers.
53 pop %r11
Kostya Serebryany14e92c22013-12-05 07:44:35 +000054 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000055 pop %r10
Kostya Serebryany14e92c22013-12-05 07:44:35 +000056 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000057 pop %r9
Kostya Serebryany14e92c22013-12-05 07:44:35 +000058 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000059 pop %r8
Kostya Serebryany14e92c22013-12-05 07:44:35 +000060 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000061 pop %rdi
Kostya Serebryany14e92c22013-12-05 07:44:35 +000062 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000063 pop %rsi
Kostya Serebryany14e92c22013-12-05 07:44:35 +000064 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000065 pop %rdx
Kostya Serebryany14e92c22013-12-05 07:44:35 +000066 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000067 pop %rcx
Kostya Serebryany14e92c22013-12-05 07:44:35 +000068 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000069 pop %rax
Kostya Serebryany14e92c22013-12-05 07:44:35 +000070 CFI_ADJUST_CFA_OFFSET(-8)
71 CFI_RESTORE(%rax)
72 CFI_RESTORE(%rbx)
73 CFI_RESTORE(%rcx)
74 CFI_RESTORE(%rdx)
75 CFI_RESTORE(%rsi)
76 CFI_RESTORE(%rdi)
77 CFI_RESTORE(%r8)
78 CFI_RESTORE(%r9)
79 CFI_RESTORE(%r10)
80 CFI_RESTORE(%r11)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000081 ret
Kostya Serebryany14e92c22013-12-05 07:44:35 +000082 CFI_ENDPROC
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000083
Dmitry Vyukov20678e22012-11-26 14:20:26 +000084.hidden __tsan_report_race
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000085.globl __tsan_report_race_thunk
86__tsan_report_race_thunk:
Kostya Serebryany14e92c22013-12-05 07:44:35 +000087 CFI_STARTPROC
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000088 # Save scratch registers.
89 push %rax
Kostya Serebryany14e92c22013-12-05 07:44:35 +000090 CFI_ADJUST_CFA_OFFSET(8)
91 CFI_REL_OFFSET(%rax, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000092 push %rcx
Kostya Serebryany14e92c22013-12-05 07:44:35 +000093 CFI_ADJUST_CFA_OFFSET(8)
94 CFI_REL_OFFSET(%rcx, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000095 push %rdx
Kostya Serebryany14e92c22013-12-05 07:44:35 +000096 CFI_ADJUST_CFA_OFFSET(8)
97 CFI_REL_OFFSET(%rdx, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000098 push %rsi
Kostya Serebryany14e92c22013-12-05 07:44:35 +000099 CFI_ADJUST_CFA_OFFSET(8)
100 CFI_REL_OFFSET(%rsi, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000101 push %rdi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000102 CFI_ADJUST_CFA_OFFSET(8)
103 CFI_REL_OFFSET(%rdi, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000104 push %r8
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000105 CFI_ADJUST_CFA_OFFSET(8)
106 CFI_REL_OFFSET(%r8, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000107 push %r9
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000108 CFI_ADJUST_CFA_OFFSET(8)
109 CFI_REL_OFFSET(%r9, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000110 push %r10
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000111 CFI_ADJUST_CFA_OFFSET(8)
112 CFI_REL_OFFSET(%r10, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000113 push %r11
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000114 CFI_ADJUST_CFA_OFFSET(8)
115 CFI_REL_OFFSET(%r11, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000116 # Align stack frame.
117 push %rbx # non-scratch
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000118 CFI_ADJUST_CFA_OFFSET(8)
119 CFI_REL_OFFSET(%rbx, 0)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000120 mov %rsp, %rbx # save current rsp
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000121 CFI_DEF_CFA_REGISTER(%rbx)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000122 shr $4, %rsp # clear 4 lsb, align to 16
123 shl $4, %rsp
124
125 call __tsan_report_race
126
127 # Unalign stack frame back.
128 mov %rbx, %rsp # restore the original rsp
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000129 CFI_DEF_CFA_REGISTER(%rsp)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000130 pop %rbx
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000131 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000132 # Restore scratch registers.
133 pop %r11
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000134 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000135 pop %r10
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000136 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000137 pop %r9
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000138 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000139 pop %r8
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000140 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000141 pop %rdi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000142 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000143 pop %rsi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000144 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000145 pop %rdx
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000146 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000147 pop %rcx
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000148 CFI_ADJUST_CFA_OFFSET(-8)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000149 pop %rax
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000150 CFI_ADJUST_CFA_OFFSET(-8)
151 CFI_RESTORE(%rax)
152 CFI_RESTORE(%rbx)
153 CFI_RESTORE(%rcx)
154 CFI_RESTORE(%rdx)
155 CFI_RESTORE(%rsi)
156 CFI_RESTORE(%rdi)
157 CFI_RESTORE(%r8)
158 CFI_RESTORE(%r9)
159 CFI_RESTORE(%r10)
160 CFI_RESTORE(%r11)
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000161 ret
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000162 CFI_ENDPROC
Dmitry Vyukove2b5b5c2012-08-17 18:05:28 +0000163
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000164.hidden __tsan_setjmp
165.comm _ZN14__interception11real_setjmpE,8,8
166.globl setjmp
167.type setjmp, @function
168setjmp:
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000169 CFI_STARTPROC
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000170 // save env parameter
171 push %rdi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000172 CFI_ADJUST_CFA_OFFSET(8)
173 CFI_REL_OFFSET(%rdi, 0)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000174 // obtain %rsp
Viktor Kutuzovcdcc46d2014-10-21 13:38:05 +0000175#if defined(__FreeBSD__)
176 lea 8(%rsp), %rdi
177 mov %rdi, %rsi
178#else
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000179 lea 16(%rsp), %rdi
180 mov %rdi, %rsi
181 xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp)
182 rol $0x11, %rsi
Viktor Kutuzovcdcc46d2014-10-21 13:38:05 +0000183#endif
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000184 // call tsan interceptor
185 call __tsan_setjmp
186 // restore env parameter
187 pop %rdi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000188 CFI_ADJUST_CFA_OFFSET(-8)
189 CFI_RESTORE(%rdi)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000190 // tail jump to libc setjmp
191 movl $0, %eax
192 movq _ZN14__interception11real_setjmpE@GOTPCREL(%rip), %rdx
193 jmp *(%rdx)
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000194 CFI_ENDPROC
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000195.size setjmp, .-setjmp
196
197.comm _ZN14__interception12real__setjmpE,8,8
198.globl _setjmp
199.type _setjmp, @function
200_setjmp:
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000201 CFI_STARTPROC
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000202 // save env parameter
203 push %rdi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000204 CFI_ADJUST_CFA_OFFSET(8)
205 CFI_REL_OFFSET(%rdi, 0)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000206 // obtain %rsp
Viktor Kutuzovcdcc46d2014-10-21 13:38:05 +0000207#if defined(__FreeBSD__)
208 lea 8(%rsp), %rdi
209 mov %rdi, %rsi
210#else
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000211 lea 16(%rsp), %rdi
212 mov %rdi, %rsi
213 xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp)
214 rol $0x11, %rsi
Viktor Kutuzovcdcc46d2014-10-21 13:38:05 +0000215#endif
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000216 // call tsan interceptor
217 call __tsan_setjmp
218 // restore env parameter
219 pop %rdi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000220 CFI_ADJUST_CFA_OFFSET(-8)
221 CFI_RESTORE(%rdi)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000222 // tail jump to libc setjmp
223 movl $0, %eax
224 movq _ZN14__interception12real__setjmpE@GOTPCREL(%rip), %rdx
225 jmp *(%rdx)
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000226 CFI_ENDPROC
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000227.size _setjmp, .-_setjmp
228
229.comm _ZN14__interception14real_sigsetjmpE,8,8
230.globl sigsetjmp
231.type sigsetjmp, @function
232sigsetjmp:
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000233 CFI_STARTPROC
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000234 // save env parameter
235 push %rdi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000236 CFI_ADJUST_CFA_OFFSET(8)
237 CFI_REL_OFFSET(%rdi, 0)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000238 // save savesigs parameter
239 push %rsi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000240 CFI_ADJUST_CFA_OFFSET(8)
241 CFI_REL_OFFSET(%rsi, 0)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000242 // align stack frame
243 sub $8, %rsp
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000244 CFI_ADJUST_CFA_OFFSET(8)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000245 // obtain %rsp
Viktor Kutuzovcdcc46d2014-10-21 13:38:05 +0000246#if defined(__FreeBSD__)
247 lea 24(%rsp), %rdi
248 mov %rdi, %rsi
249#else
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000250 lea 32(%rsp), %rdi
251 mov %rdi, %rsi
252 xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp)
253 rol $0x11, %rsi
Viktor Kutuzovcdcc46d2014-10-21 13:38:05 +0000254#endif
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000255 // call tsan interceptor
256 call __tsan_setjmp
257 // unalign stack frame
258 add $8, %rsp
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000259 CFI_ADJUST_CFA_OFFSET(-8)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000260 // restore savesigs parameter
261 pop %rsi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000262 CFI_ADJUST_CFA_OFFSET(-8)
263 CFI_RESTORE(%rsi)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000264 // restore env parameter
265 pop %rdi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000266 CFI_ADJUST_CFA_OFFSET(-8)
267 CFI_RESTORE(%rdi)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000268 // tail jump to libc sigsetjmp
269 movl $0, %eax
270 movq _ZN14__interception14real_sigsetjmpE@GOTPCREL(%rip), %rdx
271 jmp *(%rdx)
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000272 CFI_ENDPROC
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000273.size sigsetjmp, .-sigsetjmp
274
275.comm _ZN14__interception16real___sigsetjmpE,8,8
276.globl __sigsetjmp
277.type __sigsetjmp, @function
278__sigsetjmp:
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000279 CFI_STARTPROC
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000280 // save env parameter
281 push %rdi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000282 CFI_ADJUST_CFA_OFFSET(8)
283 CFI_REL_OFFSET(%rdi, 0)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000284 // save savesigs parameter
285 push %rsi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000286 CFI_ADJUST_CFA_OFFSET(8)
287 CFI_REL_OFFSET(%rsi, 0)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000288 // align stack frame
289 sub $8, %rsp
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000290 CFI_ADJUST_CFA_OFFSET(8)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000291 // obtain %rsp
Viktor Kutuzovcdcc46d2014-10-21 13:38:05 +0000292#if defined(__FreeBSD__)
293 lea 24(%rsp), %rdi
294 mov %rdi, %rsi
295#else
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000296 lea 32(%rsp), %rdi
297 mov %rdi, %rsi
298 xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp)
299 rol $0x11, %rsi
Viktor Kutuzovcdcc46d2014-10-21 13:38:05 +0000300#endif
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000301 // call tsan interceptor
302 call __tsan_setjmp
303 // unalign stack frame
304 add $8, %rsp
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000305 CFI_ADJUST_CFA_OFFSET(-8)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000306 // restore savesigs parameter
307 pop %rsi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000308 CFI_ADJUST_CFA_OFFSET(-8)
309 CFI_RESTORE(%rsi)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000310 // restore env parameter
311 pop %rdi
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000312 CFI_ADJUST_CFA_OFFSET(-8)
313 CFI_RESTORE(%rdi)
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000314 // tail jump to libc sigsetjmp
315 movl $0, %eax
316 movq _ZN14__interception16real___sigsetjmpE@GOTPCREL(%rip), %rdx
317 jmp *(%rdx)
Kostya Serebryany14e92c22013-12-05 07:44:35 +0000318 CFI_ENDPROC
Dmitry Vyukov4adf49d2013-03-25 10:10:44 +0000319.size __sigsetjmp, .-__sigsetjmp
320
Viktor Kutuzovcdcc46d2014-10-21 13:38:05 +0000321#if defined(__FreeBSD__) || defined(__linux__)
Dmitry Vyukove2b5b5c2012-08-17 18:05:28 +0000322/* We do not need executable stack. */
323.section .note.GNU-stack,"",@progbits
324#endif