From 8aad5f45d57ca5e2e51176c9d6aa22583b6cf91d Mon Sep 17 00:00:00 2001 From: Mike Leany <55358344+mikeleany@users.noreply.github.com> Date: Fri, 17 Sep 2021 23:03:59 -0600 Subject: [PATCH 01/15] Add new target: `x86_64-unknown-none-elf` --- compiler/rustc_target/src/spec/mod.rs | 2 ++ .../src/spec/x86_64_unknown_none_elf.rs | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs index ff5dfa3f74625..4b357b3cca1ba 100644 --- a/compiler/rustc_target/src/spec/mod.rs +++ b/compiler/rustc_target/src/spec/mod.rs @@ -954,6 +954,8 @@ supported_targets! { ("armv6k-nintendo-3ds", armv6k_nintendo_3ds), ("armv7-unknown-linux-uclibceabihf", armv7_unknown_linux_uclibceabihf), + + ("x86_64-unknown-none-elf", x86_64_unknown_none_elf), } /// Warnings encountered when parsing the target `json`. diff --git a/compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs b/compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs new file mode 100644 index 0000000000000..2086a1a8d5b3d --- /dev/null +++ b/compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs @@ -0,0 +1,29 @@ +// Generic AArch64 target for bare-metal code - Floating point disabled +// +// Can be used in conjunction with the `target-feature` and +// `target-cpu` compiler flags to opt-in more hardware-specific +// features. +// +// For example, `-C target-cpu=cortex-a53`. + +use super::{LinkerFlavor, LldFlavor, PanicStrategy, Target, TargetOptions}; + +pub fn target() -> Target { + let opts = TargetOptions { + abi: "softfloat".to_string(), + linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld), + linker: Some("rust-lld".to_owned()), + features: "-mmx,-sse,+soft-float".to_string(), + executables: true, + disable_redzone: true, + panic_strategy: PanicStrategy::Abort, + ..Default::default() + }; + Target { + llvm_target: "x86_64-unknown-none-elf".to_string(), + pointer_width: 64, + data_layout: "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128".to_string(), + arch: "x86_64".to_string(), + options: opts, + } +} From 80654c3d93e7bb7d8b53a88be45c3e31ea480cdd Mon Sep 17 00:00:00 2001 From: Mike Leany <55358344+mikeleany@users.noreply.github.com> Date: Sat, 18 Sep 2021 08:21:52 -0600 Subject: [PATCH 02/15] Fix code formatting. --- compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs b/compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs index 2086a1a8d5b3d..8cae3d0174d62 100644 --- a/compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs +++ b/compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs @@ -22,7 +22,8 @@ pub fn target() -> Target { Target { llvm_target: "x86_64-unknown-none-elf".to_string(), pointer_width: 64, - data_layout: "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128".to_string(), + data_layout: "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" + .to_string(), arch: "x86_64".to_string(), options: opts, } From dcbdb6e4f5a06737418d44b3432dae5c592b6a75 Mon Sep 17 00:00:00 2001 From: Mike Leany <55358344+mikeleany@users.noreply.github.com> Date: Sat, 18 Sep 2021 09:46:25 -0600 Subject: [PATCH 03/15] Add `x86_64-unknown-none-elf` to `platform-support.md`. --- src/doc/rustc/src/platform-support.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md index bbeab598f2292..62084d2a9dbd1 100644 --- a/src/doc/rustc/src/platform-support.md +++ b/src/doc/rustc/src/platform-support.md @@ -285,6 +285,7 @@ target | std | host | notes `x86_64-unknown-haiku` | ✓ | ✓ | 64-bit Haiku `x86_64-unknown-hermit` | ? | | `x86_64-unknown-l4re-uclibc` | ? | | +`x86_64-unknown-none-elf` | * | | Bare x86_64, softfloat `x86_64-unknown-none-hermitkernel` | ? | | HermitCore kernel `x86_64-unknown-none-linuxkernel` | * | | Linux kernel modules `x86_64-unknown-openbsd` | ✓ | ✓ | 64-bit OpenBSD From 5ba3a651f982fd716f5993b56961d2c3a535b7d8 Mon Sep 17 00:00:00 2001 From: Mike Leany <55358344+mikeleany@users.noreply.github.com> Date: Sun, 19 Sep 2021 07:57:49 -0600 Subject: [PATCH 04/15] Use `CodeModel::Kernel` for `x86_64-unknown-none-elf`. --- compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs b/compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs index 8cae3d0174d62..58a83e75e4130 100644 --- a/compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs +++ b/compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs @@ -6,7 +6,7 @@ // // For example, `-C target-cpu=cortex-a53`. -use super::{LinkerFlavor, LldFlavor, PanicStrategy, Target, TargetOptions}; +use super::{CodeModel, LinkerFlavor, LldFlavor, PanicStrategy, Target, TargetOptions}; pub fn target() -> Target { let opts = TargetOptions { @@ -17,6 +17,7 @@ pub fn target() -> Target { executables: true, disable_redzone: true, panic_strategy: PanicStrategy::Abort, + code_model: Some(CodeModel::Kernel), ..Default::default() }; Target { From a23ee64c2c292f30fa64b258042e256bca0f35a9 Mon Sep 17 00:00:00 2001 From: Josh Triplett Date: Sun, 19 Sep 2021 12:05:58 -0700 Subject: [PATCH 05/15] Rename x86_64-unknown-none-elf to x86_64-unknown-none Most Rust freestanding/bare-metal targets use just `-unknown-none` here, including aarch64-unknown-none, mipsel-unknown-none, and the BPF targets. The *only* target using `-unknown-none-elf` is RISC-V. The underlying toolchain doesn't care; LLVM accepts both `x86_64-unknown-none` and `x86_64-unknown-none-elf`. In addition, there's a long history of embedded x86 targets with varying definitions for the `elf` suffix; on some of those embedded targets, `elf` implied the inclusion of a C library based on newlib or similar. Using `x86_64-unknown-none` avoids any potential ambiguity there. (Work on this target sponsored by Profian.) --- compiler/rustc_target/src/spec/mod.rs | 2 +- .../spec/{x86_64_unknown_none_elf.rs => x86_64_unknown_none.rs} | 0 src/doc/rustc/src/platform-support.md | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename compiler/rustc_target/src/spec/{x86_64_unknown_none_elf.rs => x86_64_unknown_none.rs} (100%) diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs index 4b357b3cca1ba..5bc6d1918dd7e 100644 --- a/compiler/rustc_target/src/spec/mod.rs +++ b/compiler/rustc_target/src/spec/mod.rs @@ -955,7 +955,7 @@ supported_targets! { ("armv7-unknown-linux-uclibceabihf", armv7_unknown_linux_uclibceabihf), - ("x86_64-unknown-none-elf", x86_64_unknown_none_elf), + ("x86_64-unknown-none", x86_64_unknown_none), } /// Warnings encountered when parsing the target `json`. diff --git a/compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs b/compiler/rustc_target/src/spec/x86_64_unknown_none.rs similarity index 100% rename from compiler/rustc_target/src/spec/x86_64_unknown_none_elf.rs rename to compiler/rustc_target/src/spec/x86_64_unknown_none.rs diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md index 62084d2a9dbd1..0f2072bd52150 100644 --- a/src/doc/rustc/src/platform-support.md +++ b/src/doc/rustc/src/platform-support.md @@ -285,7 +285,7 @@ target | std | host | notes `x86_64-unknown-haiku` | ✓ | ✓ | 64-bit Haiku `x86_64-unknown-hermit` | ? | | `x86_64-unknown-l4re-uclibc` | ? | | -`x86_64-unknown-none-elf` | * | | Bare x86_64, softfloat +`x86_64-unknown-none` | * | | Freestanding/bare-metal x86_64, softfloat `x86_64-unknown-none-hermitkernel` | ? | | HermitCore kernel `x86_64-unknown-none-linuxkernel` | * | | Linux kernel modules `x86_64-unknown-openbsd` | ✓ | ✓ | 64-bit OpenBSD From b0efa05e5acaaa6b973e05835d2fd46f58cc5c11 Mon Sep 17 00:00:00 2001 From: Josh Triplett Date: Sun, 19 Sep 2021 12:14:33 -0700 Subject: [PATCH 06/15] x86_64-unknown-none: Fix module comment (Work on this target sponsored by Profian.) --- compiler/rustc_target/src/spec/x86_64_unknown_none.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/compiler/rustc_target/src/spec/x86_64_unknown_none.rs b/compiler/rustc_target/src/spec/x86_64_unknown_none.rs index 58a83e75e4130..a3ab2621c78b2 100644 --- a/compiler/rustc_target/src/spec/x86_64_unknown_none.rs +++ b/compiler/rustc_target/src/spec/x86_64_unknown_none.rs @@ -1,10 +1,8 @@ -// Generic AArch64 target for bare-metal code - Floating point disabled +// Generic x86-64 target for bare-metal code - Floating point disabled // // Can be used in conjunction with the `target-feature` and // `target-cpu` compiler flags to opt-in more hardware-specific // features. -// -// For example, `-C target-cpu=cortex-a53`. use super::{CodeModel, LinkerFlavor, LldFlavor, PanicStrategy, Target, TargetOptions}; From b0d1e3be23bdaa4e103154750ef9bce7d05cf978 Mon Sep 17 00:00:00 2001 From: Josh Triplett Date: Sun, 19 Sep 2021 12:15:03 -0700 Subject: [PATCH 07/15] x86_64-unknown-none: Drop the `abi` field (Work on this target sponsored by Profian.) --- compiler/rustc_target/src/spec/x86_64_unknown_none.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/compiler/rustc_target/src/spec/x86_64_unknown_none.rs b/compiler/rustc_target/src/spec/x86_64_unknown_none.rs index a3ab2621c78b2..8679814b782d7 100644 --- a/compiler/rustc_target/src/spec/x86_64_unknown_none.rs +++ b/compiler/rustc_target/src/spec/x86_64_unknown_none.rs @@ -8,7 +8,6 @@ use super::{CodeModel, LinkerFlavor, LldFlavor, PanicStrategy, Target, TargetOpt pub fn target() -> Target { let opts = TargetOptions { - abi: "softfloat".to_string(), linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld), linker: Some("rust-lld".to_owned()), features: "-mmx,-sse,+soft-float".to_string(), From 6ab66192f925802a81822e55855546342cb69d1c Mon Sep 17 00:00:00 2001 From: Josh Triplett Date: Sun, 19 Sep 2021 12:31:36 -0700 Subject: [PATCH 08/15] x86_64-unknown-none: Disable more target features Based on the list used for x86_64-unknown-none-linuxkernel. (Work on this target sponsored by Profian.) --- compiler/rustc_target/src/spec/x86_64_unknown_none.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_target/src/spec/x86_64_unknown_none.rs b/compiler/rustc_target/src/spec/x86_64_unknown_none.rs index 8679814b782d7..4fe1b6e11e8e1 100644 --- a/compiler/rustc_target/src/spec/x86_64_unknown_none.rs +++ b/compiler/rustc_target/src/spec/x86_64_unknown_none.rs @@ -10,7 +10,9 @@ pub fn target() -> Target { let opts = TargetOptions { linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld), linker: Some("rust-lld".to_owned()), - features: "-mmx,-sse,+soft-float".to_string(), + features: + "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float" + .to_string(), executables: true, disable_redzone: true, panic_strategy: PanicStrategy::Abort, From 2037cee7012480ea84851bd1e85fc9693b321651 Mon Sep 17 00:00:00 2001 From: Josh Triplett Date: Sun, 19 Sep 2021 12:33:21 -0700 Subject: [PATCH 09/15] x86_64-unknown-none: Expand TargetOptions to specify more details Specify the `cpu` and the `max_atomic_width` (64). Set `stack_probes` similarly to other targets to work around known issues, and copy the corresponding comment from those targets. Build position-independent code that doesn't require relocations. (Work on this target sponsored by Profian.) --- compiler/rustc_target/src/spec/x86_64_unknown_none.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/compiler/rustc_target/src/spec/x86_64_unknown_none.rs b/compiler/rustc_target/src/spec/x86_64_unknown_none.rs index 4fe1b6e11e8e1..b460ea1c29b55 100644 --- a/compiler/rustc_target/src/spec/x86_64_unknown_none.rs +++ b/compiler/rustc_target/src/spec/x86_64_unknown_none.rs @@ -8,6 +8,14 @@ use super::{CodeModel, LinkerFlavor, LldFlavor, PanicStrategy, Target, TargetOpt pub fn target() -> Target { let opts = TargetOptions { + cpu: "x86-64".to_string(), + max_atomic_width: Some(64), + // don't use probe-stack=inline-asm until rust#83139 and rust#84667 are resolved + stack_probes: StackProbeType::Call, + position_independent_executables: true, + static_position_independent_executables: true, + relro_level: RelroLevel::Full, + relocation_model: RelocModel::Static, linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld), linker: Some("rust-lld".to_owned()), features: From 7bb2f7dba07ac066d4150ef83cbc6c6a6d5f145b Mon Sep 17 00:00:00 2001 From: Josh Triplett Date: Sun, 19 Sep 2021 12:43:13 -0700 Subject: [PATCH 10/15] x86_64-unknown-none: Add target documentation In particular, document the default properties and assumptions of code built for the target. (Work on this target sponsored by Profian.) --- src/doc/rustc/src/platform-support.md | 2 +- .../platform-support/x86_64-unknown-none.md | 76 +++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 src/doc/rustc/src/platform-support/x86_64-unknown-none.md diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md index 0f2072bd52150..6b0c336b3c799 100644 --- a/src/doc/rustc/src/platform-support.md +++ b/src/doc/rustc/src/platform-support.md @@ -285,7 +285,7 @@ target | std | host | notes `x86_64-unknown-haiku` | ✓ | ✓ | 64-bit Haiku `x86_64-unknown-hermit` | ? | | `x86_64-unknown-l4re-uclibc` | ? | | -`x86_64-unknown-none` | * | | Freestanding/bare-metal x86_64, softfloat +[`x86_64-unknown-none`](platform-support/x86_64-unknown-none.md) | * | | Freestanding/bare-metal x86_64, softfloat `x86_64-unknown-none-hermitkernel` | ? | | HermitCore kernel `x86_64-unknown-none-linuxkernel` | * | | Linux kernel modules `x86_64-unknown-openbsd` | ✓ | ✓ | 64-bit OpenBSD diff --git a/src/doc/rustc/src/platform-support/x86_64-unknown-none.md b/src/doc/rustc/src/platform-support/x86_64-unknown-none.md new file mode 100644 index 0000000000000..967956b3c3174 --- /dev/null +++ b/src/doc/rustc/src/platform-support/x86_64-unknown-none.md @@ -0,0 +1,76 @@ +# `x86_64-unknown-none` + +**Tier: 3** + +Freestanding/bare-metal x86-64 binaries in ELF format: firmware, kernels, etc. + +## Target maintainers + +Harald Hoyer , https://github.com/haraldh +Mike Leany, https://github.com/mikeleany + +## Requirements + +This target is cross-compiled. There is no support for `std`. There is no +default allocator, but it's possible to use `alloc` by supplying an allocator. + +By default, Rust code generated for this target does not use any vector or +floating-point registers (e.g. SSE, AVX). This allows the generated code to run +in environments, such as kernels, which may need to avoid the use of such +registers or which may have special considerations about the use of such +registers (e.g. saving and restoring them to avoid breaking userspace code +using the same registers). You can change code generation to use additional CPU +features via the `-C target-feature=` codegen options to rustc, or via the +`#[target_feature]` mechanism within Rust code. + +By default, code generated with this target should run on any `x86_64` +hardware; enabling additional target features may raise this baseline. + +Code generated with this target will use the `kernel` code model by default. +You can change this using the `-C code-model=` option to rustc. + +On `x86_64-unknown-none`, `extern "C"` uses the [standard System V calling +convention](https://gitlab.com/x86-psABIs/x86-64-ABI), without red zones. + +This target generated binaries in the ELF format. Any alternate formats or +special considerations for binary layout will require linker options or linker +scripts. + +## Building the target + +You can build Rust with support for the target by adding it to the `target` +list in `config.toml`: + +```toml +[build] +build-stage = 1 +target = ["x86_64-unknown-none"] +``` + +## Building Rust programs + +Rust does not yet ship pre-compiled artifacts for this target. To compile for +this target, you will either need to build Rust with the target enabled (see +"Building the target" above), or build your own copy of `core` by using +`build-std` or similar. + +## Testing + +As `x86_64-unknown-none` supports a variety of different environments and does +not support `std`, this target does not support running the Rust testsuite. + +## Cross-compilation toolchains and C code + +If you want to compile C code along with Rust (such as for Rust crates with C +dependencies), you will need an appropriate `x86_64` toolchain. + +Rust *may* be able to use an `x86_64-linux-gnu-` toolchain with appropriate +standalone flags to build for this toolchain (depending on the assumptions of +that toolchain, see below), or you may wish to use a separate +`x86_64-unknown-none` (or `x86_64-elf-`) toolchain. + +On some `x86_64` hosts that use ELF binaries, you *may* be able to use the host +C toolchain, if it does not introduce assumptions about the host environment +that don't match the expectations of a standalone environment. Otherwise, you +may need a separate toolchain for standalone/freestanding development, just as +when cross-compiling from a non-`x86_64` platform. From 8b6764c4ef111918211029f91964df8ab5d46258 Mon Sep 17 00:00:00 2001 From: Mike Leany <55358344+mikeleany@users.noreply.github.com> Date: Sun, 19 Sep 2021 15:50:54 -0600 Subject: [PATCH 11/15] Fix build errors. --- compiler/rustc_target/src/spec/x86_64_unknown_none.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_target/src/spec/x86_64_unknown_none.rs b/compiler/rustc_target/src/spec/x86_64_unknown_none.rs index b460ea1c29b55..89ed0ea532740 100644 --- a/compiler/rustc_target/src/spec/x86_64_unknown_none.rs +++ b/compiler/rustc_target/src/spec/x86_64_unknown_none.rs @@ -4,7 +4,10 @@ // `target-cpu` compiler flags to opt-in more hardware-specific // features. -use super::{CodeModel, LinkerFlavor, LldFlavor, PanicStrategy, Target, TargetOptions}; +use super::{ + CodeModel, LinkerFlavor, LldFlavor, PanicStrategy, RelocModel, RelroLevel, StackProbeType, + Target, TargetOptions, +}; pub fn target() -> Target { let opts = TargetOptions { From 3b854cf82d28f02108d871133fabfa37ab0ebeb7 Mon Sep 17 00:00:00 2001 From: Mike Leany <55358344+mikeleany@users.noreply.github.com> Date: Sun, 19 Sep 2021 17:03:54 -0600 Subject: [PATCH 12/15] Documentation fixes. Fix broken link to target documentation. Also fix formatting of developer list. --- src/doc/rustc/src/SUMMARY.md | 1 + src/doc/rustc/src/platform-support/x86_64-unknown-none.md | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/doc/rustc/src/SUMMARY.md b/src/doc/rustc/src/SUMMARY.md index 8c41835183797..c251425d1b7ad 100644 --- a/src/doc/rustc/src/SUMMARY.md +++ b/src/doc/rustc/src/SUMMARY.md @@ -15,6 +15,7 @@ - [Platform Support](platform-support.md) - [aarch64-apple-ios-sim](platform-support/aarch64-apple-ios-sim.md) - [\*-kmc-solid_\*](platform-support/kmc-solid.md) + - [x86_64-unknown-none](platform-support/x86_64-unknown-none.md) - [Target Tier Policy](target-tier-policy.md) - [Targets](targets/index.md) - [Built-in Targets](targets/built-in.md) diff --git a/src/doc/rustc/src/platform-support/x86_64-unknown-none.md b/src/doc/rustc/src/platform-support/x86_64-unknown-none.md index 967956b3c3174..b56e0e03f998b 100644 --- a/src/doc/rustc/src/platform-support/x86_64-unknown-none.md +++ b/src/doc/rustc/src/platform-support/x86_64-unknown-none.md @@ -6,8 +6,8 @@ Freestanding/bare-metal x86-64 binaries in ELF format: firmware, kernels, etc. ## Target maintainers -Harald Hoyer , https://github.com/haraldh -Mike Leany, https://github.com/mikeleany +- Harald Hoyer , https://github.com/haraldh +- Mike Leany, https://github.com/mikeleany ## Requirements From 9704a837be2d0a9b4537edfdd8650670162d9e3b Mon Sep 17 00:00:00 2001 From: Josh Triplett Date: Wed, 22 Sep 2021 14:01:27 -0700 Subject: [PATCH 13/15] Unlinkify email address to satisfy linkchecker The linkchecker doesn't seem happy with links to email addresses. --- src/doc/rustc/src/platform-support/x86_64-unknown-none.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc/src/platform-support/x86_64-unknown-none.md b/src/doc/rustc/src/platform-support/x86_64-unknown-none.md index b56e0e03f998b..afcc48003b936 100644 --- a/src/doc/rustc/src/platform-support/x86_64-unknown-none.md +++ b/src/doc/rustc/src/platform-support/x86_64-unknown-none.md @@ -6,7 +6,7 @@ Freestanding/bare-metal x86-64 binaries in ELF format: firmware, kernels, etc. ## Target maintainers -- Harald Hoyer , https://github.com/haraldh +- Harald Hoyer `harald@profian.com`, https://github.com/haraldh - Mike Leany, https://github.com/mikeleany ## Requirements From 3a1879299e8742e9193569152bef3f997c51e0ea Mon Sep 17 00:00:00 2001 From: Josh Triplett Date: Thu, 30 Sep 2021 16:09:29 -0700 Subject: [PATCH 14/15] x86_64-unknown-none: Use position-independent code by default This avoids requiring relocation code, which a bare-metal environment may not have or want. --- compiler/rustc_target/src/spec/aarch64_unknown_none.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/rustc_target/src/spec/aarch64_unknown_none.rs b/compiler/rustc_target/src/spec/aarch64_unknown_none.rs index 9d3652790108c..d74cd9edc59e2 100644 --- a/compiler/rustc_target/src/spec/aarch64_unknown_none.rs +++ b/compiler/rustc_target/src/spec/aarch64_unknown_none.rs @@ -14,7 +14,7 @@ pub fn target() -> Target { linker: Some("rust-lld".to_owned()), features: "+strict-align,+neon,+fp-armv8".to_string(), executables: true, - relocation_model: RelocModel::Static, + relocation_model: RelocModel::Pic, disable_redzone: true, max_atomic_width: Some(128), panic_strategy: PanicStrategy::Abort, From 11d54dc1c61f74aa4cfa704ed97bf6c853a731e5 Mon Sep 17 00:00:00 2001 From: Mike Leany <55358344+mikeleany@users.noreply.github.com> Date: Thu, 14 Oct 2021 12:10:20 -0600 Subject: [PATCH 15/15] Fix issue where PIC was added to the wrong target. Should be for x86_64_unknown_none, but aarch64_unknown_none was inadvertently updated instead. --- compiler/rustc_target/src/spec/aarch64_unknown_none.rs | 2 +- compiler/rustc_target/src/spec/x86_64_unknown_none.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/rustc_target/src/spec/aarch64_unknown_none.rs b/compiler/rustc_target/src/spec/aarch64_unknown_none.rs index d74cd9edc59e2..9d3652790108c 100644 --- a/compiler/rustc_target/src/spec/aarch64_unknown_none.rs +++ b/compiler/rustc_target/src/spec/aarch64_unknown_none.rs @@ -14,7 +14,7 @@ pub fn target() -> Target { linker: Some("rust-lld".to_owned()), features: "+strict-align,+neon,+fp-armv8".to_string(), executables: true, - relocation_model: RelocModel::Pic, + relocation_model: RelocModel::Static, disable_redzone: true, max_atomic_width: Some(128), panic_strategy: PanicStrategy::Abort, diff --git a/compiler/rustc_target/src/spec/x86_64_unknown_none.rs b/compiler/rustc_target/src/spec/x86_64_unknown_none.rs index 89ed0ea532740..722409dd168ce 100644 --- a/compiler/rustc_target/src/spec/x86_64_unknown_none.rs +++ b/compiler/rustc_target/src/spec/x86_64_unknown_none.rs @@ -18,7 +18,7 @@ pub fn target() -> Target { position_independent_executables: true, static_position_independent_executables: true, relro_level: RelroLevel::Full, - relocation_model: RelocModel::Static, + relocation_model: RelocModel::Pic, linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld), linker: Some("rust-lld".to_owned()), features: