Skip to content

Commit 6f435cb

Browse files
committedSep 3, 2024
Port std library to RTEMS
·
1.91.11.83.0
1 parent 6199b69 commit 6f435cb

File tree

22 files changed

+488
-14
lines changed

22 files changed

+488
-14
lines changed
 

‎library/core/Cargo.toml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ check-cfg = [
4343
'cfg(bootstrap)',
4444
'cfg(no_fp_fmt_parse)',
4545
'cfg(stdarch_intel_sde)',
46+
# #[cfg(bootstrap)] rtems
47+
'cfg(target_os, values("rtems"))',
4648
# core use #[path] imports to portable-simd `core_simd` crate
4749
# and to stdarch `core_arch` crate which messes-up with Cargo list
4850
# of declared features, we therefor expect any feature cfg

‎library/core/src/ffi/mod.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ mod c_char_definition {
110110
all(target_os = "android", any(target_arch = "aarch64", target_arch = "arm")),
111111
all(target_os = "l4re", target_arch = "x86_64"),
112112
all(
113-
any(target_os = "freebsd", target_os = "openbsd"),
113+
any(target_os = "freebsd", target_os = "openbsd", target_os = "rtems"),
114114
any(
115115
target_arch = "aarch64",
116116
target_arch = "arm",

‎library/panic_unwind/Cargo.toml‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,10 @@ cfg-if = { version = "1.0", features = ['rustc-dep-of-std'] }
2020

2121
[target.'cfg(not(all(windows, target_env = "msvc")))'.dependencies]
2222
libc = { version = "0.2", default-features = false }
23+
24+
[lints.rust.unexpected_cfgs]
25+
level = "warn"
26+
check-cfg = [
27+
# #[cfg(bootstrap)] rtems
28+
'cfg(target_os, values("rtems"))',
29+
]

‎library/panic_unwind/src/lib.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ cfg_if::cfg_if! {
4848
target_os = "psp",
4949
target_os = "xous",
5050
target_os = "solid_asp3",
51-
all(target_family = "unix", not(target_os = "espidf")),
51+
all(target_family = "unix", not(any(target_os = "espidf", target_os = "rtems"))),
5252
all(target_vendor = "fortanix", target_env = "sgx"),
5353
target_family = "wasm",
5454
))] {

‎library/std/Cargo.toml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,6 @@ check-cfg = [
146146
# and to the `backtrace` crate which messes-up with Cargo list
147147
# of declared features, we therefor expect any feature cfg
148148
'cfg(feature, values(any()))',
149+
# #[cfg(bootstrap)] rtems
150+
'cfg(target_os, values("rtems"))',
149151
]

‎library/std/build.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ fn main() {
5353
|| target_os == "uefi"
5454
|| target_os == "teeos"
5555
|| target_os == "zkvm"
56+
|| target_os == "rtems"
5657

5758
// See src/bootstrap/src/core/build_steps/synthetic_targets.rs
5859
|| env::var("RUSTC_BOOTSTRAP_SYNTHETIC_TARGET").is_ok()

‎library/std/src/os/mod.rs‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ pub mod nto;
143143
pub mod openbsd;
144144
#[cfg(target_os = "redox")]
145145
pub mod redox;
146+
#[cfg(target_os = "rtems")]
147+
pub mod rtems;
146148
#[cfg(target_os = "solaris")]
147149
pub mod solaris;
148150
#[cfg(target_os = "solid_asp3")]

‎library/std/src/os/rtems/fs.rs‎

Lines changed: 374 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,374 @@
1+
#![stable(feature = "metadata_ext", since = "1.1.0")]
2+
3+
use crate::fs::Metadata;
4+
use crate::sys_common::AsInner;
5+
6+
/// OS-specific extensions to [`fs::Metadata`].
7+
///
8+
/// [`fs::Metadata`]: crate::fs::Metadata
9+
#[stable(feature = "metadata_ext", since = "1.1.0")]
10+
pub trait MetadataExt {
11+
/// Returns the device ID on which this file resides.
12+
///
13+
/// # Examples
14+
///
15+
/// ```no_run
16+
/// use std::fs;
17+
/// use std::io;
18+
/// use std::os::rtems::fs::MetadataExt;
19+
///
20+
/// fn main() -> io::Result<()> {
21+
/// let meta = fs::metadata("some_file")?;
22+
/// println!("{}", meta.st_dev());
23+
/// Ok(())
24+
/// }
25+
/// ```
26+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
27+
fn st_dev(&self) -> u64;
28+
29+
/// Returns the inode number.
30+
///
31+
/// # Examples
32+
///
33+
/// ```no_run
34+
/// use std::fs;
35+
/// use std::io;
36+
/// use std::os::rtems::fs::MetadataExt;
37+
///
38+
/// fn main() -> io::Result<()> {
39+
/// let meta = fs::metadata("some_file")?;
40+
/// println!("{}", meta.st_ino());
41+
/// Ok(())
42+
/// }
43+
/// ```
44+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
45+
fn st_ino(&self) -> u64;
46+
47+
/// Returns the file type and mode.
48+
///
49+
/// # Examples
50+
///
51+
/// ```no_run
52+
/// use std::fs;
53+
/// use std::io;
54+
/// use std::os::rtems::fs::MetadataExt;
55+
///
56+
/// fn main() -> io::Result<()> {
57+
/// let meta = fs::metadata("some_file")?;
58+
/// println!("{}", meta.st_mode());
59+
/// Ok(())
60+
/// }
61+
/// ```
62+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
63+
fn st_mode(&self) -> u32;
64+
65+
/// Returns the number of hard links to file.
66+
///
67+
/// # Examples
68+
///
69+
/// ```no_run
70+
/// use std::fs;
71+
/// use std::io;
72+
/// use std::os::rtems::fs::MetadataExt;
73+
///
74+
/// fn main() -> io::Result<()> {
75+
/// let meta = fs::metadata("some_file")?;
76+
/// println!("{}", meta.st_nlink());
77+
/// Ok(())
78+
/// }
79+
/// ```
80+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
81+
fn st_nlink(&self) -> u64;
82+
83+
/// Returns the user ID of the file owner.
84+
///
85+
/// # Examples
86+
///
87+
/// ```no_run
88+
/// use std::fs;
89+
/// use std::io;
90+
/// use std::os::rtems::fs::MetadataExt;
91+
///
92+
/// fn main() -> io::Result<()> {
93+
/// let meta = fs::metadata("some_file")?;
94+
/// println!("{}", meta.st_uid());
95+
/// Ok(())
96+
/// }
97+
/// ```
98+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
99+
fn st_uid(&self) -> u32;
100+
101+
/// Returns the group ID of the file owner.
102+
///
103+
/// # Examples
104+
///
105+
/// ```no_run
106+
/// use std::fs;
107+
/// use std::io;
108+
/// use std::os::rtems::fs::MetadataExt;
109+
///
110+
/// fn main() -> io::Result<()> {
111+
/// let meta = fs::metadata("some_file")?;
112+
/// println!("{}", meta.st_gid());
113+
/// Ok(())
114+
/// }
115+
/// ```
116+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
117+
fn st_gid(&self) -> u32;
118+
119+
/// Returns the device ID that this file represents. Only relevant for special file.
120+
///
121+
/// # Examples
122+
///
123+
/// ```no_run
124+
/// use std::fs;
125+
/// use std::io;
126+
/// use std::os::rtems::fs::MetadataExt;
127+
///
128+
/// fn main() -> io::Result<()> {
129+
/// let meta = fs::metadata("some_file")?;
130+
/// println!("{}", meta.st_rdev());
131+
/// Ok(())
132+
/// }
133+
/// ```
134+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
135+
fn st_rdev(&self) -> u64;
136+
137+
/// Returns the size of the file (if it is a regular file or a symbolic link) in bytes.
138+
///
139+
/// The size of a symbolic link is the length of the pathname it contains,
140+
/// without a terminating null byte.
141+
///
142+
/// # Examples
143+
///
144+
/// ```no_run
145+
/// use std::fs;
146+
/// use std::io;
147+
/// use std::os::rtems::fs::MetadataExt;
148+
///
149+
/// fn main() -> io::Result<()> {
150+
/// let meta = fs::metadata("some_file")?;
151+
/// println!("{}", meta.st_size());
152+
/// Ok(())
153+
/// }
154+
/// ```
155+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
156+
fn st_size(&self) -> u64;
157+
158+
/// Returns the last access time of the file, in seconds since Unix Epoch.
159+
///
160+
/// # Examples
161+
///
162+
/// ```no_run
163+
/// use std::fs;
164+
/// use std::io;
165+
/// use std::os::rtems::fs::MetadataExt;
166+
///
167+
/// fn main() -> io::Result<()> {
168+
/// let meta = fs::metadata("some_file")?;
169+
/// println!("{}", meta.st_atime());
170+
/// Ok(())
171+
/// }
172+
/// ```
173+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
174+
fn st_atime(&self) -> i64;
175+
176+
/// Returns the last access time of the file, in nanoseconds since [`st_atime`].
177+
///
178+
/// [`st_atime`]: Self::st_atime
179+
///
180+
/// # Examples
181+
///
182+
/// ```no_run
183+
/// use std::fs;
184+
/// use std::io;
185+
/// use std::os::rtems::fs::MetadataExt;
186+
///
187+
/// fn main() -> io::Result<()> {
188+
/// let meta = fs::metadata("some_file")?;
189+
/// println!("{}", meta.st_atime_nsec());
190+
/// Ok(())
191+
/// }
192+
/// ```
193+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
194+
fn st_atime_nsec(&self) -> i64;
195+
196+
/// Returns the last modification time of the file, in seconds since Unix Epoch.
197+
///
198+
/// # Examples
199+
///
200+
/// ```no_run
201+
/// use std::fs;
202+
/// use std::io;
203+
/// use std::os::rtems::fs::MetadataExt;
204+
///
205+
/// fn main() -> io::Result<()> {
206+
/// let meta = fs::metadata("some_file")?;
207+
/// println!("{}", meta.st_mtime());
208+
/// Ok(())
209+
/// }
210+
/// ```
211+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
212+
fn st_mtime(&self) -> i64;
213+
214+
/// Returns the last modification time of the file, in nanoseconds since [`st_mtime`].
215+
///
216+
/// [`st_mtime`]: Self::st_mtime
217+
///
218+
/// # Examples
219+
///
220+
/// ```no_run
221+
/// use std::fs;
222+
/// use std::io;
223+
/// use std::os::rtems::fs::MetadataExt;
224+
///
225+
/// fn main() -> io::Result<()> {
226+
/// let meta = fs::metadata("some_file")?;
227+
/// println!("{}", meta.st_mtime_nsec());
228+
/// Ok(())
229+
/// }
230+
/// ```
231+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
232+
fn st_mtime_nsec(&self) -> i64;
233+
234+
/// Returns the last status change time of the file, in seconds since Unix Epoch.
235+
///
236+
/// # Examples
237+
///
238+
/// ```no_run
239+
/// use std::fs;
240+
/// use std::io;
241+
/// use std::os::rtems::fs::MetadataExt;
242+
///
243+
/// fn main() -> io::Result<()> {
244+
/// let meta = fs::metadata("some_file")?;
245+
/// println!("{}", meta.st_ctime());
246+
/// Ok(())
247+
/// }
248+
/// ```
249+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
250+
fn st_ctime(&self) -> i64;
251+
252+
/// Returns the last status change time of the file, in nanoseconds since [`st_ctime`].
253+
///
254+
/// [`st_ctime`]: Self::st_ctime
255+
///
256+
/// # Examples
257+
///
258+
/// ```no_run
259+
/// use std::fs;
260+
/// use std::io;
261+
/// use std::os::rtems::fs::MetadataExt;
262+
///
263+
/// fn main() -> io::Result<()> {
264+
/// let meta = fs::metadata("some_file")?;
265+
/// println!("{}", meta.st_ctime_nsec());
266+
/// Ok(())
267+
/// }
268+
/// ```
269+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
270+
fn st_ctime_nsec(&self) -> i64;
271+
272+
/// Returns the "preferred" block size for efficient filesystem I/O.
273+
///
274+
/// # Examples
275+
///
276+
/// ```no_run
277+
/// use std::fs;
278+
/// use std::io;
279+
/// use std::os::rtems::fs::MetadataExt;
280+
///
281+
/// fn main() -> io::Result<()> {
282+
/// let meta = fs::metadata("some_file")?;
283+
/// println!("{}", meta.st_blksize());
284+
/// Ok(())
285+
/// }
286+
/// ```
287+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
288+
fn st_blksize(&self) -> u64;
289+
290+
/// Returns the number of blocks allocated to the file, 512-byte units.
291+
///
292+
/// # Examples
293+
///
294+
/// ```no_run
295+
/// use std::fs;
296+
/// use std::io;
297+
/// use std::os::rtems::fs::MetadataExt;
298+
///
299+
/// fn main() -> io::Result<()> {
300+
/// let meta = fs::metadata("some_file")?;
301+
/// println!("{}", meta.st_blocks());
302+
/// Ok(())
303+
/// }
304+
/// ```
305+
#[stable(feature = "metadata_ext2", since = "1.8.0")]
306+
fn st_blocks(&self) -> u64;
307+
}
308+
309+
#[stable(feature = "metadata_ext", since = "1.1.0")]
310+
impl MetadataExt for Metadata {
311+
fn st_dev(&self) -> u64 {
312+
self.as_inner().as_inner().st_dev as u64
313+
}
314+
315+
fn st_ino(&self) -> u64 {
316+
self.as_inner().as_inner().st_ino as u64
317+
}
318+
319+
fn st_mode(&self) -> u32 {
320+
self.as_inner().as_inner().st_mode as u32
321+
}
322+
323+
fn st_nlink(&self) -> u64 {
324+
self.as_inner().as_inner().st_nlink as u64
325+
}
326+
327+
fn st_uid(&self) -> u32 {
328+
self.as_inner().as_inner().st_uid as u32
329+
}
330+
331+
fn st_gid(&self) -> u32 {
332+
self.as_inner().as_inner().st_gid as u32
333+
}
334+
335+
fn st_rdev(&self) -> u64 {
336+
self.as_inner().as_inner().st_rdev as u64
337+
}
338+
339+
fn st_size(&self) -> u64 {
340+
self.as_inner().as_inner().st_size as u64
341+
}
342+
343+
fn st_atime(&self) -> i64 {
344+
self.as_inner().as_inner().st_atime as i64
345+
}
346+
347+
fn st_atime_nsec(&self) -> i64 {
348+
0
349+
}
350+
351+
fn st_mtime(&self) -> i64 {
352+
self.as_inner().as_inner().st_mtime as i64
353+
}
354+
355+
fn st_mtime_nsec(&self) -> i64 {
356+
0
357+
}
358+
359+
fn st_ctime(&self) -> i64 {
360+
self.as_inner().as_inner().st_ctime as i64
361+
}
362+
363+
fn st_ctime_nsec(&self) -> i64 {
364+
0
365+
}
366+
367+
fn st_blksize(&self) -> u64 {
368+
self.as_inner().as_inner().st_blksize as u64
369+
}
370+
371+
fn st_blocks(&self) -> u64 {
372+
self.as_inner().as_inner().st_blocks as u64
373+
}
374+
}

‎library/std/src/os/rtems/mod.rs‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#![stable(feature = "raw_ext", since = "1.1.0")]
2+
#![forbid(unsafe_op_in_unsafe_fn)]
3+
pub mod fs;
4+
pub(crate) mod raw;

‎library/std/src/os/rtems/raw.rs‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//! rtems raw type definitions
2+
3+
#![stable(feature = "raw_ext", since = "1.1.0")]
4+
#![deprecated(
5+
since = "1.8.0",
6+
note = "these type aliases are no longer supported by \
7+
the standard library, the `libc` crate on \
8+
crates.io should be used instead for the correct \
9+
definitions"
10+
)]
11+
#![allow(deprecated)]
12+
13+
#[stable(feature = "pthread_t", since = "1.8.0")]
14+
pub type pthread_t = libc::pthread_t;
15+
16+
#[stable(feature = "raw_ext", since = "1.1.0")]
17+
pub type blkcnt_t = libc::blkcnt_t;
18+
19+
#[stable(feature = "raw_ext", since = "1.1.0")]
20+
pub type blksize_t = libc::blksize_t;
21+
#[stable(feature = "raw_ext", since = "1.1.0")]
22+
pub type dev_t = libc::dev_t;
23+
#[stable(feature = "raw_ext", since = "1.1.0")]
24+
pub type ino_t = libc::ino_t;
25+
#[stable(feature = "raw_ext", since = "1.1.0")]
26+
pub type mode_t = libc::mode_t;
27+
#[stable(feature = "raw_ext", since = "1.1.0")]
28+
pub type nlink_t = libc::nlink_t;
29+
#[stable(feature = "raw_ext", since = "1.1.0")]
30+
pub type off_t = libc::off_t;
31+
32+
#[stable(feature = "raw_ext", since = "1.1.0")]
33+
pub type time_t = libc::time_t;

‎library/std/src/os/unix/mod.rs‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ mod platform {
7373
pub use crate::os::openbsd::*;
7474
#[cfg(target_os = "redox")]
7575
pub use crate::os::redox::*;
76+
#[cfg(target_os = "rtems")]
77+
pub use crate::os::rtems::*;
7678
#[cfg(target_os = "solaris")]
7779
pub use crate::os::solaris::*;
7880
#[cfg(target_os = "vita")]

‎library/std/src/sys/pal/unix/args.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ impl DoubleEndedIterator for Args {
112112
target_os = "aix",
113113
target_os = "nto",
114114
target_os = "hurd",
115+
target_os = "rtems",
115116
))]
116117
mod imp {
117118
use crate::ffi::c_char;

‎library/std/src/sys/pal/unix/env.rs‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,17 @@ pub mod os {
240240
pub const EXE_EXTENSION: &str = "";
241241
}
242242

243+
#[cfg(target_os = "rtems")]
244+
pub mod os {
245+
pub const FAMILY: &str = "unix";
246+
pub const OS: &str = "rtems";
247+
pub const DLL_PREFIX: &str = "lib";
248+
pub const DLL_SUFFIX: &str = ".so";
249+
pub const DLL_EXTENSION: &str = "so";
250+
pub const EXE_SUFFIX: &str = "";
251+
pub const EXE_EXTENSION: &str = "";
252+
}
253+
243254
#[cfg(target_os = "vxworks")]
244255
pub mod os {
245256
pub const FAMILY: &str = "unix";

‎library/std/src/sys/pal/unix/fs.rs‎

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,7 @@ impl FileAttr {
478478
target_os = "horizon",
479479
target_os = "vita",
480480
target_os = "hurd",
481+
target_os = "rtems",
481482
)))]
482483
pub fn modified(&self) -> io::Result<SystemTime> {
483484
#[cfg(target_pointer_width = "32")]
@@ -490,7 +491,12 @@ impl FileAttr {
490491
SystemTime::new(self.stat.st_mtime as i64, self.stat.st_mtime_nsec as i64)
491492
}
492493

493-
#[cfg(any(target_os = "vxworks", target_os = "espidf", target_os = "vita"))]
494+
#[cfg(any(
495+
target_os = "vxworks",
496+
target_os = "espidf",
497+
target_os = "vita",
498+
target_os = "rtems",
499+
))]
494500
pub fn modified(&self) -> io::Result<SystemTime> {
495501
SystemTime::new(self.stat.st_mtime as i64, 0)
496502
}
@@ -506,6 +512,7 @@ impl FileAttr {
506512
target_os = "horizon",
507513
target_os = "vita",
508514
target_os = "hurd",
515+
target_os = "rtems",
509516
)))]
510517
pub fn accessed(&self) -> io::Result<SystemTime> {
511518
#[cfg(target_pointer_width = "32")]
@@ -518,7 +525,12 @@ impl FileAttr {
518525
SystemTime::new(self.stat.st_atime as i64, self.stat.st_atime_nsec as i64)
519526
}
520527

521-
#[cfg(any(target_os = "vxworks", target_os = "espidf", target_os = "vita"))]
528+
#[cfg(any(
529+
target_os = "vxworks",
530+
target_os = "espidf",
531+
target_os = "vita",
532+
target_os = "rtems"
533+
))]
522534
pub fn accessed(&self) -> io::Result<SystemTime> {
523535
SystemTime::new(self.stat.st_atime as i64, 0)
524536
}
@@ -853,6 +865,7 @@ impl Drop for Dir {
853865
target_os = "fuchsia",
854866
target_os = "horizon",
855867
target_os = "vxworks",
868+
target_os = "rtems",
856869
)))]
857870
{
858871
let fd = unsafe { libc::dirfd(self.0) };
@@ -970,6 +983,7 @@ impl DirEntry {
970983
target_os = "aix",
971984
target_os = "nto",
972985
target_os = "hurd",
986+
target_os = "rtems",
973987
target_vendor = "apple",
974988
))]
975989
pub fn ino(&self) -> u64 {

‎library/std/src/sys/pal/unix/mod.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ pub unsafe fn init(argc: isize, argv: *const *const u8, sigpipe: u8) {
7979
target_os = "l4re",
8080
target_os = "horizon",
8181
target_os = "vita",
82+
target_os = "rtems",
8283
// The poll on Darwin doesn't set POLLNVAL for closed fds.
8384
target_vendor = "apple",
8485
)))]

