@@ -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
@@ -110,28 +109,51 @@ define void @tailcall_unrelated_frame() sspreq {
110
109
declare void @callee ()
111
110
define void @caller () sspreq {
112
111
; WINDOWS-LABEL: caller:
113
- ; WINDOWS: callq callee
114
- ; WINDOWS: callq callee
115
- ; WINDOWS: cmpq %rax, %rcx
112
+ ; WINDOWS: # %bb.0:
113
+ ; WINDOWS-NEXT: subq $40, %rsp
114
+ ; WINDOWS-NEXT: .seh_stackalloc 40
115
+ ; WINDOWS-NEXT: .seh_endprologue
116
+ ; WINDOWS-NEXT: movq __security_cookie(%rip), %rax
117
+ ; WINDOWS-NEXT: xorq %rsp, %rax
118
+ ; WINDOWS-NEXT: movq %rax, {{[0-9]+}}(%rsp)
119
+ ; WINDOWS-NEXT: callq callee
120
+ ; WINDOWS-NEXT: callq callee
121
+ ; WINDOWS-NEXT: movq {{[0-9]+}}(%rsp), %rax
122
+ ; WINDOWS-NEXT: xorq %rsp, %rax
123
+ ; WINDOWS-NEXT: movq __security_cookie(%rip), %rcx
124
+ ; WINDOWS-NEXT: cmpq %rax, %rcx
116
125
; WINDOWS-NEXT: jne .LBB2_2
117
126
; WINDOWS-NEXT: # %bb.1:
118
127
; WINDOWS-NEXT: .seh_startepilogue
119
128
; WINDOWS-NEXT: addq $40, %rsp
120
129
; WINDOWS-NEXT: .seh_endepilogue
121
130
; WINDOWS-NEXT: retq
122
131
; WINDOWS-NEXT: .LBB2_2:
123
- ; WINDOWS-NEXT: movq 32 (%rsp), %rcx
132
+ ; WINDOWS-NEXT: movq {{[0-9]+}} (%rsp), %rcx
124
133
; WINDOWS-NEXT: xorq %rsp, %rcx
125
134
; WINDOWS-NEXT: callq __security_check_cookie
126
135
; WINDOWS-NEXT: int3
127
136
; WINDOWS-NEXT: .seh_endproc
128
-
137
+ ;
129
138
; LINUX-LABEL: caller:
130
- ; LINUX: callq callee@PLT
131
- ; LINUX: callq callee@PLT
132
- ; LINUX: cmpq
133
- ; LINUX: jne
134
- ; LINUX: callq __stack_chk_fail@PLT
139
+ ; LINUX: # %bb.0:
140
+ ; LINUX-NEXT: pushq %rax
141
+ ; LINUX-NEXT: .cfi_def_cfa_offset 16
142
+ ; LINUX-NEXT: movq %fs:40, %rax
143
+ ; LINUX-NEXT: movq %rax, (%rsp)
144
+ ; LINUX-NEXT: callq callee@PLT
145
+ ; LINUX-NEXT: callq callee@PLT
146
+ ; LINUX-NEXT: movq %fs:40, %rax
147
+ ; LINUX-NEXT: cmpq (%rsp), %rax
148
+ ; LINUX-NEXT: jne .LBB2_2
149
+ ; LINUX-NEXT: # %bb.1: # %SP_return
150
+ ; LINUX-NEXT: popq %rax
151
+ ; LINUX-NEXT: .cfi_def_cfa_offset 8
152
+ ; LINUX-NEXT: retq
153
+ ; LINUX-NEXT: .LBB2_2: # %CallStackCheckFailBlk
154
+ ; LINUX-NEXT: .cfi_def_cfa_offset 16
155
+ ; LINUX-NEXT: callq __stack_chk_fail@PLT
156
+
135
157
136
158
tail call void @callee ()
137
159
call void @callee ()
0 commit comments