Auto merge of #83412 - pnkfelix:stable-revert-effect-of-pr-77885-for-issue-83139, r=nagisa

[stable] probe-stack=call everywhere again, for now.

To buy time on issue 83139, revert effect of PR 77885: We will not conditionally
enable probe-stack=inline-asm on LLVM 11+ anymore on any of our targets that
opted into doing so on PR #77885 (and were subsequently configured to do so in a
fine grained manner on PR #80838).

After we resolve 83139 (potentially by backporting a fix to LLVM, or potentially
by deciding that one cannot rely on the quality of our DWARF output in the
manner described in issue 83139), we can change this back.

cc #83139
This commit is contained in:
bors 2021-03-23 16:14:31 +00:00
commit 2fd73fabe4
33 changed files with 64 additions and 75 deletions

View file

@ -12,7 +12,8 @@ pub fn target() -> Target {
arch: "x86".to_string(), arch: "x86".to_string(),
options: TargetOptions { options: TargetOptions {
max_atomic_width: Some(64), max_atomic_width: Some(64),
stack_probes: StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }, // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
stack_probes: StackProbeType::Call,
..base ..base
}, },
} }

View file

@ -6,7 +6,8 @@ pub fn target() -> Target {
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-m32".to_string()]); base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-m32".to_string()]);
base.link_env_remove.extend(super::apple_base::macos_link_env_remove()); base.link_env_remove.extend(super::apple_base::macos_link_env_remove());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
base.eliminate_frame_pointer = false; base.eliminate_frame_pointer = false;
// Clang automatically chooses a more specific target based on // Clang automatically chooses a more specific target based on

View file

@ -11,7 +11,8 @@ pub fn target() -> Target {
// http://developer.android.com/ndk/guides/abis.html#x86 // http://developer.android.com/ndk/guides/abis.html#x86
base.cpu = "pentiumpro".to_string(); base.cpu = "pentiumpro".to_string();
base.features = "+mmx,+sse,+sse2,+sse3,+ssse3".to_string(); base.features = "+mmx,+sse,+sse2,+sse3,+ssse3".to_string();
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "i686-linux-android".to_string(), llvm_target: "i686-linux-android".to_string(),

View file

@ -7,7 +7,9 @@ pub fn target() -> Target {
let pre_link_args = base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap(); let pre_link_args = base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap();
pre_link_args.push("-m32".to_string()); pre_link_args.push("-m32".to_string());
pre_link_args.push("-Wl,-znotext".to_string()); pre_link_args.push("-Wl,-znotext".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) };
// don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "i686-unknown-freebsd".to_string(), llvm_target: "i686-unknown-freebsd".to_string(),

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "pentium4".to_string(); base.cpu = "pentium4".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-m32".to_string()]); base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-m32".to_string()]);
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "i686-unknown-haiku".to_string(), llvm_target: "i686-unknown-haiku".to_string(),

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "pentium4".to_string(); base.cpu = "pentium4".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m32".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m32".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "i686-unknown-linux-gnu".to_string(), llvm_target: "i686-unknown-linux-gnu".to_string(),

View file

@ -6,7 +6,8 @@ pub fn target() -> Target {
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m32".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m32".to_string());
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,-melf_i386".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-Wl,-melf_i386".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
// The unwinder used by i686-unknown-linux-musl, the LLVM libunwind // The unwinder used by i686-unknown-linux-musl, the LLVM libunwind
// implementation, apparently relies on frame pointers existing... somehow. // implementation, apparently relies on frame pointers existing... somehow.

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "pentium4".to_string(); base.cpu = "pentium4".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m32".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m32".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "i686-unknown-netbsdelf".to_string(), llvm_target: "i686-unknown-netbsdelf".to_string(),

View file

@ -6,7 +6,8 @@ pub fn target() -> Target {
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m32".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m32".to_string());
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-fuse-ld=lld".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-fuse-ld=lld".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "i686-unknown-openbsd".to_string(), llvm_target: "i686-unknown-openbsd".to_string(),

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "pentium4".to_string(); base.cpu = "pentium4".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m32".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m32".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "i686-unknown-linux-gnu".to_string(), llvm_target: "i686-unknown-linux-gnu".to_string(),

View file

@ -13,7 +13,8 @@ pub fn opts() -> TargetOptions {
env: "gnu".to_string(), env: "gnu".to_string(),
disable_redzone: true, disable_redzone: true,
panic_strategy: PanicStrategy::Abort, panic_strategy: PanicStrategy::Abort,
stack_probes: StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }, // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
stack_probes: StackProbeType::Call,
eliminate_frame_pointer: false, eliminate_frame_pointer: false,
linker_is_gnu: true, linker_is_gnu: true,
position_independent_executables: true, position_independent_executables: true,

View file

@ -10,7 +10,8 @@ pub fn target() -> Target {
vec!["-m64".to_string(), "-arch".to_string(), "x86_64".to_string()], vec!["-m64".to_string(), "-arch".to_string(), "x86_64".to_string()],
); );
base.link_env_remove.extend(super::apple_base::macos_link_env_remove()); base.link_env_remove.extend(super::apple_base::macos_link_env_remove());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
// Clang automatically chooses a more specific target based on // Clang automatically chooses a more specific target based on
// MACOSX_DEPLOYMENT_TARGET. To enable cross-language LTO to work // MACOSX_DEPLOYMENT_TARGET. To enable cross-language LTO to work

View file

@ -11,7 +11,8 @@ pub fn target() -> Target {
arch: "x86_64".to_string(), arch: "x86_64".to_string(),
options: TargetOptions { options: TargetOptions {
max_atomic_width: Some(64), max_atomic_width: Some(64),
stack_probes: StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }, // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
stack_probes: StackProbeType::Call,
..base ..base
}, },
} }

