Skip to content

Commit 6cca0e2

Browse files
jhprattgitbot
authored and
gitbot
committed
Rollup merge of rust-lang#133631 - flba-eb:add_nto_qnx71_iosock_support, r=workingjubilee
Support QNX 7.1 with `io-sock`+libstd and QNX 8.0 (`no_std` only) Changes of this pull request: 1. Refactor code for qnx nto targets to share more code in file `nto_qnx.rs` 1. Add support for an additional network stack on nto qnx 7.1. QNX 7.1 supports two network stacks: 1. `io-pkt`, which is default 2. `io-sock`, which is optional on 7.1 but default in QNX 8.0 As one can see in the [io-sock migration notes](https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.io_sock/topic/migrate_app.html), this changes the libc API in a way similar to e.g. linux-gnu vs. linux-musl. This change adds a new target which has a different value for `target_env`, so that e.g. libc can distinguish between both APIs. 2. Add initial support for QNX 8.0, thanks to AkhilTThomas. As it turned out, the problem with forking many processes still exists in QNX 8.0. Because if this, we are now using it for any QNX version (i.e. not check for `target_env` anymore).
2 parents 352a163 + 018b8cf commit 6cca0e2

File tree

2 files changed

+5
-11
lines changed

2 files changed

+5
-11
lines changed

std/Cargo.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ test = true
139139
level = "warn"
140140
check-cfg = [
141141
'cfg(bootstrap)',
142-
'cfg(target_arch, values("xtensa"))',
142+
'cfg(target_arch, values("xtensa", "aarch64-unknown-nto-qnx710_iosock", "x86_64-pc-nto-qnx710_iosock", "x86_64-pc-nto-qnx800","aarch64-unknown-nto-qnx800"))',
143+
'cfg(target_env, values("nto71_iosock", "nto80"))',
143144
# std use #[path] imports to portable-simd `std_float` crate
144145
# and to the `backtrace` crate which messes-up with Cargo list
145146
# of declared features, we therefor expect any feature cfg

std/src/sys/pal/unix/process/process_unix.rs

+3-10
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ use crate::sys::process::process_common::*;
1919
use crate::{fmt, mem, sys};
2020

2121
cfg_if::cfg_if! {
22-
// This workaround is only needed for QNX 7.0 and 7.1. The bug should have been fixed in 8.0
23-
if #[cfg(any(target_env = "nto70", target_env = "nto71"))] {
22+
if #[cfg(target_os = "nto")] {
2423
use crate::thread;
2524
use libc::{c_char, posix_spawn_file_actions_t, posix_spawnattr_t};
2625
use crate::time::Duration;
@@ -187,12 +186,7 @@ impl Command {
187186

188187
// Attempts to fork the process. If successful, returns Ok((0, -1))
189188
// in the child, and Ok((child_pid, -1)) in the parent.
190-
#[cfg(not(any(
191-
target_os = "watchos",
192-
target_os = "tvos",
193-
target_env = "nto70",
194-
target_env = "nto71"
195-
)))]
189+
#[cfg(not(any(target_os = "watchos", target_os = "tvos", target_os = "nto")))]
196190
unsafe fn do_fork(&mut self) -> Result<pid_t, io::Error> {
197191
cvt(libc::fork())
198192
}
@@ -201,8 +195,7 @@ impl Command {
201195
// or closed a file descriptor while the fork() was occurring".
202196
// Documentation says "... or try calling fork() again". This is what we do here.
203197
// See also https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.lib_ref/topic/f/fork.html
204-
// This workaround is only needed for QNX 7.0 and 7.1. The bug should have been fixed in 8.0
205-
#[cfg(any(target_env = "nto70", target_env = "nto71"))]
198+
#[cfg(target_os = "nto")]
206199
unsafe fn do_fork(&mut self) -> Result<pid_t, io::Error> {
207200
use crate::sys::os::errno;
208201

0 commit comments

Comments
 (0)