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