1
Fork 0

Auto merge of #134765 - Noratrieb:linux-none-cant-unwind-silly, r=jieyouxu

Improve default target options for x86_64-unknown-linux-none

Without a standard library, we cannot unwind, so it should be panic=abort by default.

Additionally, it does not have std because while it is Linux, it cannot use libc, which std uses today for Linux.

Using PIE by default may be surprising to users, as shown in #134763, so I've documented it explicitly. I'm not sure if we want to count that as fixing the issue or not.

cc `@morr0ne,` as you added the target (and are the maintainer), and `@Noratrieb,` who reviewed that PR (:D).
This commit is contained in:
bors 2024-12-29 20:10:37 +00:00
commit 14ee63a3c6
2 changed files with 8 additions and 2 deletions

View file

@ -1,4 +1,4 @@
use crate::spec::{Cc, LinkerFlavor, Lld, StackProbeType, Target, base};
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, StackProbeType, Target, base};
pub(crate) fn target() -> Target {
let mut base = base::linux::opts();
@ -7,6 +7,7 @@ pub(crate) fn target() -> Target {
base.stack_probes = StackProbeType::Inline;
base.linker_flavor = LinkerFlavor::Gnu(Cc::No, Lld::Yes);
base.linker = Some("rust-lld".into());
base.panic_strategy = PanicStrategy::Abort;
Target {
llvm_target: "x86_64-unknown-linux-none".into(),
@ -14,7 +15,7 @@ pub(crate) fn target() -> Target {
description: None,
tier: None,
host_tools: None,
std: Some(true),
std: Some(false),
},
pointer_width: 64,
data_layout:

View file

@ -14,6 +14,11 @@ This target is cross compiled and can be built from any host.
This target has no support for host tools, std, or alloc.
One of the primary motivations of the target is to write a dynamic linker and libc in Rust.
For that, the target defaults to position-independent code and position-independent executables (PIE) by default.
PIE binaries need relocation at runtime. This is usually done by the dynamic linker or libc.
You can use `-Crelocation-model=static` to create a position-dependent binary that does not need relocation at runtime.
## Building the target
The target can be built by enabling it for a `rustc` build: