compiler: set Apple frame pointers by architecture
Apple targets can now overriding this configuration and instead use the default based on their architecture, which means aarch64 targets now have less frame pointers in leaf functions.
This commit is contained in:
parent
15825b7161
commit
b25aa26298
16 changed files with 23 additions and 36 deletions
|
|
@ -124,7 +124,13 @@ pub(crate) fn base(
|
|||
// to v4, so we do the same.
|
||||
// https://github.com/llvm/llvm-project/blob/378778a0d10c2f8d5df8ceff81f95b6002984a4b/clang/lib/Driver/ToolChains/Darwin.cpp#L1203
|
||||
default_dwarf_version: 4,
|
||||
frame_pointer: FramePointer::Always,
|
||||
frame_pointer: match arch {
|
||||
// clang ignores `-fomit-frame-pointer` for Armv7, it only accepts `-momit-leaf-frame-pointer`
|
||||
Armv7k | Armv7s => FramePointer::Always,
|
||||
// clang supports omitting frame pointers for the rest, but... don't?
|
||||
Arm64 | Arm64e | Arm64_32 => FramePointer::NonLeaf,
|
||||
I386 | I686 | X86_64 | X86_64h => FramePointer::Always,
|
||||
},
|
||||
has_rpath: true,
|
||||
dll_suffix: ".dylib".into(),
|
||||
archive_format: "darwin".into(),
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("macos", Arch::Arm64, TargetAbi::Normal);
|
||||
|
|
@ -17,7 +17,6 @@ pub(crate) fn target() -> Target {
|
|||
arch,
|
||||
options: TargetOptions {
|
||||
mcount: "\u{1}mcount".into(),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
cpu: "apple-m1".into(),
|
||||
max_atomic_width: Some(128),
|
||||
// FIXME: The leak sanitizer currently fails the tests, see #88132.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("ios", Arch::Arm64, TargetAbi::Normal);
|
||||
|
|
@ -18,7 +18,6 @@ pub(crate) fn target() -> Target {
|
|||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+apple-a7".into(),
|
||||
max_atomic_width: Some(128),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
supported_sanitizers: SanitizerSet::ADDRESS | SanitizerSet::THREAD,
|
||||
..opts
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("ios", Arch::Arm64, TargetAbi::MacCatalyst);
|
||||
|
|
@ -18,7 +18,6 @@ pub(crate) fn target() -> Target {
|
|||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+apple-a12".into(),
|
||||
max_atomic_width: Some(128),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
supported_sanitizers: SanitizerSet::ADDRESS | SanitizerSet::LEAK | SanitizerSet::THREAD,
|
||||
..opts
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("ios", Arch::Arm64, TargetAbi::Simulator);
|
||||
|
|
@ -18,7 +18,6 @@ pub(crate) fn target() -> Target {
|
|||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+apple-a7".into(),
|
||||
max_atomic_width: Some(128),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
supported_sanitizers: SanitizerSet::ADDRESS | SanitizerSet::THREAD,
|
||||
..opts
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("tvos", Arch::Arm64, TargetAbi::Normal);
|
||||
|
|
@ -18,7 +18,6 @@ pub(crate) fn target() -> Target {
|
|||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+apple-a7".into(),
|
||||
max_atomic_width: Some(128),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
..opts
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("tvos", Arch::Arm64, TargetAbi::Simulator);
|
||||
|
|
@ -18,7 +18,6 @@ pub(crate) fn target() -> Target {
|
|||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+apple-a7".into(),
|
||||
max_atomic_width: Some(128),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
..opts
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("visionos", Arch::Arm64, TargetAbi::Normal);
|
||||
|
|
@ -18,7 +18,6 @@ pub(crate) fn target() -> Target {
|
|||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+apple-a16".into(),
|
||||
max_atomic_width: Some(128),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
supported_sanitizers: SanitizerSet::ADDRESS | SanitizerSet::THREAD,
|
||||
..opts
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("visionos", Arch::Arm64, TargetAbi::Simulator);
|
||||
|
|
@ -18,7 +18,6 @@ pub(crate) fn target() -> Target {
|
|||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+apple-a16".into(),
|
||||
max_atomic_width: Some(128),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
supported_sanitizers: SanitizerSet::ADDRESS | SanitizerSet::THREAD,
|
||||
..opts
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("watchos", Arch::Arm64, TargetAbi::Simulator);
|
||||
|
|
@ -18,7 +18,6 @@ pub(crate) fn target() -> Target {
|
|||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+apple-a7".into(),
|
||||
max_atomic_width: Some(128),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
..opts
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("macos", Arch::Arm64e, TargetAbi::Normal);
|
||||
|
|
@ -17,7 +17,6 @@ pub(crate) fn target() -> Target {
|
|||
arch,
|
||||
options: TargetOptions {
|
||||
mcount: "\u{1}mcount".into(),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
cpu: "apple-m1".into(),
|
||||
max_atomic_width: Some(128),
|
||||
// FIXME: The leak sanitizer currently fails the tests, see #88132.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("ios", Arch::Arm64e, TargetAbi::Normal);
|
||||
|
|
@ -18,7 +18,6 @@ pub(crate) fn target() -> Target {
|
|||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+apple-a12,+v8.3a,+pauth".into(),
|
||||
max_atomic_width: Some(128),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
supported_sanitizers: SanitizerSet::ADDRESS | SanitizerSet::THREAD,
|
||||
..opts
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("tvos", Arch::Arm64e, TargetAbi::Normal);
|
||||
|
|
@ -18,7 +18,6 @@ pub(crate) fn target() -> Target {
|
|||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+apple-a12,+v8.3a,+pauth".into(),
|
||||
max_atomic_width: Some(128),
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
..opts
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("macos", Arch::I686, TargetAbi::Normal);
|
||||
|
|
@ -16,11 +16,6 @@ pub(crate) fn target() -> Target {
|
|||
i128:128-f64:32:64-f80:128-n8:16:32-S128"
|
||||
.into(),
|
||||
arch,
|
||||
options: TargetOptions {
|
||||
mcount: "\u{1}mcount".into(),
|
||||
max_atomic_width: Some(64),
|
||||
frame_pointer: FramePointer::Always,
|
||||
..opts
|
||||
},
|
||||
options: TargetOptions { mcount: "\u{1}mcount".into(), max_atomic_width: Some(64), ..opts },
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (opts, llvm_target, arch) = base("macos", Arch::X86_64, TargetAbi::Normal);
|
||||
|
|
@ -18,7 +18,6 @@ pub(crate) fn target() -> Target {
|
|||
options: TargetOptions {
|
||||
mcount: "\u{1}mcount".into(),
|
||||
max_atomic_width: Some(128), // penryn+ supports cmpxchg16b
|
||||
frame_pointer: FramePointer::Always,
|
||||
supported_sanitizers: SanitizerSet::ADDRESS
|
||||
| SanitizerSet::CFI
|
||||
| SanitizerSet::LEAK
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
use crate::spec::base::apple::{Arch, TargetAbi, base};
|
||||
use crate::spec::{FramePointer, SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
use crate::spec::{SanitizerSet, Target, TargetMetadata, TargetOptions};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let (mut opts, llvm_target, arch) = base("macos", Arch::X86_64h, TargetAbi::Normal);
|
||||
opts.max_atomic_width = Some(128);
|
||||
opts.frame_pointer = FramePointer::Always;
|
||||
opts.supported_sanitizers =
|
||||
SanitizerSet::ADDRESS | SanitizerSet::CFI | SanitizerSet::LEAK | SanitizerSet::THREAD;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue