@@ -6,8 +6,7 @@ declare void @h(ptr, i64, ptr)
66
77define tailcc void @tailcall_frame (ptr %0 , i64 %1 ) sspreq {
88; WINDOWS-LABEL: tailcall_frame:
9- ; WINDOWS-NEXT: .seh_proc tailcall_frame
10- ; WINDOWS-NEXT: # %bb.0:
9+ ; WINDOWS: # %bb.0:
1110; WINDOWS-NEXT: subq $56, %rsp
1211; WINDOWS-NEXT: .seh_stackalloc 56
1312; WINDOWS-NEXT: .seh_endprologue
@@ -68,7 +67,7 @@ define void @tailcall_unrelated_frame() sspreq {
6867; WINDOWS-NEXT: xorq %rsp, %rax
6968; WINDOWS-NEXT: movq %rax, {{[0-9]+}}(%rsp)
7069; WINDOWS-NEXT: callq bar
71- ; WINDOWS-NEXT: movq 32 (%rsp), %rax
70+ ; WINDOWS-NEXT: movq {{[0-9]+}} (%rsp), %rax
7271; WINDOWS-NEXT: xorq %rsp, %rax
7372; WINDOWS-NEXT: movq __security_cookie(%rip), %rcx
7473; WINDOWS-NEXT: cmpq %rax, %rcx
@@ -79,7 +78,7 @@ define void @tailcall_unrelated_frame() sspreq {
7978; WINDOWS-NEXT: .seh_endepilogue
8079; WINDOWS-NEXT: jmp bar # TAILCALL
8180; WINDOWS-NEXT: .LBB1_1:
82- ; WINDOWS-NEXT: movq 32 (%rsp), %rcx
81+ ; WINDOWS-NEXT: movq {{[0-9]+}} (%rsp), %rcx
8382; WINDOWS-NEXT: xorq %rsp, %rcx
8483; WINDOWS-NEXT: callq __security_check_cookie
8584; WINDOWS-NEXT: int3
@@ -112,28 +111,51 @@ define void @tailcall_unrelated_frame() sspreq {
112111declare void @callee ()
113112define void @caller () sspreq {
114113; 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
118127; WINDOWS-NEXT: jne .LBB2_2
119128; WINDOWS-NEXT: # %bb.1:
120129; WINDOWS-NEXT: .seh_startepilogue
121130; WINDOWS-NEXT: addq $40, %rsp
122131; WINDOWS-NEXT: .seh_endepilogue
123132; WINDOWS-NEXT: retq
124133; WINDOWS-NEXT: .LBB2_2:
125- ; WINDOWS-NEXT: movq 32 (%rsp), %rcx
134+ ; WINDOWS-NEXT: movq {{[0-9]+}} (%rsp), %rcx
126135; WINDOWS-NEXT: xorq %rsp, %rcx
127136; WINDOWS-NEXT: callq __security_check_cookie
128137; WINDOWS-NEXT: int3
129138; WINDOWS-NEXT: .seh_endproc
130-
139+ ;
131140; 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+
137159
138160 tail call void @callee ()
139161 call void @callee ()
0 commit comments