From 28c6ef83c6d148b2d13563591fa8c6dad8474f2d Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Sun, 24 Nov 2019 21:05:32 +0100 Subject: [PATCH 1/3] introduce a target to build the kernel HermitCore - the target avoids the usage of SSE & AVX within the kernel --- .../spec/hermit_kernel_base.rs | 26 +++++++++++++++++++ src/librustc_target/spec/mod.rs | 2 ++ .../spec/x86_64_unknown_hermit_kernel.rs | 23 ++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 src/librustc_target/spec/hermit_kernel_base.rs create mode 100644 src/librustc_target/spec/x86_64_unknown_hermit_kernel.rs diff --git a/src/librustc_target/spec/hermit_kernel_base.rs b/src/librustc_target/spec/hermit_kernel_base.rs new file mode 100644 index 0000000000000..f31de4dbd5194 --- /dev/null +++ b/src/librustc_target/spec/hermit_kernel_base.rs @@ -0,0 +1,26 @@ +use crate::spec::{LldFlavor, LinkArgs, LinkerFlavor, PanicStrategy, TargetOptions}; +use std::default::Default; + +pub fn opts() -> TargetOptions { + let mut pre_link_args = LinkArgs::new(); + pre_link_args.insert(LinkerFlavor::Lld(LldFlavor::Ld), vec![ + "--build-id".to_string(), + "--hash-style=gnu".to_string(), + "--Bstatic".to_string(), + ]); + + TargetOptions { + linker: Some("rust-lld".to_owned()), + executables: true, + has_elf_tls: true, + linker_is_gnu: true, + pre_link_args, + no_default_libraries: true, + panic_strategy: PanicStrategy::Abort, + position_independent_executables: true, + relocation_model: "static".to_string(), + target_family: None, + tls_model: "initial-exec".to_string(), + .. Default::default() + } +} diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs index 716aef056a35b..feaf0430e1467 100644 --- a/src/librustc_target/spec/mod.rs +++ b/src/librustc_target/spec/mod.rs @@ -54,6 +54,7 @@ mod dragonfly_base; mod freebsd_base; mod haiku_base; mod hermit_base; +mod hermit_kernel_base; mod linux_base; mod linux_kernel_base; mod linux_musl_base; @@ -481,6 +482,7 @@ supported_targets! { ("aarch64-unknown-hermit", aarch64_unknown_hermit), ("x86_64-unknown-hermit", x86_64_unknown_hermit), + ("x86_64-unknown-hermit-kernel", x86_64_unknown_hermit_kernel), ("riscv32i-unknown-none-elf", riscv32i_unknown_none_elf), ("riscv32imc-unknown-none-elf", riscv32imc_unknown_none_elf), diff --git a/src/librustc_target/spec/x86_64_unknown_hermit_kernel.rs b/src/librustc_target/spec/x86_64_unknown_hermit_kernel.rs new file mode 100644 index 0000000000000..9979b94833ebf --- /dev/null +++ b/src/librustc_target/spec/x86_64_unknown_hermit_kernel.rs @@ -0,0 +1,23 @@ +use crate::spec::{LldFlavor, LinkerFlavor, Target, TargetResult}; + +pub fn target() -> TargetResult { + let mut base = super::hermit_kernel_base::opts(); + base.cpu = "x86-64".to_string(); + base.max_atomic_width = Some(64); + base.features = "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float".to_string(); + base.stack_probes = true; + + Ok(Target { + llvm_target: "x86_64-unknown-hermit".to_string(), + target_endian: "little".to_string(), + target_pointer_width: "64".to_string(), + target_c_int_width: "32".to_string(), + data_layout: "e-m:e-i64:64-f80:128-n8:16:32:64-S128".to_string(), + arch: "x86_64".to_string(), + target_os: "hermit".to_string(), + target_env: String::new(), + target_vendor: "unknown".to_string(), + linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld), + options: base, + }) +} From 1475944bdc56c7f0e266056368f83e17c21b36b0 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Sun, 24 Nov 2019 22:36:50 +0100 Subject: [PATCH 2/3] use nicer code style to pass tidy check --- src/librustc_target/spec/x86_64_unknown_hermit_kernel.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/librustc_target/spec/x86_64_unknown_hermit_kernel.rs b/src/librustc_target/spec/x86_64_unknown_hermit_kernel.rs index 9979b94833ebf..ebaada8f4f8eb 100644 --- a/src/librustc_target/spec/x86_64_unknown_hermit_kernel.rs +++ b/src/librustc_target/spec/x86_64_unknown_hermit_kernel.rs @@ -4,7 +4,9 @@ pub fn target() -> TargetResult { let mut base = super::hermit_kernel_base::opts(); base.cpu = "x86-64".to_string(); base.max_atomic_width = Some(64); - base.features = "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float".to_string(); + base.features = + "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float" + .to_string(); base.stack_probes = true; Ok(Target { From 55ce5c09ff501d14ef2cce4498267372450a60d1 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Sun, 24 Nov 2019 23:40:32 +0100 Subject: [PATCH 3/3] disable redzone --- src/librustc_target/spec/hermit_kernel_base.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/librustc_target/spec/hermit_kernel_base.rs b/src/librustc_target/spec/hermit_kernel_base.rs index f31de4dbd5194..ad1027c7bc775 100644 --- a/src/librustc_target/spec/hermit_kernel_base.rs +++ b/src/librustc_target/spec/hermit_kernel_base.rs @@ -10,6 +10,7 @@ pub fn opts() -> TargetOptions { ]); TargetOptions { + disable_redzone: true, linker: Some("rust-lld".to_owned()), executables: true, has_elf_tls: true,