Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/new/common/linux_like/mod.rs
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
//! API that primarily comes from Linux but is also used other platforms (e.g. Android).

#[cfg(target_os = "linux")]
pub(crate) mod pthread;
23 changes: 23 additions & 0 deletions src/new/common/linux_like/pthread.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
use crate::prelude::*;

extern "C" {
#[cfg(target_os = "linux")]
pub fn pthread_getaffinity_np(
thread: crate::pthread_t,
cpusetsize: size_t,
cpuset: *mut crate::cpu_set_t,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_getname_np(thread: crate::pthread_t, name: *mut c_char, len: size_t) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_setaffinity_np(
thread: crate::pthread_t,
cpusetsize: size_t,
cpuset: *const crate::cpu_set_t,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_setname_np(thread: crate::pthread_t, name: *const c_char) -> c_int;
}
5 changes: 5 additions & 0 deletions src/new/common/posix/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
//! POSIX APIs that are used by a number of platforms
//!
//! These can be found at: <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/contents.html>.

// FIXME(pthread): eventually all platforms should use this module
#[cfg(target_os = "linux")]
pub(crate) mod pthread;
pub(crate) mod unistd;
196 changes: 196 additions & 0 deletions src/new/common/posix/pthread.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
//! Header: `pthread.h`
//!
//! <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/pthread.h.html>

use crate::prelude::*;

extern "C" {
#[cfg(target_os = "linux")]
pub fn pthread_atfork(
prepare: Option<unsafe extern "C" fn()>,
parent: Option<unsafe extern "C" fn()>,
child: Option<unsafe extern "C" fn()>,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_attr_getguardsize(
attr: *const crate::pthread_attr_t,
guardsize: *mut size_t,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_attr_getinheritsched(
attr: *const crate::pthread_attr_t,
inheritsched: *mut c_int,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_attr_getschedparam(
attr: *const crate::pthread_attr_t,
param: *mut crate::sched_param,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_attr_getschedpolicy(
attr: *const crate::pthread_attr_t,
policy: *mut c_int,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_attr_setguardsize(attr: *mut crate::pthread_attr_t, guardsize: size_t) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_attr_setinheritsched(
attr: *mut crate::pthread_attr_t,
inheritsched: c_int,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_attr_setschedparam(
attr: *mut crate::pthread_attr_t,
param: *const crate::sched_param,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_attr_setschedpolicy(attr: *mut crate::pthread_attr_t, policy: c_int) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_barrier_destroy(barrier: *mut crate::pthread_barrier_t) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_barrier_init(
barrier: *mut crate::pthread_barrier_t,
attr: *const crate::pthread_barrierattr_t,
count: c_uint,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_barrier_wait(barrier: *mut crate::pthread_barrier_t) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_barrierattr_destroy(attr: *mut crate::pthread_barrierattr_t) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_barrierattr_getpshared(
attr: *const crate::pthread_barrierattr_t,
shared: *mut c_int,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_barrierattr_init(attr: *mut crate::pthread_barrierattr_t) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_barrierattr_setpshared(
attr: *mut crate::pthread_barrierattr_t,
shared: c_int,
) -> c_int;

#[cfg(all(target_os = "linux", not(target_env = "ohos")))]
pub fn pthread_cancel(thread: crate::pthread_t) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_condattr_getpshared(
attr: *const crate::pthread_condattr_t,
pshared: *mut c_int,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_create(
native: *mut crate::pthread_t,
attr: *const crate::pthread_attr_t,
f: extern "C" fn(*mut c_void) -> *mut c_void,
value: *mut c_void,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_getcpuclockid(thread: crate::pthread_t, clk_id: *mut crate::clockid_t) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_getschedparam(
native: crate::pthread_t,
policy: *mut c_int,
param: *mut crate::sched_param,
) -> c_int;

// FIXME(reorg): In recent POSIX versions, this is a signal.h function and not required
// in pthread.
#[cfg(target_os = "linux")]
pub fn pthread_kill(thread: crate::pthread_t, sig: c_int) -> c_int;

#[cfg(all(target_os = "linux", not(target_env = "ohos")))]
pub fn pthread_mutex_consistent(mutex: *mut crate::pthread_mutex_t) -> c_int;

#[cfg(target_os = "linux")]
#[cfg_attr(gnu_time_bits64, link_name = "__pthread_mutex_timedlock64")]
pub fn pthread_mutex_timedlock(
lock: *mut crate::pthread_mutex_t,
abstime: *const crate::timespec,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_mutexattr_getprotocol(
attr: *const crate::pthread_mutexattr_t,
protocol: *mut c_int,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_mutexattr_getpshared(
attr: *const crate::pthread_mutexattr_t,
pshared: *mut c_int,
) -> c_int;

#[cfg(all(target_os = "linux", not(target_env = "ohos")))]
pub fn pthread_mutexattr_getrobust(
attr: *const crate::pthread_mutexattr_t,
robustness: *mut c_int,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_mutexattr_setprotocol(
attr: *mut crate::pthread_mutexattr_t,
protocol: c_int,
) -> c_int;

#[cfg(all(target_os = "linux", not(target_env = "ohos")))]
pub fn pthread_mutexattr_setrobust(
attr: *mut crate::pthread_mutexattr_t,
robustness: c_int,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_once(control: *mut crate::pthread_once_t, routine: extern "C" fn()) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_setschedparam(
native: crate::pthread_t,
policy: c_int,
param: *const crate::sched_param,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_setschedprio(native: crate::pthread_t, priority: c_int) -> c_int;

// FIXME(reorg): In recent POSIX versions, this is a signal.h function and not required
// in pthread.
#[cfg(target_os = "linux")]
pub fn pthread_sigmask(
how: c_int,
set: *const crate::sigset_t,
oldset: *mut crate::sigset_t,
) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_spin_destroy(lock: *mut crate::pthread_spinlock_t) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_spin_init(lock: *mut crate::pthread_spinlock_t, pshared: c_int) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_spin_lock(lock: *mut crate::pthread_spinlock_t) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_spin_trylock(lock: *mut crate::pthread_spinlock_t) -> c_int;

#[cfg(target_os = "linux")]
pub fn pthread_spin_unlock(lock: *mut crate::pthread_spinlock_t) -> c_int;
}
6 changes: 6 additions & 0 deletions src/new/glibc/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,15 @@ mod posix {
///
/// <https://github.com/bminor/glibc/tree/master/sysdeps>
mod sysdeps {
// FIXME(pthread): eventually all platforms should use this module
#[cfg(target_os = "linux")]
pub(crate) mod nptl;
pub(crate) mod unix;
}

pub(crate) use posix::*;
// FIXME(pthread): eventually all platforms should use this module
#[cfg(target_os = "linux")]
pub(crate) use sysdeps::nptl::*;
#[cfg(target_os = "linux")]
pub(crate) use sysdeps::unix::linux::*;
7 changes: 7 additions & 0 deletions src/new/glibc/sysdeps/nptl/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
//! Source directory: `sysdeps/nptl/`o
//!
//! Native POSIX threading library.
//!
//! <https://github.com/bminor/glibc/tree/master/sysdeps/nptl>

pub(crate) mod pthread;
50 changes: 50 additions & 0 deletions src/new/glibc/sysdeps/nptl/pthread.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
//! Source header: `sysdeps/nptl/pthread.h`
//!
//! <https://github.com/bminor/glibc/blob/master/sysdeps/nptl/pthread.h>

pub use crate::new::common::linux_like::pthread::{
pthread_getaffinity_np,
pthread_getname_np,
pthread_setaffinity_np,
pthread_setname_np,
};
pub use crate::new::common::posix::pthread::{
pthread_atfork,
pthread_attr_getguardsize,
pthread_attr_getinheritsched,
pthread_attr_getschedparam,
pthread_attr_getschedpolicy,
pthread_attr_setguardsize,
pthread_attr_setinheritsched,
pthread_attr_setschedparam,
pthread_attr_setschedpolicy,
pthread_barrier_destroy,
pthread_barrier_init,
pthread_barrier_wait,
pthread_barrierattr_destroy,
pthread_barrierattr_getpshared,
pthread_barrierattr_init,
pthread_barrierattr_setpshared,
pthread_cancel,
pthread_condattr_getpshared,
pthread_create,
pthread_getcpuclockid,
pthread_getschedparam,
pthread_kill,
pthread_mutex_consistent,
pthread_mutex_timedlock,
pthread_mutexattr_getprotocol,
pthread_mutexattr_getpshared,
pthread_mutexattr_getrobust,
pthread_mutexattr_setprotocol,
pthread_mutexattr_setrobust,
pthread_once,
pthread_setschedparam,
pthread_setschedprio,
pthread_sigmask,
pthread_spin_destroy,
pthread_spin_init,
pthread_spin_lock,
pthread_spin_trylock,
pthread_spin_unlock,
};
11 changes: 9 additions & 2 deletions src/new/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -203,5 +203,12 @@ cfg_if! {
}
}

#[cfg(target_family = "unix")]
pub use unistd::*;
// Per-family headers we export
cfg_if! {
if #[cfg(target_family = "unix")] {
// FIXME(pthread): eventually all platforms should use this module
#[cfg(target_os = "linux")]
pub use pthread::*;
pub use unistd::*;
}
}
2 changes: 2 additions & 0 deletions src/new/musl/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ pub(crate) mod bits {
}
}

pub(crate) mod pthread;

/// Directory: `sys/`
///
/// <https://github.com/kraj/musl/tree/kraj/master/include/sys>
Expand Down
53 changes: 53 additions & 0 deletions src/new/musl/pthread.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
//! Header: `pthread.h`
//!
//! <https://github.com/kraj/musl/blob/kraj/master/include/pthread.h>

pub use crate::new::common::linux_like::pthread::{
pthread_getaffinity_np,
pthread_getname_np,
pthread_setaffinity_np,
pthread_setname_np,
};
pub use crate::new::common::posix::pthread::{
pthread_atfork,
pthread_attr_getguardsize,
pthread_attr_getinheritsched,
pthread_attr_getschedparam,
pthread_attr_getschedpolicy,
pthread_attr_setguardsize,
pthread_attr_setinheritsched,
pthread_attr_setschedparam,
pthread_attr_setschedpolicy,
pthread_barrier_destroy,
pthread_barrier_init,
pthread_barrier_wait,
pthread_barrierattr_destroy,
pthread_barrierattr_getpshared,
pthread_barrierattr_init,
pthread_barrierattr_setpshared,
pthread_condattr_getpshared,
pthread_create,
pthread_getcpuclockid,
pthread_getschedparam,
pthread_kill,
pthread_mutex_timedlock,
pthread_mutexattr_getprotocol,
pthread_mutexattr_getpshared,
pthread_mutexattr_setprotocol,
pthread_once,
pthread_setschedparam,
pthread_setschedprio,
pthread_sigmask,
pthread_spin_destroy,
pthread_spin_init,
pthread_spin_lock,
pthread_spin_trylock,
pthread_spin_unlock,
};
#[cfg(not(target_env = "ohos"))]
pub use crate::new::common::posix::pthread::{
pthread_cancel,
pthread_mutex_consistent,
pthread_mutexattr_getrobust,
pthread_mutexattr_setrobust,
};
2 changes: 2 additions & 0 deletions src/new/uclibc/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@
//! * About: <https://uclibc.org/>
//! * Headers: <https://github.com/kraj/uClibc> (mirror)

#[cfg(target_os = "linux")]
pub(crate) mod pthread;
pub(crate) mod unistd;
Loading
Loading