Reverting merge from trunk
[official-gcc.git] / libsanitizer / tsan / tsan_rtl_amd64.S
blobaee650d9f4e66add4d520be3242c72801547cdd6
1 .section .text
3 .globl __tsan_trace_switch_thunk
4 __tsan_trace_switch_thunk:
5   .cfi_startproc
6   # Save scratch registers.
7   push %rax
8   .cfi_adjust_cfa_offset 8
9   .cfi_rel_offset %rax, 0
10   push %rcx
11   .cfi_adjust_cfa_offset 8
12   .cfi_rel_offset %rcx, 0
13   push %rdx
14   .cfi_adjust_cfa_offset 8
15   .cfi_rel_offset %rdx, 0
16   push %rsi
17   .cfi_adjust_cfa_offset 8
18   .cfi_rel_offset %rsi, 0
19   push %rdi
20   .cfi_adjust_cfa_offset 8
21   .cfi_rel_offset %rdi, 0
22   push %r8
23   .cfi_adjust_cfa_offset 8
24   .cfi_rel_offset %r8, 0
25   push %r9
26   .cfi_adjust_cfa_offset 8
27   .cfi_rel_offset %r9, 0
28   push %r10
29   .cfi_adjust_cfa_offset 8
30   .cfi_rel_offset %r10, 0
31   push %r11
32   .cfi_adjust_cfa_offset 8
33   .cfi_rel_offset %r11, 0
34   # Align stack frame.
35   push %rbx  # non-scratch
36   .cfi_adjust_cfa_offset 8
37   .cfi_rel_offset %rbx, 0
38   mov %rsp, %rbx  # save current rsp
39   .cfi_def_cfa_register %rbx
40   shr $4, %rsp  # clear 4 lsb, align to 16
41   shl $4, %rsp
43   call __tsan_trace_switch
45   # Unalign stack frame back.
46   mov %rbx, %rsp  # restore the original rsp
47   .cfi_def_cfa_register %rsp
48   pop %rbx
49   .cfi_adjust_cfa_offset -8
50   # Restore scratch registers.
51   pop %r11
52   .cfi_adjust_cfa_offset -8
53   pop %r10
54   .cfi_adjust_cfa_offset -8
55   pop %r9
56   .cfi_adjust_cfa_offset -8
57   pop %r8
58   .cfi_adjust_cfa_offset -8
59   pop %rdi
60   .cfi_adjust_cfa_offset -8
61   pop %rsi
62   .cfi_adjust_cfa_offset -8
63   pop %rdx
64   .cfi_adjust_cfa_offset -8
65   pop %rcx
66   .cfi_adjust_cfa_offset -8
67   pop %rax
68   .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
79   ret
80   .cfi_endproc
82 .globl __tsan_report_race_thunk
83 __tsan_report_race_thunk:
84   .cfi_startproc
85   # Save scratch registers.
86   push %rax
87   .cfi_adjust_cfa_offset 8
88   .cfi_rel_offset %rax, 0
89   push %rcx
90   .cfi_adjust_cfa_offset 8
91   .cfi_rel_offset %rcx, 0
92   push %rdx
93   .cfi_adjust_cfa_offset 8
94   .cfi_rel_offset %rdx, 0
95   push %rsi
96   .cfi_adjust_cfa_offset 8
97   .cfi_rel_offset %rsi, 0
98   push %rdi
99   .cfi_adjust_cfa_offset 8
100   .cfi_rel_offset %rdi, 0
101   push %r8
102   .cfi_adjust_cfa_offset 8
103   .cfi_rel_offset %r8, 0
104   push %r9
105   .cfi_adjust_cfa_offset 8
106   .cfi_rel_offset %r9, 0
107   push %r10
108   .cfi_adjust_cfa_offset 8
109   .cfi_rel_offset %r10, 0
110   push %r11
111   .cfi_adjust_cfa_offset 8
112   .cfi_rel_offset %r11, 0
113   # Align stack frame.
114   push %rbx  # non-scratch
115   .cfi_adjust_cfa_offset 8
116   .cfi_rel_offset %rbx, 0
117   mov %rsp, %rbx  # save current rsp
118   .cfi_def_cfa_register %rbx
119   shr $4, %rsp  # clear 4 lsb, align to 16
120   shl $4, %rsp
122   call __tsan_report_race
124   # Unalign stack frame back.
125   mov %rbx, %rsp  # restore the original rsp
126   .cfi_def_cfa_register %rsp
127   pop %rbx
128   .cfi_adjust_cfa_offset -8
129   # Restore scratch registers.
130   pop %r11
131   .cfi_adjust_cfa_offset -8
132   pop %r10
133   .cfi_adjust_cfa_offset -8
134   pop %r9
135   .cfi_adjust_cfa_offset -8
136   pop %r8
137   .cfi_adjust_cfa_offset -8
138   pop %rdi
139   .cfi_adjust_cfa_offset -8
140   pop %rsi
141   .cfi_adjust_cfa_offset -8
142   pop %rdx
143   .cfi_adjust_cfa_offset -8
144   pop %rcx
145   .cfi_adjust_cfa_offset -8
146   pop %rax
147   .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
158   ret
159   .cfi_endproc
161 #ifdef __linux__
162 /* We do not need executable stack.  */
163 .section        .note.GNU-stack,"",@progbits
164 #endif