]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_target/src/spec/x86_64_fortanix_unknown_sgx.rs
Merge commit '7b73b60faca71d01d900e49831fcb84553e93019' into sync-rustfmt
[rust.git] / compiler / rustc_target / src / spec / x86_64_fortanix_unknown_sgx.rs
1 use std::{borrow::Cow, iter};
2
3 use crate::spec::cvs;
4
5 use super::{LinkerFlavor, LldFlavor, Target, TargetOptions};
6
7 pub fn target() -> Target {
8     const PRE_LINK_ARGS: &[&str] = &[
9         "-e",
10         "elf_entry",
11         "-Bstatic",
12         "--gc-sections",
13         "-z",
14         "text",
15         "-z",
16         "norelro",
17         "--no-undefined",
18         "--error-unresolved-symbols",
19         "--no-undefined-version",
20         "-Bsymbolic",
21         "--export-dynamic",
22         // The following symbols are needed by libunwind, which is linked after
23         // libstd. Make sure they're included in the link.
24         "-u",
25         "__rust_abort",
26         "-u",
27         "__rust_c_alloc",
28         "-u",
29         "__rust_c_dealloc",
30         "-u",
31         "__rust_print_err",
32         "-u",
33         "__rust_rwlock_rdlock",
34         "-u",
35         "__rust_rwlock_unlock",
36         "-u",
37         "__rust_rwlock_wrlock",
38     ];
39
40     const EXPORT_SYMBOLS: &[&str] = &[
41         "sgx_entry",
42         "HEAP_BASE",
43         "HEAP_SIZE",
44         "RELA",
45         "RELACOUNT",
46         "ENCLAVE_SIZE",
47         "CFGDATA_BASE",
48         "DEBUG",
49         "EH_FRM_HDR_OFFSET",
50         "EH_FRM_HDR_LEN",
51         "EH_FRM_OFFSET",
52         "EH_FRM_LEN",
53         "TEXT_BASE",
54         "TEXT_SIZE",
55     ];
56     let opts = TargetOptions {
57         os: "unknown".into(),
58         env: "sgx".into(),
59         vendor: "fortanix".into(),
60         abi: "fortanix".into(),
61         linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
62         executables: true,
63         linker: Some("rust-lld".into()),
64         max_atomic_width: Some(64),
65         cpu: "x86-64".into(),
66         features: "+rdrnd,+rdseed,+lvi-cfi,+lvi-load-hardening".into(),
67         llvm_args: cvs!["--x86-experimental-lvi-inline-asm-hardening"],
68         position_independent_executables: true,
69         pre_link_args: iter::once((
70             LinkerFlavor::Lld(LldFlavor::Ld),
71             PRE_LINK_ARGS.iter().cloned().map(Cow::from).collect(),
72         ))
73         .collect(),
74         override_export_symbols: Some(EXPORT_SYMBOLS.iter().cloned().map(Cow::from).collect()),
75         relax_elf_relocations: true,
76         ..Default::default()
77     };
78     Target {
79         llvm_target: "x86_64-elf".into(),
80         pointer_width: 64,
81         data_layout: "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
82             .into(),
83         arch: "x86_64".into(),
84         options: opts,
85     }
86 }