blob: aee650d9f4e66add4d520be3242c72801547cdd6 [file] [log] [blame]
Kostya Serebryany4ad375f2012-05-10 13:48:04 +00001.section .text
2
3.globl __tsan_trace_switch_thunk
4__tsan_trace_switch_thunk:
Dmitry Vyukovb7f18522012-09-02 11:24:07 +00005 .cfi_startproc
Kostya Serebryany4ad375f2012-05-10 13:48:04 +00006 # Save scratch registers.
7 push %rax
Dmitry Vyukovb7f18522012-09-02 11:24:07 +00008 .cfi_adjust_cfa_offset 8
9 .cfi_rel_offset %rax, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000010 push %rcx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000011 .cfi_adjust_cfa_offset 8
12 .cfi_rel_offset %rcx, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000013 push %rdx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000014 .cfi_adjust_cfa_offset 8
15 .cfi_rel_offset %rdx, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000016 push %rsi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000017 .cfi_adjust_cfa_offset 8
18 .cfi_rel_offset %rsi, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000019 push %rdi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000020 .cfi_adjust_cfa_offset 8
21 .cfi_rel_offset %rdi, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000022 push %r8
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000023 .cfi_adjust_cfa_offset 8
24 .cfi_rel_offset %r8, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000025 push %r9
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000026 .cfi_adjust_cfa_offset 8
27 .cfi_rel_offset %r9, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000028 push %r10
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000029 .cfi_adjust_cfa_offset 8
30 .cfi_rel_offset %r10, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000031 push %r11
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000032 .cfi_adjust_cfa_offset 8
33 .cfi_rel_offset %r11, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000034 # Align stack frame.
35 push %rbx # non-scratch
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000036 .cfi_adjust_cfa_offset 8
37 .cfi_rel_offset %rbx, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000038 mov %rsp, %rbx # save current rsp
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000039 .cfi_def_cfa_register %rbx
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000040 shr $4, %rsp # clear 4 lsb, align to 16
41 shl $4, %rsp
42
43 call __tsan_trace_switch
44
45 # Unalign stack frame back.
46 mov %rbx, %rsp # restore the original rsp
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000047 .cfi_def_cfa_register %rsp
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000048 pop %rbx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000049 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000050 # Restore scratch registers.
51 pop %r11
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000052 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000053 pop %r10
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000054 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000055 pop %r9
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000056 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000057 pop %r8
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000058 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000059 pop %rdi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000060 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000061 pop %rsi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000062 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000063 pop %rdx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000064 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000065 pop %rcx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000066 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000067 pop %rax
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000068 .cfi_adjust_cfa_offset -8
69 .cfi_restore %rax
70 .cfi_restore %rbx
71 .cfi_restore %rcx
72 .cfi_restore %rdx
73 .cfi_restore %rsi
74 .cfi_restore %rdi
75 .cfi_restore %r8
76 .cfi_restore %r9
77 .cfi_restore %r10
78 .cfi_restore %r11
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000079 ret
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000080 .cfi_endproc
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000081
82.globl __tsan_report_race_thunk
83__tsan_report_race_thunk:
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000084 .cfi_startproc
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000085 # Save scratch registers.
86 push %rax
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000087 .cfi_adjust_cfa_offset 8
88 .cfi_rel_offset %rax, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000089 push %rcx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000090 .cfi_adjust_cfa_offset 8
91 .cfi_rel_offset %rcx, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000092 push %rdx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000093 .cfi_adjust_cfa_offset 8
94 .cfi_rel_offset %rdx, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000095 push %rsi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000096 .cfi_adjust_cfa_offset 8
97 .cfi_rel_offset %rsi, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000098 push %rdi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +000099 .cfi_adjust_cfa_offset 8
100 .cfi_rel_offset %rdi, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000101 push %r8
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000102 .cfi_adjust_cfa_offset 8
103 .cfi_rel_offset %r8, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000104 push %r9
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000105 .cfi_adjust_cfa_offset 8
106 .cfi_rel_offset %r9, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000107 push %r10
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000108 .cfi_adjust_cfa_offset 8
109 .cfi_rel_offset %r10, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000110 push %r11
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000111 .cfi_adjust_cfa_offset 8
112 .cfi_rel_offset %r11, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000113 # Align stack frame.
114 push %rbx # non-scratch
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000115 .cfi_adjust_cfa_offset 8
116 .cfi_rel_offset %rbx, 0
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000117 mov %rsp, %rbx # save current rsp
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000118 .cfi_def_cfa_register %rbx
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000119 shr $4, %rsp # clear 4 lsb, align to 16
120 shl $4, %rsp
121
122 call __tsan_report_race
123
124 # Unalign stack frame back.
125 mov %rbx, %rsp # restore the original rsp
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000126 .cfi_def_cfa_register %rsp
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000127 pop %rbx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000128 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000129 # Restore scratch registers.
130 pop %r11
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000131 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000132 pop %r10
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000133 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000134 pop %r9
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000135 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000136 pop %r8
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000137 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000138 pop %rdi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000139 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000140 pop %rsi
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000141 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000142 pop %rdx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000143 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000144 pop %rcx
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000145 .cfi_adjust_cfa_offset -8
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000146 pop %rax
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000147 .cfi_adjust_cfa_offset -8
148 .cfi_restore %rax
149 .cfi_restore %rbx
150 .cfi_restore %rcx
151 .cfi_restore %rdx
152 .cfi_restore %rsi
153 .cfi_restore %rdi
154 .cfi_restore %r8
155 .cfi_restore %r9
156 .cfi_restore %r10
157 .cfi_restore %r11
Kostya Serebryany4ad375f2012-05-10 13:48:04 +0000158 ret
Dmitry Vyukovb7f18522012-09-02 11:24:07 +0000159 .cfi_endproc
Dmitry Vyukove2b5b5c2012-08-17 18:05:28 +0000160
161#ifdef __linux__
162/* We do not need executable stack. */
163.section .note.GNU-stack,"",@progbits
164#endif