about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorErik Desjardins <erikdesjardins@users.noreply.github.com>2020-10-12 22:33:27 -0400
committerErik Desjardins <erikdesjardins@users.noreply.github.com>2021-01-14 22:49:16 -0500
commitcd2580722375671fa2967661f65b7b33570547ec (patch)
tree2a7c80c04b77f40691edd1da05e0d54e0930873f /src
parente38fb306b7f5e65cca34df2dab1f0db15e1defb4 (diff)
downloadrust-cd2580722375671fa2967661f65b7b33570547ec.tar.gz
rust-cd2580722375671fa2967661f65b7b33570547ec.zip
Use probe-stack=inline-asm in LLVM 11+
Diffstat (limited to 'src')
-rw-r--r--src/test/assembly/stack-probes.rs42
-rw-r--r--src/test/codegen/stack-probes.rs3
2 files changed, 44 insertions, 1 deletions
diff --git a/src/test/assembly/stack-probes.rs b/src/test/assembly/stack-probes.rs
new file mode 100644
index 00000000000..9597e242f1b
--- /dev/null
+++ b/src/test/assembly/stack-probes.rs
@@ -0,0 +1,42 @@
+// min-llvm-version: 11.0.1
+// revisions: x86_64 i686
+// assembly-output: emit-asm
+//[x86_64] compile-flags: --target x86_64-unknown-linux-gnu
+//[i686] compile-flags: --target i686-unknown-linux-gnu
+// compile-flags: -C llvm-args=--x86-asm-syntax=intel
+
+#![feature(no_core, lang_items)]
+#![crate_type = "lib"]
+#![no_core]
+
+#[lang = "sized"]
+trait Sized {}
+#[lang = "copy"]
+trait Copy {}
+
+impl Copy for u8 {}
+
+// Check that inline-asm stack probes are generated correctly.
+// To avoid making this test fragile to slight asm changes,
+// we only check that the stack pointer is decremented by a page at a time,
+// instead of matching the whole probe sequence.
+
+// CHECK-LABEL: small_stack_probe:
+#[no_mangle]
+pub fn small_stack_probe(x: u8, f: fn([u8; 8192])) {
+    // CHECK-NOT: __rust_probestack
+    // x86_64: sub rsp, 4096
+    // i686: sub esp, 4096
+    let a = [x; 8192];
+    f(a);
+}
+
+// CHECK-LABEL: big_stack_probe:
+#[no_mangle]
+pub fn big_stack_probe(x: u8, f: fn([u8; 65536])) {
+    // CHECK-NOT: __rust_probestack
+    // x86_64: sub rsp, 4096
+    // i686: sub esp, 4096
+    let a = [x; 65536];
+    f(a);
+}
diff --git a/src/test/codegen/stack-probes.rs b/src/test/codegen/stack-probes.rs
index 3e3222d4735..b05787df8e3 100644
--- a/src/test/codegen/stack-probes.rs
+++ b/src/test/codegen/stack-probes.rs
@@ -13,11 +13,12 @@
 // ignore-emscripten
 // ignore-windows
 // compile-flags: -C no-prepopulate-passes
+// min-llvm-version: 11.0.1
 
 #![crate_type = "lib"]
 
 #[no_mangle]
 pub fn foo() {
 // CHECK: @foo() unnamed_addr #0
-// CHECK: attributes #0 = { {{.*}}"probe-stack"="__rust_probestack"{{.*}} }
+// CHECK: attributes #0 = { {{.*}}"probe-stack"="inline-asm"{{.*}} }
 }