diff options
| author | Erik Desjardins <erikdesjardins@users.noreply.github.com> | 2020-10-12 22:33:27 -0400 |
|---|---|---|
| committer | Erik Desjardins <erikdesjardins@users.noreply.github.com> | 2021-01-14 22:49:16 -0500 |
| commit | cd2580722375671fa2967661f65b7b33570547ec (patch) | |
| tree | 2a7c80c04b77f40691edd1da05e0d54e0930873f /src | |
| parent | e38fb306b7f5e65cca34df2dab1f0db15e1defb4 (diff) | |
| download | rust-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.rs | 42 | ||||
| -rw-r--r-- | src/test/codegen/stack-probes.rs | 3 |
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"{{.*}} } } |
