trampoline-x86_64.S 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. // This file is generated from a similarly-named Perl script in the BoringSSL
  2. // source tree. Do not edit by hand.
  3. #if defined(__has_feature)
  4. #if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
  5. #define OPENSSL_NO_ASM
  6. #endif
  7. #endif
  8. #if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
  9. #if defined(BORINGSSL_PREFIX)
  10. #include <boringssl_prefix_symbols_asm.h>
  11. #endif
  12. .text
  13. .type abi_test_trampoline, @function
  14. .globl abi_test_trampoline
  15. .hidden abi_test_trampoline
  16. .align 16
  17. abi_test_trampoline:
  18. .Labi_test_trampoline_seh_begin:
  19. .cfi_startproc
  20. subq $120,%rsp
  21. .cfi_adjust_cfa_offset 120
  22. .Labi_test_trampoline_seh_prolog_alloc:
  23. movq %r8,48(%rsp)
  24. movq %rbx,64(%rsp)
  25. .cfi_offset rbx, -64
  26. .Labi_test_trampoline_seh_prolog_rbx:
  27. movq %rbp,72(%rsp)
  28. .cfi_offset rbp, -56
  29. .Labi_test_trampoline_seh_prolog_rbp:
  30. movq %r12,80(%rsp)
  31. .cfi_offset r12, -48
  32. .Labi_test_trampoline_seh_prolog_r12:
  33. movq %r13,88(%rsp)
  34. .cfi_offset r13, -40
  35. .Labi_test_trampoline_seh_prolog_r13:
  36. movq %r14,96(%rsp)
  37. .cfi_offset r14, -32
  38. .Labi_test_trampoline_seh_prolog_r14:
  39. movq %r15,104(%rsp)
  40. .cfi_offset r15, -24
  41. .Labi_test_trampoline_seh_prolog_r15:
  42. .Labi_test_trampoline_seh_prolog_end:
  43. movq 0(%rsi),%rbx
  44. movq 8(%rsi),%rbp
  45. movq 16(%rsi),%r12
  46. movq 24(%rsi),%r13
  47. movq 32(%rsi),%r14
  48. movq 40(%rsi),%r15
  49. movq %rdi,32(%rsp)
  50. movq %rsi,40(%rsp)
  51. movq %rdx,%r10
  52. movq %rcx,%r11
  53. decq %r11
  54. js .Largs_done
  55. movq (%r10),%rdi
  56. addq $8,%r10
  57. decq %r11
  58. js .Largs_done
  59. movq (%r10),%rsi
  60. addq $8,%r10
  61. decq %r11
  62. js .Largs_done
  63. movq (%r10),%rdx
  64. addq $8,%r10
  65. decq %r11
  66. js .Largs_done
  67. movq (%r10),%rcx
  68. addq $8,%r10
  69. decq %r11
  70. js .Largs_done
  71. movq (%r10),%r8
  72. addq $8,%r10
  73. decq %r11
  74. js .Largs_done
  75. movq (%r10),%r9
  76. addq $8,%r10
  77. leaq 0(%rsp),%rax
  78. .Largs_loop:
  79. decq %r11
  80. js .Largs_done
  81. movq %r11,56(%rsp)
  82. movq (%r10),%r11
  83. movq %r11,(%rax)
  84. movq 56(%rsp),%r11
  85. addq $8,%r10
  86. addq $8,%rax
  87. jmp .Largs_loop
  88. .Largs_done:
  89. movq 32(%rsp),%rax
  90. movq 48(%rsp),%r10
  91. testq %r10,%r10
  92. jz .Lno_unwind
  93. pushfq
  94. orq $0x100,0(%rsp)
  95. popfq
  96. nop
  97. .globl abi_test_unwind_start
  98. .hidden abi_test_unwind_start
  99. abi_test_unwind_start:
  100. call *%rax
  101. .globl abi_test_unwind_return
  102. .hidden abi_test_unwind_return
  103. abi_test_unwind_return:
  104. pushfq
  105. andq $-0x101,0(%rsp)
  106. popfq
  107. .globl abi_test_unwind_stop
  108. .hidden abi_test_unwind_stop
  109. abi_test_unwind_stop:
  110. jmp .Lcall_done
  111. .Lno_unwind:
  112. call *%rax
  113. .Lcall_done:
  114. movq 40(%rsp),%rsi
  115. movq %rbx,0(%rsi)
  116. movq %rbp,8(%rsi)
  117. movq %r12,16(%rsi)
  118. movq %r13,24(%rsi)
  119. movq %r14,32(%rsi)
  120. movq %r15,40(%rsi)
  121. movq 64(%rsp),%rbx
  122. .cfi_restore rbx
  123. movq 72(%rsp),%rbp
  124. .cfi_restore rbp
  125. movq 80(%rsp),%r12
  126. .cfi_restore r12
  127. movq 88(%rsp),%r13
  128. .cfi_restore r13
  129. movq 96(%rsp),%r14
  130. .cfi_restore r14
  131. movq 104(%rsp),%r15
  132. .cfi_restore r15
  133. addq $120,%rsp
  134. .cfi_adjust_cfa_offset -120
  135. .byte 0xf3,0xc3
  136. .cfi_endproc
  137. .Labi_test_trampoline_seh_end:
  138. .size abi_test_trampoline,.-abi_test_trampoline
  139. .type abi_test_clobber_rax, @function
  140. .globl abi_test_clobber_rax
  141. .hidden abi_test_clobber_rax
  142. .align 16
  143. abi_test_clobber_rax:
  144. xorq %rax,%rax
  145. .byte 0xf3,0xc3
  146. .size abi_test_clobber_rax,.-abi_test_clobber_rax
  147. .type abi_test_clobber_rbx, @function
  148. .globl abi_test_clobber_rbx
  149. .hidden abi_test_clobber_rbx
  150. .align 16
  151. abi_test_clobber_rbx:
  152. xorq %rbx,%rbx
  153. .byte 0xf3,0xc3
  154. .size abi_test_clobber_rbx,.-abi_test_clobber_rbx
  155. .type abi_test_clobber_rcx, @function
  156. .globl abi_test_clobber_rcx
  157. .hidden abi_test_clobber_rcx
  158. .align 16
  159. abi_test_clobber_rcx:
  160. xorq %rcx,%rcx
  161. .byte 0xf3,0xc3
  162. .size abi_test_clobber_rcx,.-abi_test_clobber_rcx
  163. .type abi_test_clobber_rdx, @function
  164. .globl abi_test_clobber_rdx
  165. .hidden abi_test_clobber_rdx
  166. .align 16
  167. abi_test_clobber_rdx:
  168. xorq %rdx,%rdx
  169. .byte 0xf3,0xc3
  170. .size abi_test_clobber_rdx,.-abi_test_clobber_rdx
  171. .type abi_test_clobber_rdi, @function
  172. .globl abi_test_clobber_rdi
  173. .hidden abi_test_clobber_rdi
  174. .align 16
  175. abi_test_clobber_rdi:
  176. xorq %rdi,%rdi
  177. .byte 0xf3,0xc3
  178. .size abi_test_clobber_rdi,.-abi_test_clobber_rdi
  179. .type abi_test_clobber_rsi, @function
  180. .globl abi_test_clobber_rsi
  181. .hidden abi_test_clobber_rsi
  182. .align 16
  183. abi_test_clobber_rsi:
  184. xorq %rsi,%rsi
  185. .byte 0xf3,0xc3
  186. .size abi_test_clobber_rsi,.-abi_test_clobber_rsi
  187. .type abi_test_clobber_rbp, @function
  188. .globl abi_test_clobber_rbp
  189. .hidden abi_test_clobber_rbp
  190. .align 16
  191. abi_test_clobber_rbp:
  192. xorq %rbp,%rbp
  193. .byte 0xf3,0xc3
  194. .size abi_test_clobber_rbp,.-abi_test_clobber_rbp
  195. .type abi_test_clobber_r8, @function
  196. .globl abi_test_clobber_r8
  197. .hidden abi_test_clobber_r8
  198. .align 16
  199. abi_test_clobber_r8:
  200. xorq %r8,%r8
  201. .byte 0xf3,0xc3
  202. .size abi_test_clobber_r8,.-abi_test_clobber_r8
  203. .type abi_test_clobber_r9, @function
  204. .globl abi_test_clobber_r9
  205. .hidden abi_test_clobber_r9
  206. .align 16
  207. abi_test_clobber_r9:
  208. xorq %r9,%r9
  209. .byte 0xf3,0xc3
  210. .size abi_test_clobber_r9,.-abi_test_clobber_r9
  211. .type abi_test_clobber_r10, @function
  212. .globl abi_test_clobber_r10
  213. .hidden abi_test_clobber_r10
  214. .align 16
  215. abi_test_clobber_r10:
  216. xorq %r10,%r10
  217. .byte 0xf3,0xc3
  218. .size abi_test_clobber_r10,.-abi_test_clobber_r10
  219. .type abi_test_clobber_r11, @function
  220. .globl abi_test_clobber_r11
  221. .hidden abi_test_clobber_r11
  222. .align 16
  223. abi_test_clobber_r11:
  224. xorq %r11,%r11
  225. .byte 0xf3,0xc3
  226. .size abi_test_clobber_r11,.-abi_test_clobber_r11
  227. .type abi_test_clobber_r12, @function
  228. .globl abi_test_clobber_r12
  229. .hidden abi_test_clobber_r12
  230. .align 16
  231. abi_test_clobber_r12:
  232. xorq %r12,%r12
  233. .byte 0xf3,0xc3
  234. .size abi_test_clobber_r12,.-abi_test_clobber_r12
  235. .type abi_test_clobber_r13, @function
  236. .globl abi_test_clobber_r13
  237. .hidden abi_test_clobber_r13
  238. .align 16
  239. abi_test_clobber_r13:
  240. xorq %r13,%r13
  241. .byte 0xf3,0xc3
  242. .size abi_test_clobber_r13,.-abi_test_clobber_r13
  243. .type abi_test_clobber_r14, @function
  244. .globl abi_test_clobber_r14
  245. .hidden abi_test_clobber_r14
  246. .align 16
  247. abi_test_clobber_r14:
  248. xorq %r14,%r14
  249. .byte 0xf3,0xc3
  250. .size abi_test_clobber_r14,.-abi_test_clobber_r14
  251. .type abi_test_clobber_r15, @function
  252. .globl abi_test_clobber_r15
  253. .hidden abi_test_clobber_r15
  254. .align 16
  255. abi_test_clobber_r15:
  256. xorq %r15,%r15
  257. .byte 0xf3,0xc3
  258. .size abi_test_clobber_r15,.-abi_test_clobber_r15
  259. .type abi_test_clobber_xmm0, @function
  260. .globl abi_test_clobber_xmm0
  261. .hidden abi_test_clobber_xmm0
  262. .align 16
  263. abi_test_clobber_xmm0:
  264. pxor %xmm0,%xmm0
  265. .byte 0xf3,0xc3
  266. .size abi_test_clobber_xmm0,.-abi_test_clobber_xmm0
  267. .type abi_test_clobber_xmm1, @function
  268. .globl abi_test_clobber_xmm1
  269. .hidden abi_test_clobber_xmm1
  270. .align 16
  271. abi_test_clobber_xmm1:
  272. pxor %xmm1,%xmm1
  273. .byte 0xf3,0xc3
  274. .size abi_test_clobber_xmm1,.-abi_test_clobber_xmm1
  275. .type abi_test_clobber_xmm2, @function
  276. .globl abi_test_clobber_xmm2
  277. .hidden abi_test_clobber_xmm2
  278. .align 16
  279. abi_test_clobber_xmm2:
  280. pxor %xmm2,%xmm2
  281. .byte 0xf3,0xc3
  282. .size abi_test_clobber_xmm2,.-abi_test_clobber_xmm2
  283. .type abi_test_clobber_xmm3, @function
  284. .globl abi_test_clobber_xmm3
  285. .hidden abi_test_clobber_xmm3
  286. .align 16
  287. abi_test_clobber_xmm3:
  288. pxor %xmm3,%xmm3
  289. .byte 0xf3,0xc3
  290. .size abi_test_clobber_xmm3,.-abi_test_clobber_xmm3
  291. .type abi_test_clobber_xmm4, @function
  292. .globl abi_test_clobber_xmm4
  293. .hidden abi_test_clobber_xmm4
  294. .align 16
  295. abi_test_clobber_xmm4:
  296. pxor %xmm4,%xmm4
  297. .byte 0xf3,0xc3
  298. .size abi_test_clobber_xmm4,.-abi_test_clobber_xmm4
  299. .type abi_test_clobber_xmm5, @function
  300. .globl abi_test_clobber_xmm5
  301. .hidden abi_test_clobber_xmm5
  302. .align 16
  303. abi_test_clobber_xmm5:
  304. pxor %xmm5,%xmm5
  305. .byte 0xf3,0xc3
  306. .size abi_test_clobber_xmm5,.-abi_test_clobber_xmm5
  307. .type abi_test_clobber_xmm6, @function
  308. .globl abi_test_clobber_xmm6
  309. .hidden abi_test_clobber_xmm6
  310. .align 16
  311. abi_test_clobber_xmm6:
  312. pxor %xmm6,%xmm6
  313. .byte 0xf3,0xc3
  314. .size abi_test_clobber_xmm6,.-abi_test_clobber_xmm6
  315. .type abi_test_clobber_xmm7, @function
  316. .globl abi_test_clobber_xmm7
  317. .hidden abi_test_clobber_xmm7
  318. .align 16
  319. abi_test_clobber_xmm7:
  320. pxor %xmm7,%xmm7
  321. .byte 0xf3,0xc3
  322. .size abi_test_clobber_xmm7,.-abi_test_clobber_xmm7
  323. .type abi_test_clobber_xmm8, @function
  324. .globl abi_test_clobber_xmm8
  325. .hidden abi_test_clobber_xmm8
  326. .align 16
  327. abi_test_clobber_xmm8:
  328. pxor %xmm8,%xmm8
  329. .byte 0xf3,0xc3
  330. .size abi_test_clobber_xmm8,.-abi_test_clobber_xmm8
  331. .type abi_test_clobber_xmm9, @function
  332. .globl abi_test_clobber_xmm9
  333. .hidden abi_test_clobber_xmm9
  334. .align 16
  335. abi_test_clobber_xmm9:
  336. pxor %xmm9,%xmm9
  337. .byte 0xf3,0xc3
  338. .size abi_test_clobber_xmm9,.-abi_test_clobber_xmm9
  339. .type abi_test_clobber_xmm10, @function
  340. .globl abi_test_clobber_xmm10
  341. .hidden abi_test_clobber_xmm10
  342. .align 16
  343. abi_test_clobber_xmm10:
  344. pxor %xmm10,%xmm10
  345. .byte 0xf3,0xc3
  346. .size abi_test_clobber_xmm10,.-abi_test_clobber_xmm10
  347. .type abi_test_clobber_xmm11, @function
  348. .globl abi_test_clobber_xmm11
  349. .hidden abi_test_clobber_xmm11
  350. .align 16
  351. abi_test_clobber_xmm11:
  352. pxor %xmm11,%xmm11
  353. .byte 0xf3,0xc3
  354. .size abi_test_clobber_xmm11,.-abi_test_clobber_xmm11
  355. .type abi_test_clobber_xmm12, @function
  356. .globl abi_test_clobber_xmm12
  357. .hidden abi_test_clobber_xmm12
  358. .align 16
  359. abi_test_clobber_xmm12:
  360. pxor %xmm12,%xmm12
  361. .byte 0xf3,0xc3
  362. .size abi_test_clobber_xmm12,.-abi_test_clobber_xmm12
  363. .type abi_test_clobber_xmm13, @function
  364. .globl abi_test_clobber_xmm13
  365. .hidden abi_test_clobber_xmm13
  366. .align 16
  367. abi_test_clobber_xmm13:
  368. pxor %xmm13,%xmm13
  369. .byte 0xf3,0xc3
  370. .size abi_test_clobber_xmm13,.-abi_test_clobber_xmm13
  371. .type abi_test_clobber_xmm14, @function
  372. .globl abi_test_clobber_xmm14
  373. .hidden abi_test_clobber_xmm14
  374. .align 16
  375. abi_test_clobber_xmm14:
  376. pxor %xmm14,%xmm14
  377. .byte 0xf3,0xc3
  378. .size abi_test_clobber_xmm14,.-abi_test_clobber_xmm14
  379. .type abi_test_clobber_xmm15, @function
  380. .globl abi_test_clobber_xmm15
  381. .hidden abi_test_clobber_xmm15
  382. .align 16
  383. abi_test_clobber_xmm15:
  384. pxor %xmm15,%xmm15
  385. .byte 0xf3,0xc3
  386. .size abi_test_clobber_xmm15,.-abi_test_clobber_xmm15
  387. .type abi_test_bad_unwind_wrong_register, @function
  388. .globl abi_test_bad_unwind_wrong_register
  389. .hidden abi_test_bad_unwind_wrong_register
  390. .align 16
  391. abi_test_bad_unwind_wrong_register:
  392. .cfi_startproc
  393. .Labi_test_bad_unwind_wrong_register_seh_begin:
  394. pushq %r12
  395. .cfi_adjust_cfa_offset 8
  396. .cfi_offset %r13,-16
  397. .Labi_test_bad_unwind_wrong_register_seh_push_r13:
  398. nop
  399. popq %r12
  400. .cfi_adjust_cfa_offset -8
  401. .cfi_restore %r12
  402. .byte 0xf3,0xc3
  403. .Labi_test_bad_unwind_wrong_register_seh_end:
  404. .cfi_endproc
  405. .size abi_test_bad_unwind_wrong_register,.-abi_test_bad_unwind_wrong_register
  406. .type abi_test_bad_unwind_temporary, @function
  407. .globl abi_test_bad_unwind_temporary
  408. .hidden abi_test_bad_unwind_temporary
  409. .align 16
  410. abi_test_bad_unwind_temporary:
  411. .cfi_startproc
  412. .Labi_test_bad_unwind_temporary_seh_begin:
  413. pushq %r12
  414. .cfi_adjust_cfa_offset 8
  415. .cfi_offset %r12,-16
  416. .Labi_test_bad_unwind_temporary_seh_push_r12:
  417. movq %r12,%rax
  418. incq %rax
  419. movq %rax,(%rsp)
  420. movq %r12,(%rsp)
  421. popq %r12
  422. .cfi_adjust_cfa_offset -8
  423. .cfi_restore %r12
  424. .byte 0xf3,0xc3
  425. .Labi_test_bad_unwind_temporary_seh_end:
  426. .cfi_endproc
  427. .size abi_test_bad_unwind_temporary,.-abi_test_bad_unwind_temporary
  428. .type abi_test_set_direction_flag, @function
  429. .globl abi_test_get_and_clear_direction_flag
  430. .hidden abi_test_get_and_clear_direction_flag
  431. abi_test_get_and_clear_direction_flag:
  432. pushfq
  433. popq %rax
  434. andq $0x400,%rax
  435. shrq $10,%rax
  436. cld
  437. .byte 0xf3,0xc3
  438. .size abi_test_get_and_clear_direction_flag,.-abi_test_get_and_clear_direction_flag
  439. .type abi_test_set_direction_flag, @function
  440. .globl abi_test_set_direction_flag
  441. .hidden abi_test_set_direction_flag
  442. abi_test_set_direction_flag:
  443. std
  444. .byte 0xf3,0xc3
  445. .size abi_test_set_direction_flag,.-abi_test_set_direction_flag
  446. #endif
  447. .section .note.GNU-stack,"",@progbits