View file

@ -11,7 +11,8 @@ pub fn target() -> Target {
arch: "x86_64".to_string(), arch: "x86_64".to_string(),
options: TargetOptions { options: TargetOptions {
max_atomic_width: Some(64), max_atomic_width: Some(64),
stack_probes: StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }, // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
stack_probes: StackProbeType::Call,
..base ..base
}, },
} }

View file

@ -10,7 +10,8 @@ pub fn target() -> Target {
arch: "x86_64".to_string(), arch: "x86_64".to_string(),
options: TargetOptions { options: TargetOptions {
max_atomic_width: Some(64), max_atomic_width: Some(64),
stack_probes: StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }, // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
stack_probes: StackProbeType::Call,
..base ..base
}, },
} }

View file

@ -4,7 +4,8 @@ pub fn target() -> Target {
let mut base = super::fuchsia_base::opts(); let mut base = super::fuchsia_base::opts();
base.cpu = "x86-64".to_string(); base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "x86_64-fuchsia".to_string(), llvm_target: "x86_64-fuchsia".to_string(),

View file

@ -7,7 +7,8 @@ pub fn target() -> Target {
base.features = "+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt".to_string(); base.features = "+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "x86_64-linux-android".to_string(), llvm_target: "x86_64-linux-android".to_string(),

View file

@ -12,7 +12,8 @@ pub fn target() -> Target {
base.has_rpath = false; base.has_rpath = false;
base.position_independent_executables = false; base.position_independent_executables = false;
base.disable_redzone = true; base.disable_redzone = true;
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "x86_64-rumprun-netbsd".to_string(), llvm_target: "x86_64-rumprun-netbsd".to_string(),

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-m64".to_string()]); base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-m64".to_string()]);
base.cpu = "x86-64".to_string(); base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "x86_64-pc-solaris".to_string(), llvm_target: "x86_64-pc-solaris".to_string(),

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "x86-64".to_string(); base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "x86_64-unknown-dragonfly".to_string(), llvm_target: "x86_64-unknown-dragonfly".to_string(),

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "x86-64".to_string(); base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "x86_64-unknown-freebsd".to_string(), llvm_target: "x86_64-unknown-freebsd".to_string(),

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "x86-64".to_string(); base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-m64".to_string()]); base.pre_link_args.insert(LinkerFlavor::Gcc, vec!["-m64".to_string()]);
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
// This option is required to build executables on Haiku x86_64 // This option is required to build executables on Haiku x86_64
base.position_independent_executables = true; base.position_independent_executables = true;

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "x86-64".to_string(); base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.features = "+rdrnd,+rdseed".to_string(); base.features = "+rdrnd,+rdseed".to_string();
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "x86_64-unknown-hermit".to_string(), llvm_target: "x86_64-unknown-hermit".to_string(),

View file

@ -7,7 +7,8 @@ pub fn target() -> Target {
base.features = base.features =
"-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float" "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float"
.to_string(); .to_string();
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "x86_64-unknown-hermit".to_string(), llvm_target: "x86_64-unknown-hermit".to_string(),

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "x86-64".to_string(); base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "x86_64-unknown-linux-gnu".to_string(), llvm_target: "x86_64-unknown-linux-gnu".to_string(),

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "x86-64".to_string(); base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-mx32".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-mx32".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
base.has_elf_tls = false; base.has_elf_tls = false;
// BUG(GabrielMajeri): disabling the PLT on x86_64 Linux with x32 ABI // BUG(GabrielMajeri): disabling the PLT on x86_64 Linux with x32 ABI
// breaks code gen. See LLVM bug 36743 // breaks code gen. See LLVM bug 36743

View file

@ -5,7 +5,9 @@ pub fn target() -> Target {
base.cpu = "x86-64".to_string(); base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
base.static_position_independent_executables = true; base.static_position_independent_executables = true;
Target { Target {

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "x86-64".to_string(); base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "x86_64-unknown-netbsd".to_string(), llvm_target: "x86_64-unknown-netbsd".to_string(),

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "x86-64".to_string(); base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "x86_64-unknown-openbsd".to_string(), llvm_target: "x86_64-unknown-openbsd".to_string(),

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "x86-64".to_string(); base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
Target { Target {
llvm_target: "x86_64-unknown-redox".to_string(), llvm_target: "x86_64-unknown-redox".to_string(),

View file

@ -5,7 +5,8 @@ pub fn target() -> Target {
base.cpu = "x86-64".to_string(); base.cpu = "x86-64".to_string();
base.max_atomic_width = Some(64); base.max_atomic_width = Some(64);
base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string()); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string());
base.stack_probes = StackProbeType::InlineOrCall { min_llvm_version_for_inline: (11, 0, 1) }; // don't use probe-stack=inline-asm until rust-lang/rust#83139 is resolved.
base.stack_probes = StackProbeType::Call;
base.disable_redzone = true; base.disable_redzone = true;
Target { Target {

View file

@ -1,42 +0,0 @@
// 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);
}

View file

@ -13,12 +13,10 @@
// ignore-emscripten // ignore-emscripten
// ignore-windows // ignore-windows
// compile-flags: -C no-prepopulate-passes // compile-flags: -C no-prepopulate-passes
// min-llvm-version: 11.0.1
#![crate_type = "lib"] #![crate_type = "lib"]
#[no_mangle] #[no_mangle]
pub fn foo() { pub fn foo() {
// CHECK: @foo() unnamed_addr #0 // CHECK: @foo() unnamed_addr #0
// CHECK: attributes #0 = { {{.*}}"probe-stack"="inline-asm"{{.*}} }
} }