17ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany.section .text 27ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 3f5d526fc35524db0479828188e47c130ac09a038Dmitry Vyukov.hidden __tsan_trace_switch 47ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany.globl __tsan_trace_switch_thunk 57ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany__tsan_trace_switch_thunk: 641e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_startproc 77ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany # Save scratch registers. 87ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %rax 941e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 1041e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %rax, 0 117ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %rcx 1241e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 1341e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %rcx, 0 147ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %rdx 1541e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 1641e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %rdx, 0 177ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %rsi 1841e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 1941e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %rsi, 0 207ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %rdi 2141e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 2241e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %rdi, 0 237ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %r8 2441e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 2541e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %r8, 0 267ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %r9 2741e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 2841e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %r9, 0 297ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %r10 3041e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 3141e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %r10, 0 327ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %r11 3341e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 3441e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %r11, 0 357ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany # Align stack frame. 367ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %rbx # non-scratch 3741e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 3841e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %rbx, 0 397ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany mov %rsp, %rbx # save current rsp 4041e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_def_cfa_register %rbx 417ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany shr $4, %rsp # clear 4 lsb, align to 16 427ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany shl $4, %rsp 437ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 447ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany call __tsan_trace_switch 457ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 467ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany # Unalign stack frame back. 477ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany mov %rbx, %rsp # restore the original rsp 4841e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_def_cfa_register %rsp 497ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %rbx 5041e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 517ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany # Restore scratch registers. 527ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %r11 5341e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 547ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %r10 5541e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 567ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %r9 5741e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 587ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %r8 5941e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 607ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %rdi 6141e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 627ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %rsi 6341e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 647ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %rdx 6541e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 667ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %rcx 6741e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 687ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %rax 6941e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 7041e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %rax 7141e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %rbx 7241e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %rcx 7341e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %rdx 7441e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %rsi 7541e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %rdi 7641e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %r8 7741e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %r9 7841e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %r10 7941e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %r11 807ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany ret 8141e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_endproc 827ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 83f5d526fc35524db0479828188e47c130ac09a038Dmitry Vyukov.hidden __tsan_report_race 847ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany.globl __tsan_report_race_thunk 857ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany__tsan_report_race_thunk: 8641e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_startproc 877ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany # Save scratch registers. 887ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %rax 8941e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 9041e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %rax, 0 917ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %rcx 9241e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 9341e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %rcx, 0 947ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %rdx 9541e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 9641e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %rdx, 0 977ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %rsi 9841e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 9941e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %rsi, 0 1007ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %rdi 10141e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 10241e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %rdi, 0 1037ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %r8 10441e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 10541e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %r8, 0 1067ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %r9 10741e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 10841e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %r9, 0 1097ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %r10 11041e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 11141e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %r10, 0 1127ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %r11 11341e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 11441e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %r11, 0 1157ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany # Align stack frame. 1167ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany push %rbx # non-scratch 11741e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset 8 11841e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_rel_offset %rbx, 0 1197ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany mov %rsp, %rbx # save current rsp 12041e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_def_cfa_register %rbx 1217ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany shr $4, %rsp # clear 4 lsb, align to 16 1227ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany shl $4, %rsp 1237ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 1247ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany call __tsan_report_race 1257ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany 1267ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany # Unalign stack frame back. 1277ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany mov %rbx, %rsp # restore the original rsp 12841e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_def_cfa_register %rsp 1297ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %rbx 13041e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 1317ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany # Restore scratch registers. 1327ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %r11 13341e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 1347ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %r10 13541e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 1367ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %r9 13741e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 1387ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %r8 13941e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 1407ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %rdi 14141e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 1427ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %rsi 14341e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 1447ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %rdx 14541e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 1467ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %rcx 14741e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 1487ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany pop %rax 14941e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_adjust_cfa_offset -8 15041e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %rax 15141e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %rbx 15241e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %rcx 15341e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %rdx 15441e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %rsi 15541e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %rdi 15641e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %r8 15741e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %r9 15841e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %r10 15941e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_restore %r11 1607ac41484ea322e0ea5774df681660269f5dc321eKostya Serebryany ret 16141e8153c4a29b28bc7c80d35bc1d43438acdd4e7Dmitry Vyukov .cfi_endproc 162a911c6f1d0c6f8b7e175bd36e7044d79cdcf5153Dmitry Vyukov 1638b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.hidden __tsan_setjmp 1648b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.comm _ZN14__interception11real_setjmpE,8,8 1658b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.globl setjmp 1668b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.type setjmp, @function 1678b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukovsetjmp: 1688b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_startproc 1698b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // save env parameter 1708b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov push %rdi 1718b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset 8 1728b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_rel_offset %rdi, 0 1738b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // obtain %rsp 1748b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov lea 16(%rsp), %rdi 1758b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov mov %rdi, %rsi 1768b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp) 1778b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov rol $0x11, %rsi 1788b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // call tsan interceptor 1798b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov call __tsan_setjmp 1808b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // restore env parameter 1818b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov pop %rdi 1828b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset -8 1838b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_restore %rdi 1848b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // tail jump to libc setjmp 1858b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov movl $0, %eax 1868b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov movq _ZN14__interception11real_setjmpE@GOTPCREL(%rip), %rdx 1878b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov jmp *(%rdx) 1888b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_endproc 1898b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.size setjmp, .-setjmp 1908b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov 1918b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.comm _ZN14__interception12real__setjmpE,8,8 1928b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.globl _setjmp 1938b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.type _setjmp, @function 1948b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov_setjmp: 1958b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_startproc 1968b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // save env parameter 1978b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov push %rdi 1988b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset 8 1998b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_rel_offset %rdi, 0 2008b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // obtain %rsp 2018b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov lea 16(%rsp), %rdi 2028b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov mov %rdi, %rsi 2038b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp) 2048b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov rol $0x11, %rsi 2058b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // call tsan interceptor 2068b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov call __tsan_setjmp 2078b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // restore env parameter 2088b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov pop %rdi 2098b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset -8 2108b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_restore %rdi 2118b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // tail jump to libc setjmp 2128b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov movl $0, %eax 2138b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov movq _ZN14__interception12real__setjmpE@GOTPCREL(%rip), %rdx 2148b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov jmp *(%rdx) 2158b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_endproc 2168b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.size _setjmp, .-_setjmp 2178b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov 2188b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.comm _ZN14__interception14real_sigsetjmpE,8,8 2198b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.globl sigsetjmp 2208b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.type sigsetjmp, @function 2218b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukovsigsetjmp: 2228b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_startproc 2238b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // save env parameter 2248b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov push %rdi 2258b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset 8 2268b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_rel_offset %rdi, 0 2278b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // save savesigs parameter 2288b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov push %rsi 2298b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset 8 2308b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_rel_offset %rsi, 0 2318b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // align stack frame 2328b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov sub $8, %rsp 2338b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset 8 2348b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // obtain %rsp 2358b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov lea 32(%rsp), %rdi 2368b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov mov %rdi, %rsi 2378b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp) 2388b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov rol $0x11, %rsi 2398b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // call tsan interceptor 2408b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov call __tsan_setjmp 2418b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // unalign stack frame 2428b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov add $8, %rsp 2438b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset -8 2448b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // restore savesigs parameter 2458b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov pop %rsi 2468b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset -8 2478b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_restore %rsi 2488b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // restore env parameter 2498b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov pop %rdi 2508b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset -8 2518b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_restore %rdi 2528b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // tail jump to libc sigsetjmp 2538b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov movl $0, %eax 2548b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov movq _ZN14__interception14real_sigsetjmpE@GOTPCREL(%rip), %rdx 2558b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov jmp *(%rdx) 2568b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_endproc 2578b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.size sigsetjmp, .-sigsetjmp 2588b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov 2598b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.comm _ZN14__interception16real___sigsetjmpE,8,8 2608b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.globl __sigsetjmp 2618b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.type __sigsetjmp, @function 2628b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov__sigsetjmp: 2638b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_startproc 2648b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // save env parameter 2658b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov push %rdi 2668b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset 8 2678b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_rel_offset %rdi, 0 2688b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // save savesigs parameter 2698b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov push %rsi 2708b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset 8 2718b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_rel_offset %rsi, 0 2728b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // align stack frame 2738b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov sub $8, %rsp 2748b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset 8 2758b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // obtain %rsp 2768b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov lea 32(%rsp), %rdi 2778b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov mov %rdi, %rsi 2788b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov xor %fs:0x30, %rsi // magic mangling of rsp (see libc setjmp) 2798b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov rol $0x11, %rsi 2808b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // call tsan interceptor 2818b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov call __tsan_setjmp 2828b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // unalign stack frame 2838b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov add $8, %rsp 2848b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset -8 2858b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // restore savesigs parameter 2868b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov pop %rsi 2878b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset -8 2888b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_restore %rsi 2898b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // restore env parameter 2908b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov pop %rdi 2918b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_adjust_cfa_offset -8 2928b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_restore %rdi 2938b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov // tail jump to libc sigsetjmp 2948b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov movl $0, %eax 2958b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov movq _ZN14__interception16real___sigsetjmpE@GOTPCREL(%rip), %rdx 2968b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov jmp *(%rdx) 2978b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov .cfi_endproc 2988b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov.size __sigsetjmp, .-__sigsetjmp 2998b30c254a63a7421dd81d13dee086a54c4ca134bDmitry Vyukov 300a911c6f1d0c6f8b7e175bd36e7044d79cdcf5153Dmitry Vyukov#ifdef __linux__ 301a911c6f1d0c6f8b7e175bd36e7044d79cdcf5153Dmitry Vyukov/* We do not need executable stack. */ 302a911c6f1d0c6f8b7e175bd36e7044d79cdcf5153Dmitry Vyukov.section .note.GNU-stack,"",@progbits 303a911c6f1d0c6f8b7e175bd36e7044d79cdcf5153Dmitry Vyukov#endif 304