/src/test/assembly/stack-protector/stack-protector-target-support.rs

https://gitlab.com/rust-lang/rust · Rust · 286 lines · 11 code · 7 blank · 268 comment · 0 complexity · b51333d89cc4668d64d7b84934477cad MD5 · raw file

  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. // [r75] min-llvm-version: 11.0.0
  160. // [r76] compile-flags:--target x86_64-fuchsia
  161. // [r76] needs-llvm-components: x86
  162. // [r77] compile-flags:--target x86_64-linux-android
  163. // [r77] needs-llvm-components: x86
  164. // [r78] compile-flags:--target x86_64-sun-solaris
  165. // [r78] needs-llvm-components: x86
  166. // [r79] compile-flags:--target x86_64-unknown-freebsd
  167. // [r79] needs-llvm-components: x86
  168. // [r80] compile-flags:--target x86_64-unknown-illumos
  169. // [r80] needs-llvm-components: x86
  170. // [r81] compile-flags:--target x86_64-unknown-linux-gnux32
  171. // [r81] needs-llvm-components: x86
  172. // [r82] compile-flags:--target x86_64-unknown-linux-musl
  173. // [r82] needs-llvm-components: x86
  174. // [r83] compile-flags:--target x86_64-unknown-netbsd
  175. // [r83] needs-llvm-components: x86
  176. // [r84] compile-flags: --target x86_64-unknown-redox
  177. // [r84] needs-llvm-components: x86
  178. // compile-flags: -Z stack-protector=all
  179. // compile-flags: -C opt-level=2
  180. #![crate_type = "lib"]
  181. #![feature(no_core, lang_items)]
  182. #![crate_type = "lib"]
  183. #![no_core]
  184. #[lang = "sized"]
  185. trait Sized {}
  186. #[lang = "copy"]
  187. trait Copy {}
  188. #[no_mangle]
  189. pub fn foo() {
  190. // CHECK: foo{{:|()}}
  191. // MSVC does the stack checking within a stack-check function:
  192. // r3: calll @__security_check_cookie
  193. // r7: callq __security_check_cookie
  194. // r13: bl __security_check_cookie
  195. // r35: calll @__security_check_cookie
  196. // cuda doesn't support stack-smash protection
  197. // r49-NOT: __security_check_cookie
  198. // r49-NOT: __stack_chk_fail
  199. // Other targets do stack checking within the function, and call a failure function on error
  200. // r1: __stack_chk_fail
  201. // r2: __stack_chk_fail
  202. // r4: __stack_chk_fail
  203. // r5: __stack_chk_fail
  204. // r6: __stack_chk_fail
  205. // r8: __stack_chk_fail
  206. // r9: __stack_chk_fail
  207. // r10: __stack_chk_fail
  208. // r11: __stack_chk_fail
  209. // r12: __stack_chk_fail
  210. // r14: __stack_chk_fail
  211. // r15: __stack_chk_fail
  212. // r16: __stack_chk_fail
  213. // r17: __stack_chk_fail
  214. // r18: __stack_chk_fail
  215. // r19: __stack_chk_fail
  216. // r20: __stack_chk_fail
  217. // r21: __stack_chk_fail
  218. // r22: __stack_chk_fail
  219. // r23: __stack_chk_fail
  220. // r24: __stack_chk_fail
  221. // r25: __stack_chk_fail
  222. // r26: __stack_chk_fail
  223. // r27: __stack_chk_fail
  224. // r28: __stack_chk_fail
  225. // r29: __stack_chk_fail
  226. // r30: __stack_chk_fail
  227. // r31: __stack_chk_fail
  228. // r32: __stack_chk_fail
  229. // r33: __stack_chk_fail
  230. // r34: __stack_chk_fail
  231. // r36: __stack_chk_fail
  232. // r37: __stack_chk_fail
  233. // r38: __stack_chk_fail
  234. // r39: __stack_chk_fail
  235. // r40: __stack_chk_fail
  236. // r41: __stack_chk_fail
  237. // r42: __stack_chk_fail
  238. // r43: __stack_chk_fail
  239. // r44: __stack_chk_fail
  240. // r45: __stack_chk_fail
  241. // r46: __stack_chk_fail
  242. // r47: __stack_chk_fail
  243. // r48: __stack_chk_fail
  244. // r50: __stack_chk_fail
  245. // r51: __stack_chk_fail
  246. // r52: __stack_chk_fail
  247. // r53: __stack_chk_fail
  248. // r54: __stack_chk_fail
  249. // r55: __stack_chk_fail
  250. // r56: __stack_chk_fail
  251. // r57: __stack_chk_fail
  252. // r58: __stack_chk_fail
  253. // r59: __stack_chk_fail
  254. // r60: __stack_chk_fail
  255. // r61: __stack_chk_fail
  256. // r62: __stack_chk_fail
  257. // r63: __stack_chk_fail
  258. // r64: __stack_chk_fail
  259. // r65: __stack_chk_fail
  260. // r66: __stack_chk_fail
  261. // r67: __stack_chk_fail
  262. // r68: __stack_chk_fail
  263. // r69: __stack_chk_fail
  264. // r70: __stack_chk_fail
  265. // r71: __stack_chk_fail
  266. // r72: __stack_chk_fail
  267. // r73: __stack_chk_fail
  268. // r74: __stack_chk_fail
  269. // r75: __stack_chk_fail
  270. // r76: __stack_chk_fail
  271. // r77: __stack_chk_fail
  272. // r78: __stack_chk_fail
  273. // r79: __stack_chk_fail
  274. // r80: __stack_chk_fail
  275. // r81: __stack_chk_fail
  276. // r82: __stack_chk_fail
  277. // r83: __stack_chk_fail
  278. // r84: __stack_chk_fail
  279. }