Skip to content

Commit 7b0b1a8

Browse files
Apple: Add additional pthread APIs
1 parent d8ff07b commit 7b0b1a8

File tree

4 files changed

+143
-0
lines changed

4 files changed

+143
-0
lines changed

libc-test/semver/apple.txt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,16 +1117,29 @@ PROC_CSM_TECS
11171117
PROC_PIDTASKALLINFO
11181118
PROC_PIDTASKINFO
11191119
PROC_PIDTHREADINFO
1120+
PTHREAD_CANCEL_ASYNCHRONOUS
1121+
PTHREAD_CANCEL_DEFERRED
1122+
PTHREAD_CANCEL_DISABLE
1123+
PTHREAD_CANCEL_ENABLE
1124+
PTHREAD_CANCELED
11201125
PTHREAD_CREATE_DETACHED
11211126
PTHREAD_CREATE_JOINABLE
1127+
PTHREAD_EXPLICIT_SCHED
1128+
PTHREAD_INHERIT_SCHED
11221129
PTHREAD_INTROSPECTION_THREAD_CREATE
11231130
PTHREAD_INTROSPECTION_THREAD_DESTROY
11241131
PTHREAD_INTROSPECTION_THREAD_START
11251132
PTHREAD_INTROSPECTION_THREAD_TERMINATE
11261133
PTHREAD_MUTEX_DEFAULT
11271134
PTHREAD_MUTEX_ERRORCHECK
1135+
PTHREAD_ONCE_INIT
1136+
PTHREAD_PRIO_INHERIT
1137+
PTHREAD_PRIO_NONE
1138+
PTHREAD_PRIO_PROTECT
11281139
PTHREAD_PROCESS_PRIVATE
11291140
PTHREAD_PROCESS_SHARED
1141+
PTHREAD_SCOPE_PROCESS
1142+
PTHREAD_SCOPE_SYSTEM
11301143
PTHREAD_STACK_MIN
11311144
PT_ATTACH
11321145
PT_ATTACHEXC
@@ -1744,6 +1757,7 @@ _WSTOPPED
17441757
__PTHREAD_CONDATTR_SIZE__
17451758
__PTHREAD_COND_SIZE__
17461759
__PTHREAD_MUTEX_SIZE__
1760+
__PTHREAD_ONCE_SIZE__
17471761
__PTHREAD_RWLOCKATTR_SIZE__
17481762
__PTHREAD_RWLOCK_SIZE__
17491763
__darwin_mcontext64
@@ -2041,8 +2055,18 @@ pseudo_AF_KEY
20412055
pseudo_AF_PIP
20422056
pseudo_AF_RTIP
20432057
pseudo_AF_XTP
2058+
pthread_atfork
2059+
pthread_attr_getdetachstate
2060+
pthread_attr_getinheritsched
20442061
pthread_attr_getschedparam
2062+
pthread_attr_getschedpolicy
2063+
pthread_attr_getscope
2064+
pthread_attr_getstackaddr
2065+
pthread_attr_setinheritsched
20452066
pthread_attr_setschedparam
2067+
pthread_attr_setschedpolicy
2068+
pthread_attr_setscope
2069+
pthread_attr_setstackaddr
20462070
pthread_cancel
20472071
pthread_condattr_getpshared
20482072
pthread_condattr_setpshared
@@ -2064,6 +2088,8 @@ pthread_kill
20642088
pthread_main_np
20652089
pthread_mutexattr_getpshared
20662090
pthread_mutexattr_setpshared
2091+
pthread_once
2092+
pthread_once_t
20672093
pthread_rwlockattr_getpshared
20682094
pthread_rwlockattr_setpshared
20692095
pthread_setname_np

src/unix/bsd/apple/b32/mod.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ s_no_extra_traits! {
5454
__sig: c_long,
5555
__opaque: [::c_char; 36]
5656
}
57+
58+
pub struct pthread_once_t {
59+
__sig: c_long,
60+
__opaque: [::c_char; ::__PTHREAD_ONCE_SIZE__],
61+
}
5762
}
5863

