blob: af878563573ef377bc5445e285b767dc3b067a1f [file] [log] [blame]
Kostya Serebryany4ad375f2012-05-10 13:48:04 +00001.section .text
2
Dmitry Vyukov20678e22012-11-26 14:20:26 +00003.hidden __tsan_trace_switch
Kostya Serebryany4ad375f2012-05-10 13:48:04 +00004.globl __tsan_trace_switch_thunk
5__tsan_trace_switch_thunk:
Dmitry Vyukovb7f18522012-09-02 11:24:07 +00006 .cfi_startproc
Kostya Serebryany4ad375f2012-05-10 13:48:04 +00007 # Save scratch registers.
8 push %rax
Dmitry Vyukovb7f18522012-09-02 11:24:07 +00009 .cfi_adjust_cfa_offset 8
10 .cfi_rel_offset %rax, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000011 push %rcx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000012 .cfi_adjust_cfa_offset 8
13 .cfi_rel_offset %rcx, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000014 push %rdx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000015 .cfi_adjust_cfa_offset 8
16 .cfi_rel_offset %rdx, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000017 push %rsi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000018 .cfi_adjust_cfa_offset 8
19 .cfi_rel_offset %rsi, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000020 push %rdi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000021 .cfi_adjust_cfa_offset 8
22 .cfi_rel_offset %rdi, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000023 push %r8
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000024 .cfi_adjust_cfa_offset 8
25 .cfi_rel_offset %r8, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000026 push %r9
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000027 .cfi_adjust_cfa_offset 8
28 .cfi_rel_offset %r9, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000029 push %r10
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000030 .cfi_adjust_cfa_offset 8
31 .cfi_rel_offset %r10, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000032 push %r11
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000033 .cfi_adjust_cfa_offset 8
34 .cfi_rel_offset %r11, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000035 # Align stack frame.
36 push %rbx # non-scratch
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000037 .cfi_adjust_cfa_offset 8
38 .cfi_rel_offset %rbx, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000039 mov %rsp, %rbx # save current rsp
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000040 .cfi_def_cfa_register %rbx
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000041 shr $4, %rsp # clear 4 lsb, align to 16
42 shl $4, %rsp
43
44 call __tsan_trace_switch
45
46 # Unalign stack frame back.
47 mov %rbx, %rsp # restore the original rsp
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000048 .cfi_def_cfa_register %rsp
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000049 pop %rbx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000050 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000051 # Restore scratch registers.
52 pop %r11
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000053 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000054 pop %r10
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000055 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000056 pop %r9
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000057 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000058 pop %r8
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000059 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000060 pop %rdi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000061 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000062 pop %rsi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000063 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000064 pop %rdx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000065 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000066 pop %rcx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000067 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000068 pop %rax
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000069 .cfi_adjust_cfa_offset -8
70 .cfi_restore %rax
71 .cfi_restore %rbx
72 .cfi_restore %rcx
73 .cfi_restore %rdx
74 .cfi_restore %rsi
75 .cfi_restore %rdi
76 .cfi_restore %r8
77 .cfi_restore %r9
78 .cfi_restore %r10
79 .cfi_restore %r11
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000080 ret
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000081 .cfi_endproc
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000082
Dmitry Vyukov20678e22012-11-26 14:20:26 +000083.hidden __tsan_report_race
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000084.globl __tsan_report_race_thunk
85__tsan_report_race_thunk:
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000086 .cfi_startproc
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000087 # Save scratch registers.
88 push %rax
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000089 .cfi_adjust_cfa_offset 8
90 .cfi_rel_offset %rax, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000091 push %rcx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000092 .cfi_adjust_cfa_offset 8
93 .cfi_rel_offset %rcx, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000094 push %rdx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000095 .cfi_adjust_cfa_offset 8
96 .cfi_rel_offset %rdx, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000097 push %rsi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000098 .cfi_adjust_cfa_offset 8
99 .cfi_rel_offset %rsi, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000100 push %rdi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000101 .cfi_adjust_cfa_offset 8
102 .cfi_rel_offset %rdi, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000103 push %r8
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000104 .cfi_adjust_cfa_offset 8
105 .cfi_rel_offset %r8, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000106 push %r9
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000107 .cfi_adjust_cfa_offset 8
108 .cfi_rel_offset %r9, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000109 push %r10
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000110 .cfi_adjust_cfa_offset 8
111 .cfi_rel_offset %r10, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000112 push %r11
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000113 .cfi_adjust_cfa_offset 8
114 .cfi_rel_offset %r11, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000115 # Align stack frame.
116 push %rbx # non-scratch
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000117 .cfi_adjust_cfa_offset 8
118 .cfi_rel_offset %rbx, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000119 mov %rsp, %rbx # save current rsp
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000120 .cfi_def_cfa_register %rbx
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000121 shr $4, %rsp # clear 4 lsb, align to 16
122 shl $4, %rsp
123
124 call __tsan_report_race
125
126 # Unalign stack frame back.
127 mov %rbx, %rsp # restore the original rsp
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000128 .cfi_def_cfa_register %rsp
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000129 pop %rbx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000130 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000131 # Restore scratch registers.
132 pop %r11
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000133 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000134 pop %r10
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000135 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000136 pop %r9
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000137 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000138 pop %r8
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000139 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000140 pop %rdi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000141 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000142 pop %rsi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000143 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000144 pop %rdx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000145 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000146 pop %rcx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000147 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000148 pop %rax
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000149 .cfi_adjust_cfa_offset -8
150 .cfi_restore %rax
151 .cfi_restore %rbx
152 .cfi_restore %rcx
153 .cfi_restore %rdx
154 .cfi_restore %rsi
155 .cfi_restore %rdi
156 .cfi_restore %r8
157 .cfi_restore %r9
158 .cfi_restore %r10
159 .cfi_restore %r11
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000160 ret
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000161 .cfi_endproc
Dmitry Vyukove2b5b5c2012-08-17 18:05:28 +0000162
163#ifdef __linux__
164/* We do not need executable stack. */
165.section .note.GNU-stack,"",@progbits
166#endif