]> git.lizzy.rs Git - rust.git/blob - src/test/assembly/stack-protector/stack-protector-target-support.rs
Update the minimum external LLVM to 13
[rust.git] / src / test / assembly / stack-protector / stack-protector-target-support.rs
1 // Test that stack smash protection code is emitted for all tier1 and tier2
2 // targets, with the exception of nvptx64-nvidia-cuda
3 //
4 // revisions: r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23
5 // revisions: r24 r25 r26 r27 r28 r29 r30 r31 r32 r33 r34 r35 r36 r37 r38 r39 r40 r41 r42 r43 r44
6 // revisions: r45 r46 r47 r48 r49 r50 r51 r52 r53 r54 r55 r56 r57 r58 r59 r60 r61 r62 r63 r64 r65
7 // revisions: r66 r67 r68 r69 r70 r71 r72 r73 r74 r75 r76 r77 r78 r79 r80 r81 r82 r83 r84
8 // assembly-output: emit-asm
9 // [r1] compile-flags: --target aarch64-unknown-linux-gnu
10 // [r1] needs-llvm-components: aarch64
11 // [r2] compile-flags: --target i686-pc-windows-gnu
12 // [r2] needs-llvm-components: x86
13 // [r3] compile-flags: --target i686-pc-windows-msvc
14 // [r3] needs-llvm-components: x86
15 // [r4] compile-flags: --target i686-unknown-linux-gnu
16 // [r4] needs-llvm-components: x86
17 // [r5] compile-flags: --target x86_64-apple-darwin
18 // [r5] needs-llvm-components: x86
19 // [r6] compile-flags: --target x86_64-pc-windows-gnu
20 // [r6] needs-llvm-components: x86
21 // [r7] compile-flags: --target x86_64-pc-windows-msvc
22 // [r7] needs-llvm-components: x86
23 // [r8] compile-flags: --target x86_64-unknown-linux-gnu
24 // [r8] needs-llvm-components: x86
25 // [r9] compile-flags: --target aarch64-apple-darwin
26 // [r9] needs-llvm-components: aarch64
27 // [r10] compile-flags: --target aarch64-apple-ios
28 // [r10] needs-llvm-components: aarch64
29 // [r11] compile-flags: --target aarch64-fuchsia
30 // [r11] needs-llvm-components: aarch64
31 // [r12] compile-flags: --target aarch64-linux-android
32 // [r12] needs-llvm-components: aarch64
33 // [r13] compile-flags: --target aarch64-pc-windows-msvc
34 // [r13] needs-llvm-components: aarch64
35 // [r14] compile-flags: --target aarch64-unknown-linux-musl
36 // [r14] needs-llvm-components: aarch64
37 // [r15] compile-flags: --target aarch64-unknown-none
38 // [r15] needs-llvm-components: aarch64
39 // [r16] compile-flags: --target aarch64-unknown-none-softfloat
40 // [r16] needs-llvm-components: aarch64
41 // [r17] compile-flags: --target arm-linux-androideabi
42 // [r17] needs-llvm-components: arm
43 // [r18] compile-flags: --target arm-unknown-linux-gnueabi
44 // [r18] needs-llvm-components: arm
45 // [r19] compile-flags: --target arm-unknown-linux-gnueabihf
46 // [r19] needs-llvm-components: arm
47 // [r20] compile-flags: --target arm-unknown-linux-musleabi
48 // [r20] needs-llvm-components: arm
49 // [r21] compile-flags: --target arm-unknown-linux-musleabihf
50 // [r21] needs-llvm-components: arm
51 // [r22] compile-flags: --target armebv7r-none-eabi
52 // [r22] needs-llvm-components: arm
53 // [r23] compile-flags: --target armebv7r-none-eabihf
54 // [r23] needs-llvm-components: arm
55 // [r24] compile-flags: --target armv5te-unknown-linux-gnueabi
56 // [r24] needs-llvm-components: arm
57 // [r25] compile-flags: --target armv5te-unknown-linux-musleabi
58 // [r25] needs-llvm-components: arm
59 // [r26] compile-flags: --target armv7-linux-androideabi
60 // [r26] needs-llvm-components: arm
61 // [r27] compile-flags: --target armv7a-none-eabi
62 // [r27] needs-llvm-components: arm
63 // [r28] compile-flags: --target armv7r-none-eabi
64 // [r28] needs-llvm-components: arm
65 // [r29] compile-flags: --target armv7r-none-eabihf
66 // [r29] needs-llvm-components: arm
67 // [r30] compile-flags: --target armv7-unknown-linux-gnueabi
68 // [r30] needs-llvm-components: arm
69 // [r31] compile-flags: --target armv7-unknown-linux-gnueabihf
70 // [r31] needs-llvm-components: arm
71 // [r32] compile-flags: --target armv7-unknown-linux-musleabi
72 // [r32] needs-llvm-components: arm
73 // [r33] compile-flags: --target armv7-unknown-linux-musleabihf
74 // [r33] needs-llvm-components: arm
75 // [r34] compile-flags: --target asmjs-unknown-emscripten
76 // [r34] needs-llvm-components: webassembly
77 // [r35] compile-flags: --target i586-pc-windows-msvc
78 // [r35] needs-llvm-components: x86
79 // [r36] compile-flags: --target i586-unknown-linux-gnu
80 // [r36] needs-llvm-components: x86
81 // [r37] compile-flags: --target i586-unknown-linux-musl
82 // [r37] needs-llvm-components: x86
83 // [r38] compile-flags: --target i686-linux-android
84 // [r38] needs-llvm-components: x86
85 // [r39] compile-flags: --target i686-unknown-freebsd
86 // [r39] needs-llvm-components: x86
87 // [r40] compile-flags: --target i686-unknown-linux-musl
88 // [r40] needs-llvm-components: x86
89 // [r41] compile-flags: --target mips-unknown-linux-gnu
90 // [r41] needs-llvm-components: mips
91 // [r42] compile-flags: --target mips-unknown-linux-musl
92 // [r42] needs-llvm-components: mips
93 // [r43] compile-flags: --target mips64-unknown-linux-gnuabi64
94 // [r43] needs-llvm-components: mips
95 // [r44] compile-flags: --target mips64-unknown-linux-muslabi64
96 // [r44] needs-llvm-components: mips
97 // [r45] compile-flags: --target mips64el-unknown-linux-gnuabi64
98 // [r45] needs-llvm-components: mips
99 // [r46] compile-flags: --target mips64el-unknown-linux-muslabi64
100 // [r46] needs-llvm-components: mips
101 // [r47] compile-flags: --target mipsel-unknown-linux-gnu
102 // [r47] needs-llvm-components: mips
103 // [r48] compile-flags: --target mipsel-unknown-linux-musl
104 // [r48] needs-llvm-components: mips
105 // [r49] compile-flags: --target nvptx64-nvidia-cuda
106 // [r49] needs-llvm-components: nvptx
107 // [r50] compile-flags: --target powerpc-unknown-linux-gnu
108 // [r50] needs-llvm-components: powerpc
109 // [r51] compile-flags: --target powerpc64-unknown-linux-gnu
110 // [r51] needs-llvm-components: powerpc
111 // [r52] compile-flags: --target powerpc64le-unknown-linux-gnu
112 // [r52] needs-llvm-components: powerpc
113 // [r53] compile-flags: --target riscv32i-unknown-none-elf
114 // [r53] needs-llvm-components: riscv
115 // [r54] compile-flags: --target riscv32imac-unknown-none-elf
116 // [r54] needs-llvm-components: riscv
117 // [r55] compile-flags:--target riscv32imc-unknown-none-elf
118 // [r55] needs-llvm-components: riscv
119 // [r56] compile-flags:--target riscv64gc-unknown-linux-gnu
120 // [r56] needs-llvm-components: riscv
121 // [r57] compile-flags:--target riscv64gc-unknown-none-elf
122 // [r57] needs-llvm-components: riscv
123 // [r58] compile-flags:--target riscv64imac-unknown-none-elf
124 // [r58] needs-llvm-components: riscv
125 // [r59] compile-flags:--target s390x-unknown-linux-gnu
126 // [r59] needs-llvm-components: systemz
127 // [r60] compile-flags:--target sparc64-unknown-linux-gnu
128 // [r60] needs-llvm-components: sparc
129 // [r61] compile-flags:--target sparcv9-sun-solaris
130 // [r61] needs-llvm-components: sparc
131 // [r62] compile-flags:--target thumbv6m-none-eabi
132 // [r62] needs-llvm-components: arm
133 // [r63] compile-flags:--target thumbv7em-none-eabi
134 // [r63] needs-llvm-components: arm
135 // [r64] compile-flags:--target thumbv7em-none-eabihf
136 // [r64] needs-llvm-components: arm
137 // [r65] compile-flags:--target thumbv7m-none-eabi
138 // [r65] needs-llvm-components: arm
139 // [r66] compile-flags:--target thumbv7neon-linux-androideabi
140 // [r66] needs-llvm-components: arm
141 // [r67] compile-flags:--target thumbv7neon-unknown-linux-gnueabihf
142 // [r67] needs-llvm-components: arm
143 // [r68] compile-flags:--target thumbv8m.base-none-eabi
144 // [r68] needs-llvm-components: arm
145 // [r69] compile-flags:--target thumbv8m.main-none-eabi
146 // [r69] needs-llvm-components: arm
147 // [r70] compile-flags:--target thumbv8m.main-none-eabihf
148 // [r70] needs-llvm-components: arm
149 // [r71] compile-flags:--target wasm32-unknown-emscripten
150 // [r71] needs-llvm-components: webassembly
151 // [r72] compile-flags:--target wasm32-unknown-unknown
152 // [r72] needs-llvm-components: webassembly
153 // [r73] compile-flags:--target wasm32-wasi
154 // [r73] needs-llvm-components: webassembly
155 // [r74] compile-flags:--target x86_64-apple-ios
156 // [r74] needs-llvm-components: x86
157 // [r75] compile-flags:--target x86_64-fortanix-unknown-sgx
158 // [r75] needs-llvm-components: x86
159 // [r76] compile-flags:--target x86_64-fuchsia
160 // [r76] needs-llvm-components: x86
161 // [r77] compile-flags:--target x86_64-linux-android
162 // [r77] needs-llvm-components: x86
163 // [r78] compile-flags:--target x86_64-sun-solaris
164 // [r78] needs-llvm-components: x86
165 // [r79] compile-flags:--target x86_64-unknown-freebsd
166 // [r79] needs-llvm-components: x86
167 // [r80] compile-flags:--target x86_64-unknown-illumos
168 // [r80] needs-llvm-components: x86
169 // [r81] compile-flags:--target x86_64-unknown-linux-gnux32
170 // [r81] needs-llvm-components: x86
171 // [r82] compile-flags:--target x86_64-unknown-linux-musl
172 // [r82] needs-llvm-components: x86
173 // [r83] compile-flags:--target x86_64-unknown-netbsd
174 // [r83] needs-llvm-components: x86
175 // [r84] compile-flags: --target x86_64-unknown-redox
176 // [r84] needs-llvm-components: x86
177 // compile-flags: -Z stack-protector=all
178 // compile-flags: -C opt-level=2
179
180 #![crate_type = "lib"]
181
182 #![feature(no_core, lang_items)]
183 #![crate_type = "lib"]
184 #![no_core]
185
186 #[lang = "sized"]
187 trait Sized {}
188 #[lang = "copy"]
189 trait Copy {}
190
191 #[no_mangle]
192 pub fn foo() {
193     // CHECK: foo{{:|()}}
194
195     // MSVC does the stack checking within a stack-check function:
196     // r3: calll @__security_check_cookie
197     // r7: callq __security_check_cookie
198     // r13: bl __security_check_cookie
199     // r35: calll @__security_check_cookie
200
201     // cuda doesn't support stack-smash protection
202     // r49-NOT: __security_check_cookie
203     // r49-NOT: __stack_chk_fail
204
205     // Other targets do stack checking within the function, and call a failure function on error
206     // r1: __stack_chk_fail
207     // r2: __stack_chk_fail
208     // r4: __stack_chk_fail
209     // r5: __stack_chk_fail
210     // r6: __stack_chk_fail
211     // r8: __stack_chk_fail
212     // r9: __stack_chk_fail
213     // r10: __stack_chk_fail
214     // r11: __stack_chk_fail
215     // r12: __stack_chk_fail
216     // r14: __stack_chk_fail
217     // r15: __stack_chk_fail
218     // r16: __stack_chk_fail
219     // r17: __stack_chk_fail
220     // r18: __stack_chk_fail
221     // r19: __stack_chk_fail
222     // r20: __stack_chk_fail
223     // r21: __stack_chk_fail
224     // r22: __stack_chk_fail
225     // r23: __stack_chk_fail
226     // r24: __stack_chk_fail
227     // r25: __stack_chk_fail
228     // r26: __stack_chk_fail
229     // r27: __stack_chk_fail
230     // r28: __stack_chk_fail
231     // r29: __stack_chk_fail
232     // r30: __stack_chk_fail
233     // r31: __stack_chk_fail
234     // r32: __stack_chk_fail
235     // r33: __stack_chk_fail
236     // r34: __stack_chk_fail
237     // r36: __stack_chk_fail
238     // r37: __stack_chk_fail
239     // r38: __stack_chk_fail
240     // r39: __stack_chk_fail
241     // r40: __stack_chk_fail
242     // r41: __stack_chk_fail
243     // r42: __stack_chk_fail
244     // r43: __stack_chk_fail
245     // r44: __stack_chk_fail
246     // r45: __stack_chk_fail
247     // r46: __stack_chk_fail
248     // r47: __stack_chk_fail
249     // r48: __stack_chk_fail
250     // r50: __stack_chk_fail
251     // r51: __stack_chk_fail
252     // r52: __stack_chk_fail
253     // r53: __stack_chk_fail
254     // r54: __stack_chk_fail
255     // r55: __stack_chk_fail
256     // r56: __stack_chk_fail
257     // r57: __stack_chk_fail
258     // r58: __stack_chk_fail
259     // r59: __stack_chk_fail
260     // r60: __stack_chk_fail
261     // r61: __stack_chk_fail
262     // r62: __stack_chk_fail
263     // r63: __stack_chk_fail
264     // r64: __stack_chk_fail
265     // r65: __stack_chk_fail
266     // r66: __stack_chk_fail
267     // r67: __stack_chk_fail
268     // r68: __stack_chk_fail
269     // r69: __stack_chk_fail
270     // r70: __stack_chk_fail
271     // r71: __stack_chk_fail
272     // r72: __stack_chk_fail
273     // r73: __stack_chk_fail
274     // r74: __stack_chk_fail
275     // r75: __stack_chk_fail
276     // r76: __stack_chk_fail
277     // r77: __stack_chk_fail
278     // r78: __stack_chk_fail
279     // r79: __stack_chk_fail
280     // r80: __stack_chk_fail
281     // r81: __stack_chk_fail
282     // r82: __stack_chk_fail
283     // r83: __stack_chk_fail
284     // r84: __stack_chk_fail
285 }