Enable inline stack probes on X86 with LLVM 16

This commit is contained in:
Josh Stone 2022-09-29 19:13:30 -07:00
parent 1bb8d276c9
commit ed9e6f2ad8
36 changed files with 87 additions and 65 deletions

View file

@ -0,0 +1,42 @@
// min-llvm-version: 16
// revisions: x86_64 i686
// assembly-output: emit-asm
//[x86_64] compile-flags: --target x86_64-unknown-linux-gnu
//[x86_64] needs-llvm-components: x86
//[i686] compile-flags: --target i686-unknown-linux-gnu
//[i686] needs-llvm-components: x86
// 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(&mut [u8; 8192])) {
// CHECK-NOT: __rust_probestack
// x86_64: sub rsp, 4096
// i686: sub esp, 4096
f(&mut [x; 8192]);
}
// 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
f(&mut [x; 65536]);
}

View file

@ -5,8 +5,10 @@
// revisions: i686 x86_64
//[i686] compile-flags: --target i686-unknown-linux-gnu
//[i686] needs-llvm-components: x86
//[i686] ignore-llvm-version: 16 - 99
//[x86_64] compile-flags: --target x86_64-unknown-linux-gnu
//[x86_64] needs-llvm-components: x86
//[x86_64] ignore-llvm-version: 16 - 99
#![crate_type = "rlib"]
#![feature(no_core, lang_items)]

View file

@ -2,7 +2,7 @@
// or `StackProbeType::InlineOrCall` when running on newer LLVM.
// compile-flags: -C no-prepopulate-passes
// revisions: powerpc powerpc64 powerpc64le s390x
// revisions: powerpc powerpc64 powerpc64le s390x i686 x86_64
//[powerpc] compile-flags: --target powerpc-unknown-linux-gnu
//[powerpc] needs-llvm-components: powerpc
//[powerpc64] compile-flags: --target powerpc64-unknown-linux-gnu
@ -11,6 +11,12 @@
//[powerpc64le] needs-llvm-components: powerpc
//[s390x] compile-flags: --target s390x-unknown-linux-gnu
//[s390x] needs-llvm-components: systemz
//[i686] compile-flags: --target i686-unknown-linux-gnu
//[i686] needs-llvm-components: x86
//[i686] min-llvm-version: 16
//[x86_64] compile-flags: --target x86_64-unknown-linux-gnu
//[x86_64] needs-llvm-components: x86
//[x86_64] min-llvm-version: 16
#![crate_type = "rlib"]
#![feature(no_core, lang_items)]