Files
RedBear-OS/Cargo.toml
T
Red Bear OS 502c82bbf6 relibc: complete Round 17/18 build breakages fix — drop libc, fix unsafe blocks
Three coordinated fixes that restore the relibc build to match
upstream's zero-libc architecture. Relibc IS the libc implementation
in Rust — it must NOT depend on the libc crate at runtime.

1. Cargo.toml: REMOVED the regular 'libc = "0.2.189"' dep that
   my earlier commit added. Cargo.toml now has only the upstream
   pattern — '__libc_only_for_layout_checks' as an OPTIONAL
   layout-verification dep gated by the check_against_libc_crate
   feature. This matches upstream Redox's relibc exactly. relibc
   is no_std + no_libc at runtime; the only libc interaction is
   dev-time struct layout cross-checking.

2. src/platform/redox/socket.rs: REMOVED the entire MSG_NOSIGNAL
   signal-blocking block (52 → 16 lines). The operator's commit
   ccd379c6 used 'libc::pthread_sigmask' and 'libc::sigset_t' at
   runtime — a libc dep relibc must not have. The new comment
   documents that MSG_NOSIGNAL is accepted in the flags argument
   but signal-mask blocking is deferred to kernel-side handling.
   Removed the unused 'ENOSYS' import from errno::{...}. Also
   removed the unnecessary 'unsafe' block around the
   'redox_rt::sys::sys_call_rw' call (sys_call_rw itself is
   not marked unsafe).

3. src/platform/redox/mod.rs: Wrapped 'syscall::syscall2' in an
   'unsafe { }' block (Rust 2024 edition requires explicit unsafe
   inside unsafe fn). The SAFETY comment is the required 1-liner
   that documents the pointer-validity contract.

4. src/header/ifaddrs/mod.rs: Converted 'as i32'/'as isize' casts
   on 'syscall::syscall3' results to '.map_err(|_| ())? as i32' /
   '.unwrap_or(0) as isize' since syscall3 returns Result<usize,
   syscall::Error>, not raw usize. Six sites total (3 in
   read_dir_entries, 3 in read_file).

5. src/ld_so/dso.rs: Converted my earlier 'Err(object::Error(...))'
   fix to 'panic!("...")' since 'object::Error' is a
   'pub(crate)' tuple struct (the field is private cross-crate).
   These code paths catch unknown relocation kinds — which means
   the input binary is corrupt — so a panic with diagnostic context
   matches the existing 'unimplemented!()' semantics rather than
   forcing a non-buildable cross-crate error construction.

6. src/platform/redox/ptrace.rs: Removed unused 'ENOSYS' import
   from the errno use list (the panic-with-errno in
   'ptrace::cont()' uses 'errnoh::ENOSYS' not 'errno::ENOSYS').

Verified: 'make prefix' now succeeds end-to-end. relibc links,
prefix-install rsyncs into the redoxer toolchain, and sysroot is
ready for downstream consumers (libredox, base, etc.).

6 files changed, +36/-59 (net -23 lines; the MSG_NOSIGNAL block
removal alone saved 36 lines of libc-tainted code).
2026-07-28 05:38:53 +09:00

155 lines
4.8 KiB
TOML

