mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Auto merge of #146892 - GuillaumeGomez:rollup-fa7lp0n, r=GuillaumeGomez
Rollup of 5 pull requests Successful merges: - rust-lang/rust#146795 (Enable `limit_rdylib_exports` on wasm targets) - rust-lang/rust#146828 (fix a crash in rustdoc merge finalize without input file) - rust-lang/rust#146848 (Add x86_64-unknown-motor (Motor OS) tier 3 target) - rust-lang/rust#146884 (Fix modification check of `rustdoc-json-types`) - rust-lang/rust#146887 (Remove unused #![feature(get_mut_unchecked)] in Rc and Arc examples) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
@@ -845,6 +845,11 @@ fn export_symbols(
|
||||
self.sess.dcx().emit_fatal(errors::VersionScriptWriteFailure { error });
|
||||
}
|
||||
self.link_arg("--dynamic-list").link_arg(path);
|
||||
} else if self.sess.target.is_like_wasm {
|
||||
self.link_arg("--no-export-dynamic");
|
||||
for (sym, _) in symbols {
|
||||
self.link_arg("--export").link_arg(sym);
|
||||
}
|
||||
} else {
|
||||
// Write an LD version script
|
||||
let res: io::Result<()> = try {
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
pub(crate) mod linux_wasm;
|
||||
pub(crate) mod lynxos178;
|
||||
pub(crate) mod managarm_mlibc;
|
||||
pub(crate) mod motor;
|
||||
pub(crate) mod msvc;
|
||||
pub(crate) mod netbsd;
|
||||
pub(crate) mod nto_qnx;
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
use crate::spec::{
|
||||
Cc, FramePointer, LinkerFlavor, Lld, PanicStrategy, StackProbeType, TargetOptions,
|
||||
};
|
||||
|
||||
pub(crate) fn opts() -> TargetOptions {
|
||||
let pre_link_args = TargetOptions::link_args(
|
||||
LinkerFlavor::Gnu(Cc::No, Lld::No),
|
||||
&[
|
||||
"-e",
|
||||
"motor_start",
|
||||
"--no-undefined",
|
||||
"--error-unresolved-symbols",
|
||||
"--no-undefined-version",
|
||||
"-u",
|
||||
"__rust_abort",
|
||||
],
|
||||
);
|
||||
TargetOptions {
|
||||
os: "motor".into(),
|
||||
executables: true,
|
||||
// TLS is false below because if true, the compiler assumes
|
||||
// we handle TLS at the ELF loading level, which we don't.
|
||||
// We use "OS level" TLS (see thread/local.rs in stdlib).
|
||||
has_thread_local: false,
|
||||
frame_pointer: FramePointer::NonLeaf,
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::No),
|
||||
main_needs_argc_argv: true,
|
||||
panic_strategy: PanicStrategy::Abort,
|
||||
pre_link_args,
|
||||
stack_probes: StackProbeType::Inline,
|
||||
supports_stack_protector: true,
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
@@ -81,11 +81,6 @@ macro_rules! args {
|
||||
// threaded model which will legalize atomics to normal operations.
|
||||
singlethread: true,
|
||||
|
||||
// Symbol visibility takes care of this for the WebAssembly.
|
||||
// Additionally the only known linker, LLD, doesn't support the script
|
||||
// arguments just yet
|
||||
limit_rdylib_exports: false,
|
||||
|
||||
// we use the LLD shipped with the Rust toolchain by default
|
||||
linker: Some("rust-lld".into()),
|
||||
linker_flavor: LinkerFlavor::WasmLld(Cc::No),
|
||||
|
||||
@@ -1642,6 +1642,7 @@ fn $module() {
|
||||
("aarch64-unknown-hermit", aarch64_unknown_hermit),
|
||||
("riscv64gc-unknown-hermit", riscv64gc_unknown_hermit),
|
||||
("x86_64-unknown-hermit", x86_64_unknown_hermit),
|
||||
("x86_64-unknown-motor", x86_64_unknown_motor),
|
||||
|
||||
("x86_64-unikraft-linux-musl", x86_64_unikraft_linux_musl),
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
use crate::spec::{
|
||||
CodeModel, LinkSelfContainedDefault, LldFlavor, RelocModel, RelroLevel, Target, base,
|
||||
};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let mut base = base::motor::opts();
|
||||
base.cpu = "x86-64".into();
|
||||
base.max_atomic_width = Some(64);
|
||||
base.code_model = Some(CodeModel::Small);
|
||||
|
||||
// We want fully static relocatable binaries. It was surprisingly
|
||||
// difficult to make it happen reliably, especially various
|
||||
// linker-related options below. Mostly trial and error.
|
||||
base.position_independent_executables = true;
|
||||
base.relro_level = RelroLevel::Full;
|
||||
base.static_position_independent_executables = true;
|
||||
base.relocation_model = RelocModel::Pic;
|
||||
base.lld_flavor_json = LldFlavor::Ld;
|
||||
base.link_self_contained = LinkSelfContainedDefault::True;
|
||||
base.dynamic_linking = false;
|
||||
base.crt_static_default = true;
|
||||
base.crt_static_respected = true;
|
||||
|
||||
Target {
|
||||
llvm_target: "x86_64-unknown-none-elf".into(),
|
||||
metadata: crate::spec::TargetMetadata {
|
||||
description: Some("Motor OS".into()),
|
||||
tier: Some(3),
|
||||
host_tools: None,
|
||||
std: None,
|
||||
},
|
||||
pointer_width: 64,
|
||||
data_layout:
|
||||
"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128".into(),
|
||||
arch: "x86_64".into(),
|
||||
options: base,
|
||||
}
|
||||
}
|
||||
@@ -480,8 +480,6 @@ pub fn new_cyclic<F>(data_fn: F) -> Rc<T>
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(get_mut_unchecked)]
|
||||
///
|
||||
/// use std::rc::Rc;
|
||||
///
|
||||
/// let mut five = Rc::<u32>::new_uninit();
|
||||
@@ -572,7 +570,6 @@ pub fn try_new(value: T) -> Result<Rc<T>, AllocError> {
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(allocator_api)]
|
||||
/// #![feature(get_mut_unchecked)]
|
||||
///
|
||||
/// use std::rc::Rc;
|
||||
///
|
||||
@@ -1014,8 +1011,6 @@ impl<T> Rc<[T]> {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(get_mut_unchecked)]
|
||||
///
|
||||
/// use std::rc::Rc;
|
||||
///
|
||||
/// let mut values = Rc::<[u32]>::new_uninit_slice(3);
|
||||
@@ -1181,8 +1176,6 @@ impl<T, A: Allocator> Rc<mem::MaybeUninit<T>, A> {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(get_mut_unchecked)]
|
||||
///
|
||||
/// use std::rc::Rc;
|
||||
///
|
||||
/// let mut five = Rc::<u32>::new_uninit();
|
||||
@@ -1218,8 +1211,6 @@ impl<T, A: Allocator> Rc<[mem::MaybeUninit<T>], A> {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(get_mut_unchecked)]
|
||||
///
|
||||
/// use std::rc::Rc;
|
||||
///
|
||||
/// let mut values = Rc::<[u32]>::new_uninit_slice(3);
|
||||
|
||||
@@ -480,8 +480,6 @@ pub fn new_cyclic<F>(data_fn: F) -> Arc<T>
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(get_mut_unchecked)]
|
||||
///
|
||||
/// use std::sync::Arc;
|
||||
///
|
||||
/// let mut five = Arc::<u32>::new_uninit();
|
||||
@@ -586,7 +584,6 @@ pub fn try_new(data: T) -> Result<Arc<T>, AllocError> {
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(allocator_api)]
|
||||
/// #![feature(get_mut_unchecked)]
|
||||
///
|
||||
/// use std::sync::Arc;
|
||||
///
|
||||
@@ -1156,8 +1153,6 @@ impl<T> Arc<[T]> {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(get_mut_unchecked)]
|
||||
///
|
||||
/// use std::sync::Arc;
|
||||
///
|
||||
/// let mut values = Arc::<[u32]>::new_uninit_slice(3);
|
||||
@@ -1326,8 +1321,6 @@ impl<T, A: Allocator> Arc<mem::MaybeUninit<T>, A> {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(get_mut_unchecked)]
|
||||
///
|
||||
/// use std::sync::Arc;
|
||||
///
|
||||
/// let mut five = Arc::<u32>::new_uninit();
|
||||
@@ -1364,8 +1357,6 @@ impl<T, A: Allocator> Arc<[mem::MaybeUninit<T>], A> {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(get_mut_unchecked)]
|
||||
///
|
||||
/// use std::sync::Arc;
|
||||
///
|
||||
/// let mut values = Arc::<[u32]>::new_uninit_slice(3);
|
||||
|
||||
@@ -38,6 +38,7 @@ pub struct Finder {
|
||||
// just a dummy comment so the list doesn't get onelined
|
||||
"aarch64_be-unknown-hermit",
|
||||
"aarch64_be-unknown-none-softfloat",
|
||||
"x86_64-unknown-motor",
|
||||
];
|
||||
|
||||
/// Minimum version threshold for libstdc++ required when using prebuilt LLVM
|
||||
@@ -239,6 +240,10 @@ pub fn check(build: &mut Build) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if target.contains("motor") {
|
||||
continue;
|
||||
}
|
||||
|
||||
// skip check for cross-targets
|
||||
if skip_target_sanity && target != &build.host_target {
|
||||
continue;
|
||||
|
||||
@@ -431,6 +431,7 @@ target | std | host | notes
|
||||
`x86_64-unknown-l4re-uclibc` | ? | |
|
||||
[`x86_64-unknown-linux-none`](platform-support/x86_64-unknown-linux-none.md) | * | | 64-bit Linux with no libc
|
||||
[`x86_64-unknown-managarm-mlibc`](platform-support/managarm.md) | ? | | x86_64 Managarm
|
||||
[`x86_64-unknown-motor`[(platform-support/motor.md) | ? | | x86_64 Motor OS
|
||||
[`x86_64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 64-bit OpenBSD
|
||||
[`x86_64-unknown-trusty`](platform-support/trusty.md) | ✓ | |
|
||||
`x86_64-uwp-windows-gnu` | ✓ | |
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
# `x86_64-unknown-motor`
|
||||
|
||||
**Tier: 3**
|
||||
|
||||
[Motor OS](https://github.com/moturus/motor-os) is a new operating system
|
||||
for virtualized environments.
|
||||
|
||||
## Target maintainers
|
||||
|
||||
[@lasiotus](https://github.com/lasiotus)
|
||||
|
||||
## Requirements
|
||||
|
||||
This target is cross-compiled. There are no special requirements for the host.
|
||||
|
||||
Motor OS uses the ELF file format.
|
||||
|
||||
## Building the target
|
||||
|
||||
The target can be built by enabling it for a `rustc` build, for example:
|
||||
|
||||
```toml
|
||||
[build]
|
||||
build-stage = 2
|
||||
target = ["x86_64-unknown-motor"]
|
||||
```
|
||||
|
||||
## Building Rust programs
|
||||
|
||||
Rust standard library is fully supported/implemented, but is not yet part of
|
||||
the official Rust repo, so an out-of-tree building process should be
|
||||
followed, as described in the
|
||||
[build doc](https://github.com/moturus/motor-os/blob/main/docs/build.md).
|
||||
|
||||
## Testing
|
||||
|
||||
Cross-compiled Rust binaries and test artifacts can be executed in Motor OS VMs,
|
||||
as described in e.g.
|
||||
[Hello Motor OS](https://github.com/moturus/motor-os/blob/main/docs/recipes/hello-motor-os.md)
|
||||
example.
|
||||
|
||||
## Cross-compilation toolchains and C code
|
||||
|
||||
C code can be compiled as part of Rust cargo projects. However, there is
|
||||
no libc support.
|
||||
@@ -836,8 +836,10 @@ fn main_args(early_dcx: &mut EarlyDiagCtxt, at_args: &[String]) {
|
||||
config::InputMode::NoInputMergeFinalize => {
|
||||
return wrap_return(
|
||||
dcx,
|
||||
run_merge_finalize(render_options)
|
||||
.map_err(|e| format!("could not write merged cross-crate info: {e}")),
|
||||
rustc_span::create_session_globals_then(options.edition, &[], None, || {
|
||||
run_merge_finalize(render_options)
|
||||
.map_err(|e| format!("could not write merged cross-crate info: {e}"))
|
||||
}),
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -17,11 +17,13 @@ pub fn check(src_path: &Path, ci_info: &crate::CiInfo, diag_ctx: DiagCtx) {
|
||||
};
|
||||
|
||||
// First we check that `src/rustdoc-json-types` was modified.
|
||||
if !crate::files_modified(ci_info, |p| p == RUSTDOC_JSON_TYPES) {
|
||||
if !crate::files_modified(ci_info, |p| p.starts_with(RUSTDOC_JSON_TYPES)) {
|
||||
// `rustdoc-json-types` was not modified so nothing more to check here.
|
||||
check.verbose_msg("`rustdoc-json-types` was not modified.");
|
||||
return;
|
||||
}
|
||||
|
||||
check.message("`rustdoc-json-types` modified, checking format version");
|
||||
|
||||
// Then we check that if `FORMAT_VERSION` was updated, the `Latest feature:` was also updated.
|
||||
match crate::git_diff(base_commit, src_path.join("rustdoc-json-types")) {
|
||||
Some(output) => {
|
||||
|
||||
@@ -658,6 +658,9 @@
|
||||
//@ revisions: x86_64_unknown_managarm_mlibc
|
||||
//@ [x86_64_unknown_managarm_mlibc] compile-flags: --target x86_64-unknown-managarm-mlibc
|
||||
//@ [x86_64_unknown_managarm_mlibc] needs-llvm-components: x86
|
||||
//@ revisions: x86_64_unknown_motor
|
||||
//@ [x86_64_unknown_motor] compile-flags: --target x86_64-unknown-motor
|
||||
//@ [x86_64_unknown_motor] needs-llvm-components: x86
|
||||
//@ revisions: x86_64_unknown_netbsd
|
||||
//@ [x86_64_unknown_netbsd] compile-flags: --target x86_64-unknown-netbsd
|
||||
//@ [x86_64_unknown_netbsd] needs-llvm-components: x86
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
// Running --merge=finalize without an input crate root should not trigger ICE.
|
||||
// Issue: https://github.com/rust-lang/rust/issues/146646
|
||||
|
||||
//@ needs-target-std
|
||||
|
||||
use run_make_support::{path, rustdoc};
|
||||
|
||||
fn main() {
|
||||
let out_dir = path("out");
|
||||
let merged_dir = path("merged");
|
||||
let parts_out_dir = path("parts");
|
||||
rustdoc()
|
||||
.input("sierra.rs")
|
||||
.out_dir(&out_dir)
|
||||
.arg("-Zunstable-options")
|
||||
.arg(format!("--parts-out-dir={}", parts_out_dir.display()))
|
||||
.arg("--merge=none")
|
||||
.run();
|
||||
assert!(parts_out_dir.join("crate-info").exists());
|
||||
|
||||
let output = rustdoc()
|
||||
.arg("-Zunstable-options")
|
||||
.out_dir(&out_dir)
|
||||
.arg(format!("--include-parts-dir={}", parts_out_dir.display()))
|
||||
.arg("--merge=finalize")
|
||||
.run();
|
||||
output.assert_stderr_not_contains("error: the compiler unexpectedly panicked. this is a bug.");
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
pub struct Sierra;
|
||||
@@ -24,7 +24,7 @@ warning: unexpected `cfg` condition value: `does_not_exist`
|
||||
LL | #![cfg(not(target(os = "does_not_exist")))]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `lynxos178`, `macos`, `managarm`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, `trusty`, and `tvos` and 11 more
|
||||
= note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `lynxos178`, `macos`, `managarm`, `motor`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, and `trusty` and 12 more
|
||||
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
||||
= note: `#[warn(unexpected_cfgs)]` on by default
|
||||
|
||||
|
||||
@@ -201,7 +201,7 @@ warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
|
||||
LL | target_os = "_UNEXPECTED_VALUE",
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `lynxos178`, `macos`, `managarm`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `vexos`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm`
|
||||
= note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `lynxos178`, `macos`, `managarm`, `motor`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `vexos`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm`
|
||||
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
||||
|
||||
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
|
||||
@@ -274,7 +274,7 @@ LL | #[cfg(target_os = "linuz")] // testing that we suggest `linux`
|
||||
| |
|
||||
| help: there is a expected value with a similar name: `"linux"`
|
||||
|
|
||||
= note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `lynxos178`, `macos`, `managarm`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `vexos`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm`
|
||||
= note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `lynxos178`, `macos`, `managarm`, `motor`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `vexos`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm`
|
||||
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
||||
|
||||
warning: 28 warnings emitted
|
||||
|
||||
Reference in New Issue
Block a user