summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_target/src/spec/base/teeos.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_target/src/spec/base/teeos.rs')
-rw-r--r--compiler/rustc_target/src/spec/base/teeos.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/compiler/rustc_target/src/spec/base/teeos.rs b/compiler/rustc_target/src/spec/base/teeos.rs
new file mode 100644
index 000000000..38d0a6d73
--- /dev/null
+++ b/compiler/rustc_target/src/spec/base/teeos.rs
@@ -0,0 +1,28 @@
+use crate::spec::{add_link_args, Cc, LinkerFlavor, Lld, PanicStrategy, RelroLevel, TargetOptions};
+
+pub fn opts() -> TargetOptions {
+ let lld_args = &["-zmax-page-size=4096", "-znow", "-ztext", "--execute-only"];
+ let cc_args = &["-Wl,-zmax-page-size=4096", "-Wl,-znow", "-Wl,-ztext", "-mexecute-only"];
+
+ let mut pre_link_args = TargetOptions::link_args(LinkerFlavor::Gnu(Cc::No, Lld::No), lld_args);
+ add_link_args(&mut pre_link_args, LinkerFlavor::Gnu(Cc::Yes, Lld::No), cc_args);
+
+ TargetOptions {
+ os: "teeos".into(),
+ vendor: "unknown".into(),
+ dynamic_linking: true,
+ linker_flavor: LinkerFlavor::Gnu(Cc::Yes, Lld::No),
+ // rpath hardcodes -Wl, so it can't be used together with ld.lld.
+ // C TAs also don't support rpath, so this is fine.
+ has_rpath: false,
+ // Note: Setting has_thread_local to true causes an error when
+ // loading / dyn-linking the TA
+ has_thread_local: false,
+ position_independent_executables: true,
+ relro_level: RelroLevel::Full,
+ crt_static_respected: true,
+ pre_link_args,
+ panic_strategy: PanicStrategy::Abort,
+ ..Default::default()
+ }
+}