]> git.lizzy.rs Git - rust.git/blob - src/librustc_target/spec/x86_64_fortanix_unknown_sgx.rs
Auto merge of #55519 - fhartwig:hashmap-index-example, r=Centril
[rust.git] / src / librustc_target / spec / x86_64_fortanix_unknown_sgx.rs
1 use std::iter;
2
3 use super::{LinkerFlavor, PanicStrategy, Target, TargetOptions};
4
5 pub fn target() -> Result<Target, String> {
6     const PRE_LINK_ARGS: &[&str] = &[
7         "-Wl,--as-needed",
8         "-Wl,-z,noexecstack",
9         "-m64",
10         "-fuse-ld=gold",
11         "-nostdlib",
12         "-shared",
13         "-Wl,-e,sgx_entry",
14         "-Wl,-Bstatic",
15         "-Wl,--gc-sections",
16         "-Wl,-z,text",
17         "-Wl,-z,norelro",
18         "-Wl,--rosegment",
19         "-Wl,--no-undefined",
20         "-Wl,--error-unresolved-symbols",
21         "-Wl,--no-undefined-version",
22         "-Wl,-Bsymbolic",
23         "-Wl,--export-dynamic",
24     ];
25
26     const EXPORT_SYMBOLS: &[&str] = &[
27         "sgx_entry",
28         "HEAP_BASE",
29         "HEAP_SIZE",
30         "RELA",
31         "RELACOUNT",
32         "ENCLAVE_SIZE",
33         "CFGDATA_BASE",
34         "DEBUG",
35         "EH_FRM_HDR_BASE",
36         "EH_FRM_HDR_SIZE",
37         "TEXT_BASE",
38         "TEXT_SIZE",
39     ];
40     let opts = TargetOptions {
41         dynamic_linking: false,
42         executables: true,
43         linker_is_gnu: true,
44         max_atomic_width: Some(64),
45         panic_strategy: PanicStrategy::Unwind,
46         cpu: "x86-64".into(),
47         features: "+rdrnd,+rdseed".into(),
48         position_independent_executables: true,
49         pre_link_args: iter::once((
50             LinkerFlavor::Gcc,
51             PRE_LINK_ARGS.iter().cloned().map(String::from).collect(),
52         ))
53         .collect(),
54         post_link_objects: vec!["libunwind.a".into()],
55         override_export_symbols: Some(EXPORT_SYMBOLS.iter().cloned().map(String::from).collect()),
56         ..Default::default()
57     };
58     Ok(Target {
59         llvm_target: "x86_64-unknown-linux-gnu".into(),
60         target_endian: "little".into(),
61         target_pointer_width: "64".into(),
62         target_c_int_width: "32".into(),
63         target_os: "unknown".into(),
64         target_env: "sgx".into(),
65         target_vendor: "fortanix".into(),
66         data_layout: "e-m:e-i64:64-f80:128-n8:16:32:64-S128".into(),
67         arch: "x86_64".into(),
68         linker_flavor: LinkerFlavor::Gcc,
69         options: opts,
70     })
71 }