aboutsummaryrefslogtreecommitdiff
path: root/test/ELF/x86-64-split-stack-prologue-adjust-success.s
diff options
context:
space:
mode:
Diffstat (limited to 'test/ELF/x86-64-split-stack-prologue-adjust-success.s')
-rw-r--r--test/ELF/x86-64-split-stack-prologue-adjust-success.s35
1 files changed, 13 insertions, 22 deletions
diff --git a/test/ELF/x86-64-split-stack-prologue-adjust-success.s b/test/ELF/x86-64-split-stack-prologue-adjust-success.s
index bad26677f3fd..fb3493f2c3e7 100644
--- a/test/ELF/x86-64-split-stack-prologue-adjust-success.s
+++ b/test/ELF/x86-64-split-stack-prologue-adjust-success.s
@@ -1,8 +1,9 @@
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o
-# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/x86-64-split-stack-main.s -o %t2.o
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/x86-64-split-stack-extra.s -o %t2.o
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/x86-64-split-stack-main.s -o %t3.o
-# RUN: ld.lld --defsym __morestack=0x100 --defsym __morestack_non_split=0x200 %t1.o %t2.o -o %t -z notext
+# RUN: ld.lld --defsym __morestack=0x100 --defsym __morestack_non_split=0x200 %t1.o %t2.o %t3.o -o %t -z notext
# RUN: llvm-objdump -d %t | FileCheck %s
# Avoid duplicating the prologue for every test via macros.
@@ -25,11 +26,11 @@ prologue1_calls_\function_to_call:
.size prologue1_calls_\function_to_call,. - prologue1_calls_\function_to_call
.endm
-.macro prologue2 function_to_call register
+.macro prologue2 function_to_call register compare_amount
.global prologue2_calls_\function_to_call\register
.type prologue2_calls_\function_to_call\register,@function
prologue2_calls_\function_to_call\register:
- lea -0x200(%rsp),%\register
+ lea -\compare_amount(%rsp),%\register
cmp %fs:0x70,%\register
jae 1f
callq __morestack
@@ -65,20 +66,20 @@ prologue1 split
# calls plain __morestack, that any raw bytes written to the prologue
# make sense, and that the register number is preserved.
# CHECK: prologue2_calls_splitr10:
-# CHECK-NEXT: lea{{.*}} -{{[0-9]+}}(%rsp),{{.*}}%r10
+# CHECK-NEXT: lea{{.*}} -512(%rsp),{{.*}}%r10
# CHECK: cmp{{.*}}%fs:{{[^,]*}},{{.*}}%r{{[0-9]+}}
# CHECK: jae{{.*}}
# CHECK-NEXT: callq{{.*}}<__morestack>
-prologue2 split r10
+prologue2 split r10 0x200
# CHECK: prologue2_calls_splitr11:
-# CHECK-NEXT: lea{{.*}} -{{[0-9]+}}(%rsp),{{.*}}%r11
+# CHECK-NEXT: lea{{.*}} -256(%rsp),{{.*}}%r11
# CHECK: cmp{{.*}}%fs:{{[^,]*}},{{.*}}%r{{[0-9]+}}
# CHECK: jae{{.*}}
# CHECK-NEXT: callq{{.*}}<__morestack>
-prologue2 split r11
+prologue2 split r11 0x100
# For split-stack code calling non-split-stack code, ensure prologue v1
# calls __morestack_non_split, and that any raw bytes written to the prologue
@@ -95,30 +96,20 @@ prologue1 non_split
# calls __morestack_non_split, that any raw bytes written to the prologue
# make sense, and that the register number is preserved
# CHECK: prologue2_calls_non_splitr10:
-# CHECK-NEXT: lea{{.*$}}
+# CHECK-NEXT: lea{{.*}} -16640(%rsp),{{.*}}%r10
# CHECK: cmp{{.*}}%fs:{{[^,]*}},{{.*}}%r10
# CHECK: jae{{.*$}}
# CHECK-NEXT: callq{{.*}}<__morestack_non_split>
-prologue2 non_split r10
+prologue2 non_split r10 0x100
# CHECK: prologue2_calls_non_splitr11:
-# CHECK-NEXT: lea{{.*$}}
+# CHECK-NEXT: lea{{.*}} -16896(%rsp),{{.*}}%r11
# CHECK: cmp{{.*}}%fs:{{[^,]*}},{{.*}}%r11
# CHECK: jae{{.*$}}
# CHECK-NEXT: callq{{.*}}<__morestack_non_split>
-prologue2 non_split r11
-# call foo@plt # for code-coverage.
-
-
-
- .global split
- .type split,@function
-split:
- retq
-
- .size split,. - split
+prologue2 non_split r11 0x200
.section .note.GNU-stack,"",@progbits
.section .note.GNU-split-stack,"",@progbits