annotate lld/test/ELF/x86-64-split-stack-prologue-adjust-success.s @ 192:d7606dcf6fce

Added tag llvm10 for changeset 0572611fdcc8
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 14 Dec 2020 18:01:34 +0900
parents 0572611fdcc8
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 # REQUIRES: x86
anatofuz
parents:
diff changeset
2 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o
anatofuz
parents:
diff changeset
3 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/x86-64-split-stack-extra.s -o %t2.o
anatofuz
parents:
diff changeset
4 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/x86-64-split-stack-main.s -o %t3.o
anatofuz
parents:
diff changeset
5
anatofuz
parents:
diff changeset
6 # RUN: ld.lld --defsym __morestack=0x100 --defsym __morestack_non_split=0x200 %t1.o %t2.o %t3.o -o %t -z notext
anatofuz
parents:
diff changeset
7 # RUN: llvm-objdump -d %t | FileCheck %s
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 # Avoid duplicating the prologue for every test via macros.
anatofuz
parents:
diff changeset
10
anatofuz
parents:
diff changeset
11 .macro prologue1 function_to_call
anatofuz
parents:
diff changeset
12 .global prologue1_calls_\function_to_call
anatofuz
parents:
diff changeset
13 .type prologue1_calls_\function_to_call,@function
anatofuz
parents:
diff changeset
14 prologue1_calls_\function_to_call:
anatofuz
parents:
diff changeset
15 cmp %fs:0x70,%rsp
anatofuz
parents:
diff changeset
16 jae 1f
anatofuz
parents:
diff changeset
17 callq __morestack
anatofuz
parents:
diff changeset
18 retq
anatofuz
parents:
diff changeset
19 1:
anatofuz
parents:
diff changeset
20 # Various and duplicate calls to ensure every code path is taken.
anatofuz
parents:
diff changeset
21 callq \function_to_call
anatofuz
parents:
diff changeset
22 callq \function_to_call
anatofuz
parents:
diff changeset
23 callq 1b
anatofuz
parents:
diff changeset
24 callq non_function_text_symbol
anatofuz
parents:
diff changeset
25 retq
anatofuz
parents:
diff changeset
26 .size prologue1_calls_\function_to_call,. - prologue1_calls_\function_to_call
anatofuz
parents:
diff changeset
27 .endm
anatofuz
parents:
diff changeset
28
anatofuz
parents:
diff changeset
29 .macro prologue2 function_to_call register compare_amount
anatofuz
parents:
diff changeset
30 .global prologue2_calls_\function_to_call\register
anatofuz
parents:
diff changeset
31 .type prologue2_calls_\function_to_call\register,@function
anatofuz
parents:
diff changeset
32 prologue2_calls_\function_to_call\register:
anatofuz
parents:
diff changeset
33 lea -\compare_amount(%rsp),%\register
anatofuz
parents:
diff changeset
34 cmp %fs:0x70,%\register
anatofuz
parents:
diff changeset
35 jae 1f
anatofuz
parents:
diff changeset
36 callq __morestack
anatofuz
parents:
diff changeset
37 retq
anatofuz
parents:
diff changeset
38 1:
anatofuz
parents:
diff changeset
39 # Various and duplicate calls to ensure every code path is taken.
anatofuz
parents:
diff changeset
40 callq \function_to_call
anatofuz
parents:
diff changeset
41 callq \function_to_call
anatofuz
parents:
diff changeset
42 callq 1b
anatofuz
parents:
diff changeset
43 callq non_function_text_symbol
anatofuz
parents:
diff changeset
44 retq
anatofuz
parents:
diff changeset
45 .size prologue2_calls_\function_to_call\register,. - prologue2_calls_\function_to_call\register
anatofuz
parents:
diff changeset
46 .endm
anatofuz
parents:
diff changeset
47
anatofuz
parents:
diff changeset
48 .local foo
anatofuz
parents:
diff changeset
49 foo:
anatofuz
parents:
diff changeset
50 .section .text,"ax",@progbits
anatofuz
parents:
diff changeset
51 .quad foo
anatofuz
parents:
diff changeset
52
anatofuz
parents:
diff changeset
53 .text
anatofuz
parents:
diff changeset
54
anatofuz
parents:
diff changeset
55 # For split-stack code calling split-stack code, ensure prologue v1 still
anatofuz
parents:
diff changeset
56 # calls plain __morestack, and that any raw bytes written to the prologue
anatofuz
parents:
diff changeset
57 # make sense.
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
58 # CHECK: <prologue1_calls_split>:
150
anatofuz
parents:
diff changeset
59 # CHECK-NEXT: cmp{{.*}}%fs:{{[^,]*}},{{.*}}%rsp
anatofuz
parents:
diff changeset
60 # CHECK: jae{{.*$}}
anatofuz
parents:
diff changeset
61 # CHECK-NEXT: callq{{.*}}<__morestack>
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 prologue1 split
anatofuz
parents:
diff changeset
64
anatofuz
parents:
diff changeset
65 # For split-stack code calling split-stack code, ensure prologue v2 still
anatofuz
parents:
diff changeset
66 # calls plain __morestack, that any raw bytes written to the prologue
anatofuz
parents:
diff changeset
67 # make sense, and that the register number is preserved.
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
68 # CHECK: <prologue2_calls_splitr10>:
150
anatofuz
parents:
diff changeset
69 # CHECK-NEXT: lea{{.*}} -512(%rsp),{{.*}}%r10
anatofuz
parents:
diff changeset
70 # CHECK: cmp{{.*}}%fs:{{[^,]*}},{{.*}}%r{{[0-9]+}}
anatofuz
parents:
diff changeset
71 # CHECK: jae{{.*}}
anatofuz
parents:
diff changeset
72 # CHECK-NEXT: callq{{.*}}<__morestack>
anatofuz
parents:
diff changeset
73
anatofuz
parents:
diff changeset
74 prologue2 split r10 0x200
anatofuz
parents:
diff changeset
75
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
76 # CHECK: <prologue2_calls_splitr11>:
150
anatofuz
parents:
diff changeset
77 # CHECK-NEXT: lea{{.*}} -256(%rsp),{{.*}}%r11
anatofuz
parents:
diff changeset
78 # CHECK: cmp{{.*}}%fs:{{[^,]*}},{{.*}}%r{{[0-9]+}}
anatofuz
parents:
diff changeset
79 # CHECK: jae{{.*}}
anatofuz
parents:
diff changeset
80 # CHECK-NEXT: callq{{.*}}<__morestack>
anatofuz
parents:
diff changeset
81
anatofuz
parents:
diff changeset
82 prologue2 split r11 0x100
anatofuz
parents:
diff changeset
83
anatofuz
parents:
diff changeset
84 # For split-stack code calling non-split-stack code, ensure prologue v1
anatofuz
parents:
diff changeset
85 # calls __morestack_non_split, and that any raw bytes written to the prologue
anatofuz
parents:
diff changeset
86 # make sense.
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
87 # CHECK: <prologue1_calls_non_split>:
150
anatofuz
parents:
diff changeset
88 # CHECK-NEXT: stc{{.*$}}
anatofuz
parents:
diff changeset
89 # CHECK-NEXT: nopl{{.*$}}
anatofuz
parents:
diff changeset
90 # CHECK: jae{{.*$}}
anatofuz
parents:
diff changeset
91 # CHECK-NEXT: callq{{.*}}<__morestack_non_split>
anatofuz
parents:
diff changeset
92
anatofuz
parents:
diff changeset
93 prologue1 non_split
anatofuz
parents:
diff changeset
94
anatofuz
parents:
diff changeset
95 # For split-stack code calling non-split-stack code, ensure prologue v2
anatofuz
parents:
diff changeset
96 # calls __morestack_non_split, that any raw bytes written to the prologue
anatofuz
parents:
diff changeset
97 # make sense, and that the register number is preserved
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
98 # CHECK: <prologue2_calls_non_splitr10>:
150
anatofuz
parents:
diff changeset
99 # CHECK-NEXT: lea{{.*}} -16640(%rsp),{{.*}}%r10
anatofuz
parents:
diff changeset
100 # CHECK: cmp{{.*}}%fs:{{[^,]*}},{{.*}}%r10
anatofuz
parents:
diff changeset
101 # CHECK: jae{{.*$}}
anatofuz
parents:
diff changeset
102 # CHECK-NEXT: callq{{.*}}<__morestack_non_split>
anatofuz
parents:
diff changeset
103
anatofuz
parents:
diff changeset
104 prologue2 non_split r10 0x100
anatofuz
parents:
diff changeset
105
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
106 # CHECK: <prologue2_calls_non_splitr11>:
150
anatofuz
parents:
diff changeset
107 # CHECK-NEXT: lea{{.*}} -16896(%rsp),{{.*}}%r11
anatofuz
parents:
diff changeset
108 # CHECK: cmp{{.*}}%fs:{{[^,]*}},{{.*}}%r11
anatofuz
parents:
diff changeset
109 # CHECK: jae{{.*$}}
anatofuz
parents:
diff changeset
110 # CHECK-NEXT: callq{{.*}}<__morestack_non_split>
anatofuz
parents:
diff changeset
111
anatofuz
parents:
diff changeset
112 prologue2 non_split r11 0x200
anatofuz
parents:
diff changeset
113
anatofuz
parents:
diff changeset
114 .section .note.GNU-stack,"",@progbits
anatofuz
parents:
diff changeset
115 .section .note.GNU-split-stack,"",@progbits