From 59e028d96dcb93fae9b9d650ce86260e6c3d5f9e Mon Sep 17 00:00:00 2001 From: auronandace Date: Sat, 13 Dec 2025 20:56:02 +0000 Subject: [PATCH 1/2] Update and add spec links --- src/header/pthread/mod.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/header/pthread/mod.rs b/src/header/pthread/mod.rs index 25252f307a..75b1274ed9 100644 --- a/src/header/pthread/mod.rs +++ b/src/header/pthread/mod.rs @@ -1,4 +1,6 @@ -//! pthread.h implementation for Redox, following https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/pthread.h.html +//! `pthread.h` implementation. +//! +//! See . use alloc::collections::LinkedList; use core::{cell::Cell, ptr::NonNull}; @@ -79,6 +81,7 @@ pub use self::cond::*; #[thread_local] pub static mut fork_hooks: [LinkedList; 3] = [const { LinkedList::new() }; 3]; +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_cancel(thread: pthread_t) -> c_int { match pthread::cancel(&*thread.cast()) { @@ -87,6 +90,7 @@ pub unsafe extern "C" fn pthread_cancel(thread: pthread_t) -> c_int { } } +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_create( pthread: *mut pthread_t, @@ -105,6 +109,7 @@ pub unsafe extern "C" fn pthread_create( } } +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_detach(pthread: pthread_t) -> c_int { match pthread::detach(&*pthread.cast()) { @@ -113,6 +118,7 @@ pub unsafe extern "C" fn pthread_detach(pthread: pthread_t) -> c_int { } } +/// See . #[unsafe(no_mangle)] pub extern "C" fn pthread_equal(pthread1: pthread_t, pthread2: pthread_t) -> c_int { core::ptr::eq(pthread1, pthread2).into() @@ -143,17 +149,21 @@ pub extern "C" fn pthread_atfork( 0 } +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_exit(retval: *mut c_void) -> ! { pthread::exit_current_thread(pthread::Retval(retval)) } +// Not in latest POSIX, mark as depreciated? +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_getconcurrency() -> c_int { // Redox and Linux threads are 1:1, not M:N. 1 } +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_getcpuclockid( thread: pthread_t, @@ -168,6 +178,7 @@ pub unsafe extern "C" fn pthread_getcpuclockid( } } +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_getschedparam( thread: pthread_t, @@ -188,6 +199,7 @@ pub unsafe extern "C" fn pthread_getschedparam( pub mod tls; pub use tls::*; +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_join(thread: pthread_t, retval: *mut *mut c_void) -> c_int { match pthread::join(&*thread.cast()) { @@ -210,10 +222,13 @@ pub use self::once::*; pub mod rwlock; pub use self::rwlock::*; +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_self() -> pthread_t { pthread::current_thread().unwrap_unchecked() as *const _ as *mut _ } + +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_setcancelstate(state: c_int, oldstate: *mut c_int) -> c_int { match pthread::set_cancel_state(state) { @@ -228,6 +243,8 @@ pub unsafe extern "C" fn pthread_setcancelstate(state: c_int, oldstate: *mut c_i Err(Errno(error)) => error, } } + +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_setcanceltype(ty: c_int, oldty: *mut c_int) -> c_int { match pthread::set_cancel_type(ty) { @@ -243,12 +260,15 @@ pub unsafe extern "C" fn pthread_setcanceltype(ty: c_int, oldty: *mut c_int) -> } } +// Not in latest POSIX, mark as depreciated? +/// See . #[unsafe(no_mangle)] pub extern "C" fn pthread_setconcurrency(concurrency: c_int) -> c_int { // Redox and Linux threads are 1:1, not M:N. 0 } +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_setschedparam( thread: pthread_t, @@ -257,6 +277,8 @@ pub unsafe extern "C" fn pthread_setschedparam( ) -> c_int { e(pthread::set_sched_param(&*thread.cast(), policy, &*param)) } + +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_setschedprio(thread: pthread_t, prio: c_int) -> c_int { e(pthread::set_sched_priority(&*thread.cast(), prio)) @@ -265,6 +287,7 @@ pub unsafe extern "C" fn pthread_setschedprio(thread: pthread_t, prio: c_int) -> pub mod spin; pub use self::spin::*; +/// See . #[unsafe(no_mangle)] pub unsafe extern "C" fn pthread_testcancel() { pthread::testcancel(); From d2429a116447abfad7134b111fb7157c4b6cdd81 Mon Sep 17 00:00:00 2001 From: auronandace Date: Sat, 13 Dec 2025 21:10:51 +0000 Subject: [PATCH 2/2] only import the needed types --- src/header/pthread/mod.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/header/pthread/mod.rs b/src/header/pthread/mod.rs index 75b1274ed9..f01cfa1f75 100644 --- a/src/header/pthread/mod.rs +++ b/src/header/pthread/mod.rs @@ -8,7 +8,15 @@ use core::{cell::Cell, ptr::NonNull}; use crate::{ error::Errno, header::{sched::*, time::timespec}, - platform::{Pal, Sys, types::*}, + platform::{ + Pal, Sys, + types::{ + c_int, c_uchar, c_uint, c_void, clockid_t, pthread_attr_t, pthread_barrier_t, + pthread_barrierattr_t, pthread_cond_t, pthread_condattr_t, pthread_key_t, + pthread_mutex_t, pthread_mutexattr_t, pthread_once_t, pthread_rwlock_t, + pthread_rwlockattr_t, pthread_spinlock_t, pthread_t, size_t, + }, + }, pthread, };