3 use super::{LinkerFlavor, LldFlavor, PanicStrategy, Target, TargetOptions};
5 pub fn target() -> Target {
6 const PRE_LINK_ARGS: &[&str] = &[
16 "--error-unresolved-symbols",
17 "--no-undefined-version",
20 // The following symbols are needed by libunwind, which is linked after
21 // libstd. Make sure they're included in the link.
31 "__rust_rwlock_rdlock",
33 "__rust_rwlock_unlock",
35 "__rust_rwlock_wrlock",
38 const EXPORT_SYMBOLS: &[&str] = &[
54 let opts = TargetOptions {
57 vendor: "fortanix".into(),
58 linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
59 dynamic_linking: false,
62 linker: Some("rust-lld".to_owned()),
63 max_atomic_width: Some(64),
64 panic_strategy: PanicStrategy::Unwind,
66 features: "+rdrnd,+rdseed,+lvi-cfi,+lvi-load-hardening".into(),
67 llvm_args: vec!["--x86-experimental-lvi-inline-asm-hardening".into()],
68 position_independent_executables: true,
69 pre_link_args: iter::once((
70 LinkerFlavor::Lld(LldFlavor::Ld),
71 PRE_LINK_ARGS.iter().cloned().map(String::from).collect(),
74 override_export_symbols: Some(EXPORT_SYMBOLS.iter().cloned().map(String::from).collect()),
75 relax_elf_relocations: true,
79 llvm_target: "x86_64-elf".into(),
81 data_layout: "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
83 arch: "x86_64".into(),