Skip to content

Commit e6d1b0e

Browse files
committed
Auto merge of rust-lang#118491 - cuviper:aarch64-stack-probes, r=wesleywiser
Enable stack probes on aarch64 for LLVM 18 I tested this on `aarch64-unknown-linux-gnu` with LLVM main (~18). cc rust-lang#77071, to be closed once we upgrade our LLVM submodule.
2 parents 5f73b00 + 233de9d commit e6d1b0e

33 files changed

+86
-65
lines changed

compiler/rustc_target/src/spec/base/apple/mod.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use std::{borrow::Cow, env};
22

33
use crate::spec::{add_link_args, add_link_args_iter};
4-
use crate::spec::{cvs, Cc, DebuginfoKind, FramePointer, LinkArgs};
5-
use crate::spec::{LinkerFlavor, Lld, SplitDebuginfo, StaticCow, Target, TargetOptions};
4+
use crate::spec::{cvs, Cc, DebuginfoKind, FramePointer, LinkArgs, LinkerFlavor, Lld};
5+
use crate::spec::{SplitDebuginfo, StackProbeType, StaticCow, Target, TargetOptions};
66

77
#[cfg(test)]
88
mod tests;
@@ -81,6 +81,14 @@ impl Arch {
8181
Arm64_sim => "apple-a12",
8282
}
8383
}
84+
85+
fn stack_probes(self) -> StackProbeType {
86+
match self {
87+
Armv7k | Armv7s => StackProbeType::None,
88+
Arm64 | Arm64e | Arm64_32 | I386 | I686 | X86_64 | X86_64h | X86_64_sim
89+
| X86_64_macabi | Arm64_macabi | Arm64_sim => StackProbeType::Inline,
90+
}
91+
}
8492
}
8593