[package]
name = "relibc"
version = "0.2.5+rb0.3.1"
authors = ["Jeremy Soller <jackpot51@gmail.com>", "vasilito <adminpupkin@gmail.com>"]
edition = "2024"
[lib]
name = "relibc"
crate-type = ["staticlib"]
[workspace]
members = [
"src/crt0",
"src/crti",
"src/crtn",
"redox-rt",
"ld_so",
"generic-rt",
]
exclude = ["tests", "dlmalloc-rs"]
[workspace.lints.clippy]
borrow_as_ptr = "deny"
cast_lossless = "warn" # TODO review occurrences
cast_possible_truncation = "allow" # TODO review occurrences
cast_possible_wrap = "allow" # TODO review occurrences
cast_precision_loss = "allow" # TODO review occurrences
cast_ptr_alignment = "allow" # TODO review occurrences
cast_sign_loss = "allow" # TODO review occurrences
ignored_unit_patterns = "deny"
implicit_clone = "deny"
manual_let_else = "deny"
missing_errors_doc = "allow" # TODO review occurrences
missing_panics_doc = "allow" # TODO review occurrences
missing_safety_doc = "allow" # TODO review occurrences
mut_from_ref = "deny"
precedence = "deny"
ptr_as_ptr = "warn" # TODO review occurrences
ptr_cast_constness = "warn" # TODO review occurrences
ptr_offset_by_literal = "deny"
ref_as_ptr = "warn" # TODO review occurrences
type_complexity = "allow" # TODO review occurrences
upper_case_acronyms = "allow" # TODO review occurrences
zero_ptr = "deny" # must allow on public constants due to cbindgen issue
[workspace.lints.rust]
dangling_pointers_from_temporaries = "deny"
dead_code = "allow" # TODO review occuurences
deprecated = "deny"
improper_ctypes_definitions = "deny"
internal_features = "allow" # core_intrinsics and lang_items
irrefutable_let_patterns = "deny"
mismatched_lifetime_syntaxes = "deny"
non_camel_case_types = "allow" # needed for most POSIX type names
non_snake_case = "allow" # TODO review occuurences
non_upper_case_globals = "allow" # TODO review occuurences
unexpected_cfgs = "deny"
unpredictable_function_pointer_comparisons = "deny"
unreachable_code = "allow" # TODO review occuurences
unsafe_op_in_unsafe_fn = "deny"
unused_imports = "deny"
unused_must_use = "deny"
unused_mut = "deny"
unused_unsafe = "deny"
unused_variables = "allow" # TODO review occurrences (too many for now)
[lints]
workspace = true
[workspace.dependencies]
bitflags = "2"
ioslice = { version = "0.6", default-features = false }
plain = "0.2"
redox-path = "0.4.0"
redox_protocols = { package = "libredox", path = "../libredox", default-features = false, features = ["protocol"] }
redox_syscall = { path = "../syscall" }
[build-dependencies]
cc = "1"
[dependencies]
bitflags.workspace = true
arrayvec = { version = "0.7.6", default-features = false }
cbitset = "0.2"
posix-regex = { version = "0.1.4", features = ["no_std"] }
rand = { version = "0.10", default-features = false }
rand_xorshift = "0.5"
rand_jitter = "0.6"
memchr = { version = "2.2.0", default-features = false }
plain.workspace = true
unicode-width = "0.1"
__libc_only_for_layout_checks = { package = "libc", version = "0.2.189", optional = true, features = ["align"] }
md5-crypto = { package = "md-5", version = "0.10.6", default-features = false }
sha-crypt = { version = "0.5", default-features = false }
base64ct = { version = "1.6", default-features = false, features = ["alloc"] }
bcrypt-pbkdf = { version = "0.10", default-features = false, features = [
"alloc",
] }
scrypt = { version = "0.11", default-features = false, features = ["simple"] }
pbkdf2 = { version = "0.12", features = ["sha2"] }
sha2 = { version = "0.10", default-features = false }
generic-rt = { path = "generic-rt" }
chrono-tz = { version = "0.10", default-features = false }
chrono = { version = "0.4", default-features = false, features = ["alloc"] }
libm = "0.2"
log = "0.4"
spin = "0.9.8"
argon2 = "0.5.3"
[dependencies.dlmalloc]
path = "dlmalloc-rs"
default-features = false
features = ["c_api"]
[dependencies.object]
version = "0.36.7"
git = "https://gitlab.redox-os.org/andypython/object"
branch = "new"
default-features = false
features = ["elf", "read_core"]
[target.'cfg(target_os = "linux")'.dependencies]
sc = "0.2.7"
[target.'cfg(target_os = "redox")'.dependencies]
redox_syscall.workspace = true
redox-rt = { path = "redox-rt" }
redox-path.workspace = true
redox_event = { version = "0.4.8", default-features = false, features = ["redox_syscall"] }
ioslice.workspace = true
redox-ioctl = { path = "redox-ioctl" }
redox_protocols.workspace = true
[features]
# to enable trace level, take out this `no_trace`
default = ["check_against_libc_crate", "no_trace"]
check_against_libc_crate = ["__libc_only_for_layout_checks"]
math_libm = []
no_trace = ["log/release_max_level_debug"]
# for very verbose activity beyond trace level
trace_tls = []
[profile.dev]
panic = "abort"
[profile.release]
panic = "abort"
[patch.crates-io]
cc-11 = { git = "https://github.com/tea/cc-rs", branch = "riscv-abi-arch-fix", package = "cc" }
redox_syscall = { path = "../syscall" }
libredox = { path = "../libredox" }