X-Git-Url: https://git.saurik.com/apple/libpthread.git/blobdiff_plain/f1a1da6cf65a9d0e6858678f6c259025cf5d27fd..964d3577b041867f776d8eb940bf4a1108ffb97c:/src/internal.h?ds=sidebyside diff --git a/src/internal.h b/src/internal.h index 057428f..5a13fe3 100644 --- a/src/internal.h +++ b/src/internal.h @@ -59,6 +59,7 @@ struct _pthread_attr_t; /* forward reference */ typedef struct _pthread_attr_t pthread_attr_t; +#include <_simple.h> #include #include #include @@ -176,7 +177,7 @@ typedef struct _pthread { size_t guardsize; // guard page size in bytes // thread specific data - void *tsd[_EXTERNAL_POSIX_THREAD_KEYS_MAX + _INTERNAL_POSIX_THREAD_KEYS_MAX]; + void *tsd[_EXTERNAL_POSIX_THREAD_KEYS_MAX + _INTERNAL_POSIX_THREAD_KEYS_MAX] __attribute__ ((aligned (16))); } *pthread_t; @@ -347,12 +348,15 @@ _pthread_selfid_direct(void) #define _PTHREAD_NO_SIG 0x00000000 #define _PTHREAD_MUTEX_ATTR_SIG 0x4D545841 /* 'MTXA' */ #define _PTHREAD_MUTEX_SIG 0x4D555458 /* 'MUTX' */ +#define _PTHREAD_MUTEX_SIG_fast 0x4D55545A /* 'MUTZ' */ +#define _PTHREAD_MUTEX_SIG_MASK 0xfffffffd +#define _PTHREAD_MUTEX_SIG_CMP 0x4D555458 /* _PTHREAD_MUTEX_SIG & _PTHREAD_MUTEX_SIG_MASK */ #define _PTHREAD_MUTEX_SIG_init 0x32AAABA7 /* [almost] ~'MUTX' */ #define _PTHREAD_ERRORCHECK_MUTEX_SIG_init 0x32AAABA1 #define _PTHREAD_RECURSIVE_MUTEX_SIG_init 0x32AAABA2 -#define _PTHREAD_FIRSTFIT_MUTEX_SIG_init 0x32AAABA3 +#define _PTHREAD_FIRSTFIT_MUTEX_SIG_init 0x32AAABA3 #define _PTHREAD_MUTEX_SIG_init_MASK 0xfffffff0 -#define _PTHREAD_MUTEX_SIG_CMP 0x32AAABA0 +#define _PTHREAD_MUTEX_SIG_init_CMP 0x32AAABA0 #define _PTHREAD_COND_ATTR_SIG 0x434E4441 /* 'CNDA' */ #define _PTHREAD_COND_SIG 0x434F4E44 /* 'COND' */ #define _PTHREAD_COND_SIG_init 0x3CB0B1BB /* [almost] ~'COND' */ @@ -394,6 +398,8 @@ extern boolean_t swtch_pri(int); #define PTHREAD_NORETURN __attribute__((__noreturn__)) #define PTHREAD_ALWAYS_INLINE __attribute__((always_inline)) #define PTHREAD_NOINLINE __attribute__((noinline)) +#define PTHREAD_WEAK __attribute__((weak)) +#define PTHREAD_USED __attribute__((used)) #include "kern/kern_internal.h" @@ -450,13 +456,17 @@ PTHREAD_NOEXPORT void _pthread_set_main_qos(pthread_priority_t qos); +PTHREAD_NOEXPORT +void +_pthread_key_global_init(const char *envp[]); + PTHREAD_EXPORT void _pthread_start(pthread_t self, mach_port_t kport, void *(*fun)(void *), void * funarg, size_t stacksize, unsigned int flags); PTHREAD_EXPORT void -_pthread_wqthread(pthread_t self, mach_port_t kport, void *stackaddr, void *unused, int reuse); +_pthread_wqthread(pthread_t self, mach_port_t kport, void *stackaddr, void *keventlist, int flags, int nkevents); PTHREAD_NOEXPORT void @@ -525,4 +535,27 @@ _pthread_globals(void) NULL); } +#pragma mark _pthread_mutex_check_signature + +PTHREAD_ALWAYS_INLINE +static inline bool +_pthread_mutex_check_signature_fast(_pthread_mutex *mutex) +{ + return os_fastpath(mutex->sig == _PTHREAD_MUTEX_SIG_fast); +} + +PTHREAD_ALWAYS_INLINE +static inline bool +_pthread_mutex_check_signature(_pthread_mutex *mutex) +{ + return os_fastpath((mutex->sig & _PTHREAD_MUTEX_SIG_MASK) == _PTHREAD_MUTEX_SIG_CMP); +} + +PTHREAD_ALWAYS_INLINE +static inline bool +_pthread_mutex_check_signature_init(_pthread_mutex *mutex) +{ + return os_fastpath((mutex->sig & _PTHREAD_MUTEX_SIG_init_MASK) == _PTHREAD_MUTEX_SIG_init_CMP); +} + #endif /* _POSIX_PTHREAD_INTERNALS_H */