‎library/std/src/sys/pal/unix/os.rs‎

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ cfg_if::cfg_if! {
3131
}
3232

3333
extern "C" {
34-
#[cfg(not(any(target_os = "dragonfly", target_os = "vxworks")))]
34+
#[cfg(not(any(target_os = "dragonfly", target_os = "vxworks", target_os = "rtems")))]
3535
#[cfg_attr(
3636
any(
3737
target_os = "linux",
@@ -61,13 +61,14 @@ extern "C" {
6161
}
6262

6363
/// Returns the platform-specific value of errno
64-
#[cfg(not(any(target_os = "dragonfly", target_os = "vxworks")))]
64+
#[cfg(not(any(target_os = "dragonfly", target_os = "vxworks", target_os = "rtems")))]
6565
pub fn errno() -> i32 {
6666
unsafe { (*errno_location()) as i32 }
6767
}
6868

6969
/// Sets the platform-specific value of errno
70-
#[cfg(all(not(target_os = "dragonfly"), not(target_os = "vxworks")))] // needed for readdir and syscall!
70+
// needed for readdir and syscall!
71+
#[cfg(all(not(target_os = "dragonfly"), not(target_os = "vxworks"), not(target_os = "rtems")))]
7172
#[allow(dead_code)] // but not all target cfgs actually end up using it
7273
pub fn set_errno(e: i32) {
7374
unsafe { *errno_location() = e as c_int }
@@ -78,6 +79,16 @@ pub fn errno() -> i32 {
7879
unsafe { libc::errnoGet() }
7980
}
8081

82+
#[cfg(target_os = "rtems")]
83+
pub fn errno() -> i32 {
84+
extern "C" {
85+
#[thread_local]
86+
static _tls_errno: c_int;
87+
}
88+
89+
unsafe { _tls_errno as i32 }
90+
}
91+
8192
#[cfg(target_os = "dragonfly")]
8293
pub fn errno() -> i32 {
8394
extern "C" {
@@ -472,7 +483,7 @@ pub fn current_exe() -> io::Result<PathBuf> {
472483
}
473484
}
474485

475-
#[cfg(target_os = "redox")]
486+
#[cfg(any(target_os = "redox", target_os = "rtems"))]
476487
pub fn current_exe() -> io::Result<PathBuf> {
477488
crate::fs::read_to_string("sys:exe").map(PathBuf::from)
478489
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1089,13 +1089,13 @@ fn signal_string(signal: i32) -> &'static str {
10891089
libc::SIGURG => " (SIGURG)",
10901090
#[cfg(not(target_os = "l4re"))]
10911091
libc::SIGXCPU => " (SIGXCPU)",
1092-
#[cfg(not(target_os = "l4re"))]
1092+
#[cfg(not(any(target_os = "l4re", target_os = "rtems")))]
10931093
libc::SIGXFSZ => " (SIGXFSZ)",
1094-
#[cfg(not(target_os = "l4re"))]
1094+
#[cfg(not(any(target_os = "l4re", target_os = "rtems")))]
10951095
libc::SIGVTALRM => " (SIGVTALRM)",
10961096
#[cfg(not(target_os = "l4re"))]
10971097
libc::SIGPROF => " (SIGPROF)",
1098-
#[cfg(not(target_os = "l4re"))]
1098+
#[cfg(not(any(target_os = "l4re", target_os = "rtems")))]
10991099
libc::SIGWINCH => " (SIGWINCH)",
11001100
#[cfg(not(any(target_os = "haiku", target_os = "l4re")))]
11011101
libc::SIGIO => " (SIGIO)",

‎library/std/src/sys/personality/mod.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ cfg_if::cfg_if! {
3131
target_os = "psp",
3232
target_os = "xous",
3333
target_os = "solid_asp3",
34-
all(target_family = "unix", not(target_os = "espidf"), not(target_os = "l4re")),
34+
all(target_family = "unix", not(target_os = "espidf"), not(target_os = "l4re"), not(target_os = "rtems")),
3535
all(target_vendor = "fortanix", target_env = "sgx"),
3636
))] {
3737
mod gcc;

‎library/unwind/Cargo.toml‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,10 @@ llvm-libunwind = []
3434
# If crt-static is enabled, static link to `libunwind.a` provided by system
3535
# If crt-static is disabled, dynamic link to `libunwind.so` provided by system
3636
system-llvm-libunwind = []
37+
38+
[lints.rust.unexpected_cfgs]
39+
level = "warn"
40+
check-cfg = [
41+
# #[cfg(bootstrap)] rtems
42+
'cfg(target_os, values("rtems"))',
43+
]

‎library/unwind/src/lib.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ cfg_if::cfg_if! {
2222
target_os = "l4re",
2323
target_os = "none",
2424
target_os = "espidf",
25+
target_os = "rtems",
2526
))] {
2627
// These "unix" family members do not have unwinder.
2728
} else if #[cfg(any(

‎src/bootstrap/src/core/sanity.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ pub struct Finder {
3434
// Targets can be removed from this list once they are present in the stage0 compiler (usually by updating the beta compiler of the bootstrap).
3535
const STAGE0_MISSING_TARGETS: &[&str] = &[
3636
// just a dummy comment so the list doesn't get onelined
37+
"armv7-rtems-eabihf",
3738
];
3839

3940
/// Minimum version threshold for libstdc++ required when using prebuilt LLVM

‎tests/ui/check-cfg/well-known-values.stderr‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
210210
LL | target_os = "_UNEXPECTED_VALUE",
211211
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
212212
|
213-
= note: expected values for `target_os` are: `aix`, `android`, `cuda`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `redox`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm`
213+
= note: expected values for `target_os` are: `aix`, `android`, `cuda`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm`
214214
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
215215

216216
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
@@ -294,7 +294,7 @@ LL | #[cfg(target_os = "linuz")] // testing that we suggest `linux`
294294
| |
295295
| help: there is a expected value with a similar name: `"linux"`
296296
|
297-
= note: expected values for `target_os` are: `aix`, `android`, `cuda`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `redox`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm`
297+
= note: expected values for `target_os` are: `aix`, `android`, `cuda`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm`
298298
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
299299

300300
warning: 30 warnings emitted

0 commit comments

Comments
 (0)
Please sign in to comment.