5964
cfg_if! {
@@ -82,6 +87,29 @@ cfg_if! {
8287
self.__opaque.hash(state);
8388
}
8489
}
90+
impl PartialEq for pthread_once_t {
91+
fn eq(&self, other: &pthread_once_t) -> bool {
92+
self.__sig == other.__sig
93+
&& self.__opaque
94+
.iter()
95+
.zip(other.__opaque.iter())
96+
.all(|(a,b)| a == b)
97+
}
98+
}
99+
impl Eq for pthread_once_t {}
100+
impl ::fmt::Debug for pthread_once_t {
101+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
102+
f.debug_struct("pthread_once_t")
103+
.field("__sig", &self.__sig)
104+
.finish()
105+
}
106+
}
107+
impl ::hash::Hash for pthread_once_t {
108+
fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
109+
self.__sig.hash(state);
110+
self.__opaque.hash(state);
111+
}
112+
}
85113
}
86114
}
87115

@@ -92,6 +120,7 @@ pub const NET_RT_MAXID: ::c_int = 10;
92120
pub const __PTHREAD_MUTEX_SIZE__: usize = 40;
93121
pub const __PTHREAD_COND_SIZE__: usize = 24;
94122
pub const __PTHREAD_CONDATTR_SIZE__: usize = 4;
123+
pub const __PTHREAD_ONCE_SIZE__: usize = 4;
95124
pub const __PTHREAD_RWLOCK_SIZE__: usize = 124;
96125
pub const __PTHREAD_RWLOCKATTR_SIZE__: usize = 12;
97126

@@ -103,6 +132,12 @@ pub const BIOCSRTIMEOUT: ::c_ulong = 0x8008426d;
103132
pub const BIOCGRTIMEOUT: ::c_ulong = 0x4008426e;
104133
pub const BIOCSETFNR: ::c_ulong = 0x8008427e;
105134

135+
const _PTHREAD_ONCE_SIG_INIT: c_long = 0x30B1BCBA;
136+
pub const PTHREAD_ONCE_INIT: ::pthread_once_t = ::pthread_once_t {
137+
__sig: _PTHREAD_ONCE_SIG_INIT,
138+
__opaque: [0; 4],
139+
};
140+
106141
extern "C" {
107142
pub fn exchangedata(
108143
path1: *const ::c_char,

src/unix/bsd/apple/b64/mod.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ s_no_extra_traits! {
5454
__sig: c_long,
5555
__opaque: [::c_char; 56]
5656
}
57+
58+
pub struct pthread_once_t {
59+
__sig: c_long,
60+
__opaque: [::c_char; __PTHREAD_ONCE_SIZE__],
61+
}
5762
}
5863

5964
cfg_if! {
@@ -82,6 +87,29 @@ cfg_if! {
8287
self.__opaque.hash(state);
8388
}
8489
}
90+
impl PartialEq for pthread_once_t {
91+
fn eq(&self, other: &pthread_once_t) -> bool {
92+
self.__sig == other.__sig
93+
&& self.__opaque
94+
.iter()
95+
.zip(other.__opaque.iter())
96+
.all(|(a,b)| a == b)
97+
}
98+
}
99+
impl Eq for pthread_once_t {}
100+
impl ::fmt::Debug for pthread_once_t {
101+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
102+
f.debug_struct("pthread_once_t")
103+
.field("__sig", &self.__sig)
104+
.finish()
105+
}
106+
}
107+
impl ::hash::Hash for pthread_once_t {
108+
fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
109+
self.__sig.hash(state);
110+
self.__opaque.hash(state);
111+
}
112+
}
85113
}
86114
}
87115

@@ -92,6 +120,7 @@ pub const NET_RT_MAXID: ::c_int = 11;
92120
pub const __PTHREAD_MUTEX_SIZE__: usize = 56;
93121
pub const __PTHREAD_COND_SIZE__: usize = 40;
94122
pub const __PTHREAD_CONDATTR_SIZE__: usize = 8;
123+
pub const __PTHREAD_ONCE_SIZE__: usize = 8;
95124
pub const __PTHREAD_RWLOCK_SIZE__: usize = 192;
96125
pub const __PTHREAD_RWLOCKATTR_SIZE__: usize = 16;
97126

@@ -103,6 +132,12 @@ pub const BIOCSRTIMEOUT: ::c_ulong = 0x8010426d;
103132
pub const BIOCGRTIMEOUT: ::c_ulong = 0x4010426e;
104133
pub const BIOCSETFNR: ::c_ulong = 0x8010427e;
105134

