@@ -6,8 +6,7 @@ declare void @h(ptr, i64, ptr)
6
6
7
7
define tailcc void @tailcall_frame (ptr %0 , i64 %1 ) sspreq {
8
8
; WINDOWS-LABEL: tailcall_frame:
9
- ; WINDOWS-NEXT: .seh_proc tailcall_frame
10
- ; WINDOWS-NEXT: # %bb.0:
9
+ ; WINDOWS: # %bb.0:
11
10
; WINDOWS-NEXT: subq $56, %rsp
12
11
; WINDOWS-NEXT: .seh_stackalloc 56
13
12
; WINDOWS-NEXT: .seh_endprologue
@@ -68,7 +67,7 @@ define void @tailcall_unrelated_frame() sspreq {
68
67
; WINDOWS-NEXT: xorq %rsp, %rax
69
68
; WINDOWS-NEXT: movq %rax, {{[0-9]+}}(%rsp)
70
69
; WINDOWS-NEXT: callq bar
71
- ; WINDOWS-NEXT: movq 32 (%rsp), %rax
70
+ ; WINDOWS-NEXT: movq {{[0-9]+}} (%rsp), %rax
72
71
; WINDOWS-NEXT: xorq %rsp, %rax
73
72
; WINDOWS-NEXT: movq __security_cookie(%rip), %rcx
74
73
; WINDOWS-NEXT: cmpq %rax, %rcx
@@ -79,7 +78,7 @@ define void @tailcall_unrelated_frame() sspreq {
79
78
; WINDOWS-NEXT: .seh_endepilogue
80
79
; WINDOWS-NEXT: jmp bar # TAILCALL
81
80
; WINDOWS-NEXT: .LBB1_1:
82
- ; WINDOWS-NEXT: movq 32 (%rsp), %rcx
81
+ ; WINDOWS-NEXT: movq {{[0-9]+}} (%rsp), %rcx
83
82
; WINDOWS-NEXT: xorq %rsp, %rcx
84
83
; WINDOWS-NEXT: callq __security_check_cookie
85
84
; WINDOWS-NEXT: int3
@@ -112,28 +111,51 @@ define void @tailcall_unrelated_frame() sspreq {
112
111
declare void @callee ()
113
112
define void @caller () sspreq {
114
113
; WINDOWS-LABEL: caller:
115
- ; WINDOWS: callq callee
116
- ; WINDOWS: callq callee
117
- ; WINDOWS: cmpq %rax, %rcx
114
+ ; WINDOWS: # %bb.0:
115
+ ; WINDOWS-NEXT: subq $40, %rsp
116
+ ; WINDOWS-NEXT: .seh_stackalloc 40
117
+ ; WINDOWS-NEXT: .seh_endprologue
118
+ ; WINDOWS-NEXT: movq __security_cookie(%rip), %rax
119
+ ; WINDOWS-NEXT: xorq %rsp, %rax
120
+ ; WINDOWS-NEXT: movq %rax, {{[0-9]+}}(%rsp)
121
+ ; WINDOWS-NEXT: callq callee
122
+ ; WINDOWS-NEXT: callq callee
123
+ ; WINDOWS-NEXT: movq {{[0-9]+}}(%rsp), %rax
124
+ ; WINDOWS-NEXT: xorq %rsp, %rax
125
+ ; WINDOWS-NEXT: movq __security_cookie(%rip), %rcx
126
+ ; WINDOWS-NEXT: cmpq %rax, %rcx
118
127
; WINDOWS-NEXT: jne .LBB2_2
119
128
; WINDOWS-NEXT: # %bb.1:
120
129
; WINDOWS-NEXT: .seh_startepilogue
121
130
; WINDOWS-NEXT: addq $40, %rsp
122
131
; WINDOWS-NEXT: .seh_endepilogue
123
132
; WINDOWS-NEXT: retq
124
133
; WINDOWS-NEXT: .LBB2_2:
125
- ; WINDOWS-NEXT: movq 32 (%rsp), %rcx
134
+ ; WINDOWS-NEXT: movq {{[0-9]+}} (%rsp), %rcx
126
135
; WINDOWS-NEXT: xorq %rsp, %rcx
127
136
; WINDOWS-NEXT: callq __security_check_cookie
128
137
; WINDOWS-NEXT: int3
129
138
; WINDOWS-NEXT: .seh_endproc
130
-
139
+ ;
131
140
; LINUX-LABEL: caller:
132
- ; LINUX: callq callee@PLT
133
- ; LINUX: callq callee@PLT
134
- ; LINUX: cmpq
135
- ; LINUX: jne
136
- ; LINUX: callq __stack_chk_fail@PLT
141
+ ; LINUX: # %bb.0:
142
+ ; LINUX-NEXT: pushq %rax
143
+ ; LINUX-NEXT: .cfi_def_cfa_offset 16
144
+ ; LINUX-NEXT: movq %fs:40, %rax
145
+ ; LINUX-NEXT: movq %rax, (%rsp)
146
+ ; LINUX-NEXT: callq callee@PLT
147
+ ; LINUX-NEXT: callq callee@PLT
148
+ ; LINUX-NEXT: movq %fs:40, %rax
149
+ ; LINUX-NEXT: cmpq (%rsp), %rax
150
+ ; LINUX-NEXT: jne .LBB2_2
151
+ ; LINUX-NEXT: # %bb.1: # %SP_return
152
+ ; LINUX-NEXT: popq %rax
153
+ ; LINUX-NEXT: .cfi_def_cfa_offset 8
154
+ ; LINUX-NEXT: retq
155
+ ; LINUX-NEXT: .LBB2_2: # %CallStackCheckFailBlk
156
+ ; LINUX-NEXT: .cfi_def_cfa_offset 16
157
+ ; LINUX-NEXT: callq __stack_chk_fail@PLT
158
+
137
159
138
160
tail call void @callee ()
139
161
call void @callee ()
0 commit comments