8694
fn pre_link_args(os: &'static str, arch: Arch, abi: &'static str) -> LinkArgs {
@@ -147,6 +155,7 @@ pub fn opts(os: &'static str, arch: Arch) -> TargetOptions {
147155
abi_return_struct_as_int: true,
148156
emit_debug_gdb_scripts: false,
149157
eh_frame_header: false,
158+
stack_probes: arch.stack_probes(),
150159

151160
debuginfo_kind: DebuginfoKind::DwarfDsym,
152161
// The historical default for macOS targets is to run `dsymutil` which

compiler/rustc_target/src/spec/targets/aarch64_be_unknown_linux_gnu.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::abi::Endian;
2-
use crate::spec::{base, Target, TargetOptions};
2+
use crate::spec::{base, StackProbeType, Target, TargetOptions};
33

44
pub fn target() -> Target {
55
Target {
@@ -10,6 +10,7 @@ pub fn target() -> Target {
1010
options: TargetOptions {
1111
features: "+v8a,+outline-atomics".into(),
1212
max_atomic_width: Some(128),
13+
stack_probes: StackProbeType::Inline,
1314
mcount: "\u{1}_mcount".into(),
1415
endian: Endian::Big,
1516
..base::linux_gnu::opts()

compiler/rustc_target/src/spec/targets/aarch64_be_unknown_linux_gnu_ilp32.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::abi::Endian;
2-
use crate::spec::{base, Target, TargetOptions};
2+
use crate::spec::{base, StackProbeType, Target, TargetOptions};
33

44
pub fn target() -> Target {
55
let mut base = base::linux_gnu::opts();
@@ -13,6 +13,7 @@ pub fn target() -> Target {
1313
options: TargetOptions {
1414
abi: "ilp32".into(),
1515
features: "+v8a,+outline-atomics".into(),
16+
stack_probes: StackProbeType::Inline,
1617
mcount: "\u{1}_mcount".into(),
1718
endian: Endian::Big,
1819
..base

compiler/rustc_target/src/spec/targets/aarch64_be_unknown_netbsd.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::abi::Endian;
2-
use crate::spec::{base, Target, TargetOptions};
2+
use crate::spec::{base, StackProbeType, Target, TargetOptions};
33

44
pub fn target() -> Target {
55
Target {
@@ -10,6 +10,7 @@ pub fn target() -> Target {
1010
options: TargetOptions {
1111
mcount: "__mcount".into(),
1212
max_atomic_width: Some(128),
13+
stack_probes: StackProbeType::Inline,
1314
endian: Endian::Big,
1415
..base::netbsd::opts()
1516
},

compiler/rustc_target/src/spec/targets/aarch64_kmc_solid_asp3.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{base, RelocModel, Target, TargetOptions};
1+
use crate::spec::{base, RelocModel, StackProbeType, Target, TargetOptions};
22

33
pub fn target() -> Target {
44
let base = base::solid::opts("asp3");
@@ -13,6 +13,7 @@ pub fn target() -> Target {
1313
relocation_model: RelocModel::Static,
1414
disable_redzone: true,
1515
max_atomic_width: Some(128),
16+
stack_probes: StackProbeType::Inline,
1617
..base
1718
},
1819
}

compiler/rustc_target/src/spec/targets/aarch64_linux_android.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{base, SanitizerSet, Target, TargetOptions};
1+
use crate::spec::{base, SanitizerSet, StackProbeType, Target, TargetOptions};
22

33
// See https://developer.android.com/ndk/guides/abis.html#arm64-v8a
44
// for target ABI requirements.
@@ -14,6 +14,7 @@ pub fn target() -> Target {
1414
// As documented in https://developer.android.com/ndk/guides/cpu-features.html
1515
// the neon (ASIMD) and FP must exist on all android aarch64 targets.
1616
features: "+v8a,+neon,+fp-armv8".into(),
17+
stack_probes: StackProbeType::Inline,
1718
supported_sanitizers: SanitizerSet::CFI
1819
| SanitizerSet::HWADDRESS
1920
| SanitizerSet::MEMTAG

compiler/rustc_target/src/spec/targets/aarch64_nintendo_switch_freestanding.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelroLevel, Target, TargetOptions};
1+
use crate::spec::{
2+
Cc, LinkerFlavor, Lld, PanicStrategy, RelroLevel, StackProbeType, Target, TargetOptions,
3+
};
24

35
const LINKER_SCRIPT: &str = include_str!("./aarch64_nintendo_switch_freestanding_linker_script.ld");
46

@@ -16,6 +18,7 @@ pub fn target() -> Target {
1618
link_script: Some(LINKER_SCRIPT.into()),
1719
os: "horizon".into(),
1820
max_atomic_width: Some(128),
21+
stack_probes: StackProbeType::Inline,
1922
panic_strategy: PanicStrategy::Abort,
2023
position_independent_executables: true,
2124
dynamic_linking: true,

compiler/rustc_target/src/spec/targets/aarch64_unknown_freebsd.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{base, SanitizerSet, Target, TargetOptions};
1+
use crate::spec::{base, SanitizerSet, StackProbeType, Target, TargetOptions};
22

33
pub fn target() -> Target {
44
Target {
@@ -9,6 +9,7 @@ pub fn target() -> Target {
99
options: TargetOptions {
1010
features: "+v8a".into(),
1111
max_atomic_width: Some(128),
12+
stack_probes: StackProbeType::Inline,
1213
supported_sanitizers: SanitizerSet::ADDRESS
1314
| SanitizerSet::CFI
1415
| SanitizerSet::MEMORY

compiler/rustc_target/src/spec/targets/aarch64_unknown_fuchsia.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{base, SanitizerSet, Target, TargetOptions};
1+
use crate::spec::{base, SanitizerSet, StackProbeType, Target, TargetOptions};
22

33
pub fn target() -> Target {
44
Target {
@@ -9,6 +9,7 @@ pub fn target() -> Target {
99
options: TargetOptions {
1010
features: "+v8a".into(),
1111
max_atomic_width: Some(128),
12+
stack_probes: StackProbeType::Inline,
1213
supported_sanitizers: SanitizerSet::ADDRESS
1314
| SanitizerSet::CFI
1415
| SanitizerSet::SHADOWCALLSTACK,

compiler/rustc_target/src/spec/targets/aarch64_unknown_hermit.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{base, Target, TargetOptions};
1+
use crate::spec::{base, StackProbeType, Target, TargetOptions};
22

33
pub fn target() -> Target {
44
Target {
@@ -9,6 +9,7 @@ pub fn target() -> Target {
99
options: TargetOptions {
1010
features: "+v8a,+strict-align,+neon,+fp-armv8".into(),
1111
max_atomic_width: Some(128),
12+
stack_probes: StackProbeType::Inline,
1213
..base::hermit::opts()
1314
},
1415
}

0 commit comments

Comments
 (0)