135+
const _PTHREAD_ONCE_SIG_INIT: c_long = 0x30B1BCBA;
136+
pub const PTHREAD_ONCE_INIT: ::pthread_once_t = ::pthread_once_t {
137+
__sig: _PTHREAD_ONCE_SIG_INIT,
138+
__opaque: [0; 8],
139+
};
140+
106141
extern "C" {
107142
pub fn exchangedata(
108143
path1: *const ::c_char,

src/unix/bsd/apple/mod.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3761,6 +3761,19 @@ pub const PTHREAD_PROCESS_PRIVATE: ::c_int = 2;
37613761
pub const PTHREAD_PROCESS_SHARED: ::c_int = 1;
37623762
pub const PTHREAD_CREATE_JOINABLE: ::c_int = 1;
37633763
pub const PTHREAD_CREATE_DETACHED: ::c_int = 2;
3764+
pub const PTHREAD_INHERIT_SCHED: ::c_int = 1;
3765+
pub const PTHREAD_EXPLICIT_SCHED: ::c_int = 2;
3766+
pub const PTHREAD_CANCEL_ENABLE: ::c_int = 0x01;
3767+
pub const PTHREAD_CANCEL_DISABLE: ::c_int = 0x00;
3768+
pub const PTHREAD_CANCEL_DEFERRED: ::c_int = 0x02;
3769+
pub const PTHREAD_CANCEL_ASYNCHRONOUS: ::c_int = 0x00;
3770+
pub const PTHREAD_CANCELED: *mut ::c_void = 1 as *mut ::c_void;
3771+
pub const PTHREAD_SCOPE_SYSTEM: ::c_int = 1;
3772+
pub const PTHREAD_SCOPE_PROCESS: ::c_int = 2;
3773+
pub const PTHREAD_PRIO_NONE: ::c_int = 0;
3774+
pub const PTHREAD_PRIO_INHERIT: ::c_int = 1;
3775+
pub const PTHREAD_PRIO_PROTECT: ::c_int = 2;
3776+
37643777
#[cfg(target_arch = "aarch64")]
37653778
pub const PTHREAD_STACK_MIN: ::size_t = 16384;
37663779
#[cfg(not(target_arch = "aarch64"))]
@@ -5700,6 +5713,40 @@ extern "C" {
57005713
newp: *mut ::c_void,
57015714
newlen: ::size_t,
57025715
) -> ::c_int;
5716+
pub fn pthread_once(
5717+
once_control: *mut ::pthread_once_t,
5718+
init_routine: ::Option<unsafe extern "C" fn()>,
5719+
) -> ::c_int;
5720+
pub fn pthread_attr_getinheritsched(
5721+
attr: *const ::pthread_attr_t,
5722+
inheritsched: *mut ::c_int,
5723+
) -> ::c_int;
5724+
pub fn pthread_attr_getschedpolicy(
5725+
attr: *const ::pthread_attr_t,
5726+
policy: *mut ::c_int,
5727+
) -> ::c_int;
5728+
pub fn pthread_attr_getscope(
5729+
attr: *const ::pthread_attr_t,
5730+
contentionscope: *mut ::c_int,
5731+
) -> ::c_int;
5732+
pub fn pthread_attr_getstackaddr(
5733+
attr: *const ::pthread_attr_t,
5734+
stackaddr: *mut *mut ::c_void,
5735+
) -> ::c_int;
5736+
pub fn pthread_attr_getdetachstate(
5737+
attr: *const ::pthread_attr_t,
5738+
detachstate: *mut ::c_int,
5739+
) -> ::c_int;
5740+
pub fn pthread_attr_setinheritsched(
5741+
attr: *mut ::pthread_attr_t,
5742+
inheritsched: ::c_int,
5743+
) -> ::c_int;
5744+
pub fn pthread_attr_setschedpolicy(attr: *mut ::pthread_attr_t, policy: ::c_int) -> ::c_int;
5745+
pub fn pthread_attr_setscope(attr: *mut ::pthread_attr_t, contentionscope: ::c_int) -> ::c_int;
5746+
pub fn pthread_attr_setstackaddr(
5747+
attr: *mut ::pthread_attr_t,
5748+
stackaddr: *mut ::c_void,
5749+
) -> ::c_int;
57035750
pub fn pthread_setname_np(name: *const ::c_char) -> ::c_int;
57045751
pub fn pthread_getname_np(thread: ::pthread_t, name: *mut ::c_char, len: ::size_t) -> ::c_int;
57055752
pub fn pthread_mach_thread_np(thread: ::pthread_t) -> ::mach_port_t;

0 commit comments

Comments
 (0)