Rollup merge of #126192 - bjorn3:redox_patches, r=petrochenkov
Various Redox OS fixes and add i686 Redox OS target All of these come from the fork used by Redox OS available at https://gitlab.redox-os.org/redox-os/rust/-/commits/redox-2024-05-11/?ref_type=heads. cc `@jackpot51`
This commit is contained in:
commit
a033dab05d
@ -9,6 +9,10 @@
|
|||||||
mod linux;
|
mod linux;
|
||||||
use linux as imp;
|
use linux as imp;
|
||||||
}
|
}
|
||||||
|
cfg(target_os = "redox") => {
|
||||||
|
mod linux;
|
||||||
|
use linux as imp;
|
||||||
|
}
|
||||||
cfg(unix) => {
|
cfg(unix) => {
|
||||||
mod unix;
|
mod unix;
|
||||||
use unix as imp;
|
use unix as imp;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use crate::spec::{cvs, RelroLevel, TargetOptions};
|
use crate::spec::{cvs, Cc, LinkerFlavor, Lld, RelroLevel, TargetOptions};
|
||||||
|
|
||||||
pub fn opts() -> TargetOptions {
|
pub fn opts() -> TargetOptions {
|
||||||
TargetOptions {
|
TargetOptions {
|
||||||
@ -12,6 +12,8 @@ pub fn opts() -> TargetOptions {
|
|||||||
has_thread_local: true,
|
has_thread_local: true,
|
||||||
crt_static_default: true,
|
crt_static_default: true,
|
||||||
crt_static_respected: true,
|
crt_static_respected: true,
|
||||||
|
crt_static_allows_dylibs: true,
|
||||||
|
late_link_args: TargetOptions::link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-lgcc"]),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1647,6 +1647,7 @@ fn $module() {
|
|||||||
("x86_64-unknown-l4re-uclibc", x86_64_unknown_l4re_uclibc),
|
("x86_64-unknown-l4re-uclibc", x86_64_unknown_l4re_uclibc),
|
||||||
|
|
||||||
("aarch64-unknown-redox", aarch64_unknown_redox),
|
("aarch64-unknown-redox", aarch64_unknown_redox),
|
||||||
|
("i686-unknown-redox", i686_unknown_redox),
|
||||||
("x86_64-unknown-redox", x86_64_unknown_redox),
|
("x86_64-unknown-redox", x86_64_unknown_redox),
|
||||||
|
|
||||||
("i386-apple-ios", i386_apple_ios),
|
("i386-apple-ios", i386_apple_ios),
|
||||||
|
27
compiler/rustc_target/src/spec/targets/i686_unknown_redox.rs
Normal file
27
compiler/rustc_target/src/spec/targets/i686_unknown_redox.rs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
use crate::spec::{base, Cc, LinkerFlavor, Lld, StackProbeType, Target};
|
||||||
|
|
||||||
|
pub fn target() -> Target {
|
||||||
|
let mut base = base::redox::opts();
|
||||||
|
base.cpu = "pentiumpro".into();
|
||||||
|
base.plt_by_default = false;
|
||||||
|
base.max_atomic_width = Some(64);
|
||||||
|
base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m32"]);
|
||||||
|
// don't use probe-stack=inline-asm until rust#83139 and rust#84667 are resolved
|
||||||
|
base.stack_probes = StackProbeType::Call;
|
||||||
|
|
||||||
|
Target {
|
||||||
|
llvm_target: "i686-unknown-redox".into(),
|
||||||
|
metadata: crate::spec::TargetMetadata {
|
||||||
|
description: None,
|
||||||
|
tier: None,
|
||||||
|
host_tools: None,
|
||||||
|
std: None,
|
||||||
|
},
|
||||||
|
pointer_width: 32,
|
||||||
|
data_layout:
|
||||||
|
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-f64:32:64-f80:32-n8:16:32-S128"
|
||||||
|
.into(),
|
||||||
|
arch: "x86".into(),
|
||||||
|
options: base,
|
||||||
|
}
|
||||||
|
}
|
@ -71,6 +71,7 @@
|
|||||||
- [*-unknown-hermit](platform-support/hermit.md)
|
- [*-unknown-hermit](platform-support/hermit.md)
|
||||||
- [\*-unknown-netbsd\*](platform-support/netbsd.md)
|
- [\*-unknown-netbsd\*](platform-support/netbsd.md)
|
||||||
- [*-unknown-openbsd](platform-support/openbsd.md)
|
- [*-unknown-openbsd](platform-support/openbsd.md)
|
||||||
|
- [*-unknown-redox](platform-support/redox.md)
|
||||||
- [\*-unknown-uefi](platform-support/unknown-uefi.md)
|
- [\*-unknown-uefi](platform-support/unknown-uefi.md)
|
||||||
- [wasm32-wasip1](platform-support/wasm32-wasip1.md)
|
- [wasm32-wasip1](platform-support/wasm32-wasip1.md)
|
||||||
- [wasm32-wasip1-threads](platform-support/wasm32-wasip1-threads.md)
|
- [wasm32-wasip1-threads](platform-support/wasm32-wasip1-threads.md)
|
||||||
|
@ -203,7 +203,7 @@ target | std | notes
|
|||||||
`x86_64-unknown-linux-gnux32` | ✓ | 64-bit Linux (x32 ABI) (kernel 4.15, glibc 2.27)
|
`x86_64-unknown-linux-gnux32` | ✓ | 64-bit Linux (x32 ABI) (kernel 4.15, glibc 2.27)
|
||||||
[`x86_64-unknown-linux-ohos`](platform-support/openharmony.md) | ✓ | x86_64 OpenHarmony
|
[`x86_64-unknown-linux-ohos`](platform-support/openharmony.md) | ✓ | x86_64 OpenHarmony
|
||||||
[`x86_64-unknown-none`](platform-support/x86_64-unknown-none.md) | * | 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-redox` | ✓ | Redox OS
|
[`x86_64-unknown-redox`](platform-support/redox.md) | ✓ | Redox OS
|
||||||
[`x86_64-unknown-uefi`](platform-support/unknown-uefi.md) | ? | 64-bit UEFI
|
[`x86_64-unknown-uefi`](platform-support/unknown-uefi.md) | ? | 64-bit UEFI
|
||||||
|
|
||||||
[^x86_32-floats-x87]: Floating-point support on `i586` targets is non-compliant: the `x87` registers and instructions used for these targets do not provide IEEE-754-compliant behavior, in particular when it comes to rounding and NaN payload bits. See [issue #114479][x86-32-float-issue].
|
[^x86_32-floats-x87]: Floating-point support on `i586` targets is non-compliant: the `x87` registers and instructions used for these targets do not provide IEEE-754-compliant behavior, in particular when it comes to rounding and NaN payload bits. See [issue #114479][x86-32-float-issue].
|
||||||
@ -258,7 +258,7 @@ target | std | host | notes
|
|||||||
`aarch64-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (ILP32 ABI)
|
`aarch64-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (ILP32 ABI)
|
||||||
[`aarch64-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | ARM64 NetBSD
|
[`aarch64-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | ARM64 NetBSD
|
||||||
[`aarch64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | ARM64 OpenBSD
|
[`aarch64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | ARM64 OpenBSD
|
||||||
`aarch64-unknown-redox` | ? | | ARM64 Redox OS
|
[`aarch64-unknown-redox`](platform-support/redox.md) | ✓ | | ARM64 Redox OS
|
||||||
`aarch64-uwp-windows-msvc` | ✓ | |
|
`aarch64-uwp-windows-msvc` | ✓ | |
|
||||||
`aarch64-wrs-vxworks` | ? | |
|
`aarch64-wrs-vxworks` | ? | |
|
||||||
`aarch64_be-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (big-endian, ILP32 ABI)
|
`aarch64_be-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (big-endian, ILP32 ABI)
|
||||||
@ -300,6 +300,7 @@ target | std | host | notes
|
|||||||
[`i686-unknown-hurd-gnu`](platform-support/hurd.md) | ✓ | ✓ | 32-bit GNU/Hurd [^x86_32-floats-return-ABI]
|
[`i686-unknown-hurd-gnu`](platform-support/hurd.md) | ✓ | ✓ | 32-bit GNU/Hurd [^x86_32-floats-return-ABI]
|
||||||
[`i686-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | NetBSD/i386 with SSE2 [^x86_32-floats-return-ABI]
|
[`i686-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | NetBSD/i386 with SSE2 [^x86_32-floats-return-ABI]
|
||||||
[`i686-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 32-bit OpenBSD [^x86_32-floats-return-ABI]
|
[`i686-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 32-bit OpenBSD [^x86_32-floats-return-ABI]
|
||||||
|
[`i686-unknown-redox`](platform-support/redox.md) | ✓ | | i686 Redox OS
|
||||||
`i686-uwp-windows-gnu` | ✓ | | [^x86_32-floats-return-ABI]
|
`i686-uwp-windows-gnu` | ✓ | | [^x86_32-floats-return-ABI]
|
||||||
`i686-uwp-windows-msvc` | ✓ | | [^x86_32-floats-return-ABI]
|
`i686-uwp-windows-msvc` | ✓ | | [^x86_32-floats-return-ABI]
|
||||||
[`i686-win7-windows-msvc`](platform-support/win7-windows-msvc.md) | ✓ | | 32-bit Windows 7 support [^x86_32-floats-return-ABI]
|
[`i686-win7-windows-msvc`](platform-support/win7-windows-msvc.md) | ✓ | | 32-bit Windows 7 support [^x86_32-floats-return-ABI]
|
||||||
|
53
src/doc/rustc/src/platform-support/redox.md
Normal file
53
src/doc/rustc/src/platform-support/redox.md
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# `*-unknown-redox`
|
||||||
|
|
||||||
|
**Tier: 2/3**
|
||||||
|
|
||||||
|
Targets for the [Redox OS](https://redox-os.org/) operating
|
||||||
|
system.
|
||||||
|
|
||||||
|
Target triplets available so far:
|
||||||
|
|
||||||
|
- `x86_64-unknown-redox` (tier 2)
|
||||||
|
- `aarch64-unknown-redox` (tier 3)
|
||||||
|
- `i686-unknown-redox` (tier 3)
|
||||||
|
|
||||||
|
## Target maintainers
|
||||||
|
|
||||||
|
- Jeremy Soller ([@jackpot51](https://github.com/jackpot51))
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
These targets are natively compiled and can be cross-compiled. Std is fully supported.
|
||||||
|
|
||||||
|
The targets are only expected to work with the latest version of Redox OS as the ABI is not yet stable.
|
||||||
|
|
||||||
|
`extern "C"` uses the official calling convention of the respective architectures.
|
||||||
|
|
||||||
|
Redox OS binaries use ELF as file format.
|
||||||
|
|
||||||
|
## Building the target
|
||||||
|
|
||||||
|
You can build Rust with support for the targets by adding it to the `target` list in `config.toml`. In addition a copy of [relibc] needs to be present in the linker search path.
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[build]
|
||||||
|
build-stage = 1
|
||||||
|
target = [
|
||||||
|
"<HOST_TARGET>",
|
||||||
|
"x86_64-unknown-redox",
|
||||||
|
"aarch64-unknown-redox",
|
||||||
|
"i686-unknown-redox",
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
[relibc]: https://gitlab.redox-os.org/redox-os/relibc
|
||||||
|
|
||||||
|
## Building Rust programs and testing
|
||||||
|
|
||||||
|
Rust does not yet ship pre-compiled artifacts for Redox OS except for x86_64-unknown-redox.
|
||||||
|
|
||||||
|
The easiest way to build and test programs for Redox OS is using [redoxer](https://gitlab.redox-os.org/redox-os/redoxer) which sets up the required compiler toolchain for building as well as runs programs inside a Redox OS VM using QEMU.
|
||||||
|
|
||||||
|
## Cross-compilation toolchains and C code
|
||||||
|
|
||||||
|
The target supports C code. Pre-compiled C toolchains can be found at <https://static.redox-os.org/toolchain/>.
|
@ -103,6 +103,7 @@
|
|||||||
"i686-unknown-freebsd",
|
"i686-unknown-freebsd",
|
||||||
"i686-unknown-linux-gnu",
|
"i686-unknown-linux-gnu",
|
||||||
"i686-unknown-linux-musl",
|
"i686-unknown-linux-musl",
|
||||||
|
"i686-unknown-redox",
|
||||||
"i686-unknown-uefi",
|
"i686-unknown-uefi",
|
||||||
"loongarch64-unknown-linux-gnu",
|
"loongarch64-unknown-linux-gnu",
|
||||||
"loongarch64-unknown-none",
|
"loongarch64-unknown-none",
|
||||||
|
@ -228,6 +228,9 @@
|
|||||||
//@ revisions: i686_unknown_openbsd
|
//@ revisions: i686_unknown_openbsd
|
||||||
//@ [i686_unknown_openbsd] compile-flags: --target i686-unknown-openbsd
|
//@ [i686_unknown_openbsd] compile-flags: --target i686-unknown-openbsd
|
||||||
//@ [i686_unknown_openbsd] needs-llvm-components: x86
|
//@ [i686_unknown_openbsd] needs-llvm-components: x86
|
||||||
|
//@ revisions: i686_unknown_redox
|
||||||
|
//@ [i686_unknown_redox] compile-flags: --target i686-unknown-redox
|
||||||
|
//@ [i686_unknown_redox] needs-llvm-components: x86
|
||||||
//@ revisions: i686_wrs_vxworks
|
//@ revisions: i686_wrs_vxworks
|
||||||
//@ [i686_wrs_vxworks] compile-flags: --target i686-wrs-vxworks
|
//@ [i686_wrs_vxworks] compile-flags: --target i686-wrs-vxworks
|
||||||
//@ [i686_wrs_vxworks] needs-llvm-components: x86
|
//@ [i686_wrs_vxworks] needs-llvm-components: x86
|
||||||
|
Loading…
Reference in New Issue
Block a user