diff options
author | deischen <deischen@FreeBSD.org> | 2002-11-13 18:12:09 +0000 |
---|---|---|
committer | deischen <deischen@FreeBSD.org> | 2002-11-13 18:12:09 +0000 |
commit | bf8788517dc3dbb62a46b61b9a2e31a4ba2d3dd4 (patch) | |
tree | 17bf495d45d13c8027b110379dd80aa876f77940 /lib | |
parent | f737ca00a463d77a4a5c24d8108a16f68b2a2f66 (diff) | |
download | FreeBSD-src-bf8788517dc3dbb62a46b61b9a2e31a4ba2d3dd4.zip FreeBSD-src-bf8788517dc3dbb62a46b61b9a2e31a4ba2d3dd4.tar.gz |
Use a jump table (a la Solaris) for pthread routines with default
entries in the table being stubs. While I'm here, add macros to
auto-generate the stubs. A conforming threads library can override
the stub routines by filling in the jump table.
Add some entries to namespace.h and sync un-namespace.h to it.
Also add a comment to remind folks to update un-namespace.h
when changing namespace.h.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/gen/_pthread_stubs.c | 547 | ||||
-rw-r--r-- | lib/libc/include/libc_private.h | 42 | ||||
-rw-r--r-- | lib/libc/include/namespace.h | 17 | ||||
-rw-r--r-- | lib/libc/include/un-namespace.h | 25 |
4 files changed, 230 insertions, 401 deletions
diff --git a/lib/libc/gen/_pthread_stubs.c b/lib/libc/gen/_pthread_stubs.c index e7e9e46..0555d78 100644 --- a/lib/libc/gen/_pthread_stubs.c +++ b/lib/libc/gen/_pthread_stubs.c @@ -29,10 +29,8 @@ __FBSDID("$FreeBSD$"); #include <signal.h> #include <pthread.h> -#include <pthread_np.h> -void *_pthread_getspecific(pthread_key_t key); -pthread_t _pthread_self(void); +#include "libc_private.h" /* * Weak symbols: All libc internal usage of these functions should @@ -42,69 +40,7 @@ pthread_t _pthread_self(void); * usage to avoid unwanted cancellation points and to differentiate * between application locks and libc locks (threads holding the * latter can't be allowed to exit/terminate). - * - * We also provide weak pthread_XXX stubs which call their - * _pthread_XXX counterparts. These stubs may be used be other - * libraries for ensuring thread-safety without requiring the presence - * of a thread library. */ -__weak_reference(_pthread_cond_init_stub, _pthread_cond_init); -__weak_reference(_pthread_cond_signal_stub, _pthread_cond_signal); -__weak_reference(_pthread_cond_broadcast_stub, _pthread_cond_broadcast); -__weak_reference(_pthread_cond_wait_stub, _pthread_cond_wait); -__weak_reference(_pthread_cond_destroy_stub, _pthread_cond_destroy); -__weak_reference(_pthread_getspecific_stub, _pthread_getspecific); -__weak_reference(_pthread_key_create_stub, _pthread_key_create); -__weak_reference(_pthread_key_delete_stub, _pthread_key_delete); -__weak_reference(_pthread_main_np_stub, _pthread_main_np); -__weak_reference(_pthread_mutex_destroy_stub, _pthread_mutex_destroy); -__weak_reference(_pthread_mutex_init_stub, _pthread_mutex_init); -__weak_reference(_pthread_mutex_lock_stub, _pthread_mutex_lock); -__weak_reference(_pthread_mutex_trylock_stub, _pthread_mutex_trylock); -__weak_reference(_pthread_mutex_unlock_stub, _pthread_mutex_unlock); -__weak_reference(_pthread_mutexattr_init_stub, _pthread_mutexattr_init); -__weak_reference(_pthread_mutexattr_destroy_stub, _pthread_mutexattr_destroy); -__weak_reference(_pthread_mutexattr_settype_stub, _pthread_mutexattr_settype); -__weak_reference(_pthread_once_stub, _pthread_once); -__weak_reference(_pthread_self_stub, _pthread_self); -__weak_reference(_pthread_rwlock_init_stub, _pthread_rwlock_init); -__weak_reference(_pthread_rwlock_destroy_stub, _pthread_rwlock_destroy); -__weak_reference(_pthread_rwlock_rdlock_stub, _pthread_rwlock_rdlock); -__weak_reference(_pthread_rwlock_tryrdlock_stub, _pthread_rwlock_tryrdlock); -__weak_reference(_pthread_rwlock_trywrlock_stub, _pthread_rwlock_trywrlock); -__weak_reference(_pthread_rwlock_unlock_stub, _pthread_rwlock_unlock); -__weak_reference(_pthread_rwlock_wrlock_stub, _pthread_rwlock_wrlock); -__weak_reference(_pthread_setspecific_stub, _pthread_setspecific); -__weak_reference(_pthread_sigmask_stub, _pthread_sigmask); - -__weak_reference(pthread_cond_init_stub, pthread_cond_init); -__weak_reference(pthread_cond_signal_stub, pthread_cond_signal); -__weak_reference(pthread_cond_broadcast_stub, pthread_cond_broadcast); -__weak_reference(pthread_cond_wait_stub, pthread_cond_wait); -__weak_reference(pthread_cond_destroy_stub, pthread_cond_destroy); -__weak_reference(pthread_getspecific_stub, pthread_getspecific); -__weak_reference(pthread_key_create_stub, pthread_key_create); -__weak_reference(pthread_key_delete_stub, pthread_key_delete); -__weak_reference(pthread_main_np_stub, pthread_main_np); -__weak_reference(pthread_mutex_destroy_stub, pthread_mutex_destroy); -__weak_reference(pthread_mutex_init_stub, pthread_mutex_init); -__weak_reference(pthread_mutex_lock_stub, pthread_mutex_lock); -__weak_reference(pthread_mutex_trylock_stub, pthread_mutex_trylock); -__weak_reference(pthread_mutex_unlock_stub, pthread_mutex_unlock); -__weak_reference(pthread_mutexattr_init_stub, pthread_mutexattr_init); -__weak_reference(pthread_mutexattr_destroy_stub, pthread_mutexattr_destroy); -__weak_reference(pthread_mutexattr_settype_stub, pthread_mutexattr_settype); -__weak_reference(pthread_once_stub, pthread_once); -__weak_reference(pthread_self_stub, pthread_self); -__weak_reference(pthread_rwlock_init_stub, pthread_rwlock_init); -__weak_reference(pthread_rwlock_destroy_stub, pthread_rwlock_destroy); -__weak_reference(pthread_rwlock_rdlock_stub, pthread_rwlock_rdlock); -__weak_reference(pthread_rwlock_tryrdlock_stub, pthread_rwlock_tryrdlock); -__weak_reference(pthread_rwlock_trywrlock_stub, pthread_rwlock_trywrlock); -__weak_reference(pthread_rwlock_unlock_stub, pthread_rwlock_unlock); -__weak_reference(pthread_rwlock_wrlock_stub, pthread_rwlock_wrlock); -__weak_reference(pthread_setspecific_stub, pthread_setspecific); -__weak_reference(pthread_sigmask_stub, pthread_sigmask); /* Define a null pthread structure just to satisfy _pthread_self. */ struct pthread { @@ -112,342 +48,179 @@ struct pthread { static struct pthread main_thread; -static int -_pthread_cond_init_stub(pthread_cond_t *cond, - const pthread_condattr_t *cond_attr) -{ - return (0); -} - -static int -_pthread_cond_signal_stub(pthread_cond_t *cond) -{ - return (0); -} - -static int -_pthread_cond_broadcast_stub(pthread_cond_t *cond) -{ - return (0); -} - -static int -_pthread_cond_wait_stub(pthread_cond_t *cond, pthread_mutex_t *mutex) -{ - return (0); -} +static int stub_main(void); +static void *stub_null(void); +static struct pthread *stub_self(void); +static int stub_zero(void); + +#define PJT_DUAL_ENTRY(entry) \ + (pthread_func_t)entry, (pthread_func_t)entry + +pthread_func_t __thr_jtable[PJT_MAX][2] = { + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_COND_BROADCAST */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_COND_DESTROY */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_COND_INIT */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_COND_SIGNAL */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_COND_WAIT */ + {PJT_DUAL_ENTRY(stub_null)}, /* PJT_GETSPECIFIC */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_KEY_CREATE */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_KEY_DELETE */ + {PJT_DUAL_ENTRY(stub_main)}, /* PJT_MAIN_NP */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_MUTEX_DESTROY */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_MUTEX_INIT */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_MUTEX_LOCK */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_MUTEX_TRYLOCK */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_MUTEX_UNLOCK */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_MUTEXATTR_DESTROY */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_MUTEXATTR_INIT */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_MUTEXATTR_SETTYPE */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_ONCE */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_RWLOCK_DESTROY */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_RWLOCK_INIT */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_RWLOCK_RDLOCK */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_RWLOCK_TRYRDLOCK */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_RWLOCK_TRYWRLOCK */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_RWLOCK_UNLOCK */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_RWLOCK_WRLOCK */ + {PJT_DUAL_ENTRY(stub_self)}, /* PJT_SELF */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_SETSPECIFIC */ + {PJT_DUAL_ENTRY(stub_zero)} /* PJT_SIGMASK */ +}; -static int -_pthread_cond_destroy_stub(pthread_cond_t *cond) +/* + * Weak aliases for exported (pthread_*) and internal (_pthread_*) routines. + */ +#define WEAK_REF(sym, alias) __weak_reference(sym, alias) + +#define FUNC_TYPE(name) __CONCAT(name, _func_t) +#define FUNC_INT(name) __CONCAT(name, _int) +#define FUNC_EXP(name) __CONCAT(name, _exp) + +#define STUB_FUNC(name, idx, ret) \ + static ret FUNC_EXP(name)(void) __unused; \ + static ret FUNC_INT(name)(void) __unused; \ + WEAK_REF(FUNC_EXP(name), name); \ + WEAK_REF(FUNC_INT(name), __CONCAT(_, name)); \ + typedef ret (*FUNC_TYPE(name))(void); \ + static ret FUNC_EXP(name)(void) \ + { \ + FUNC_TYPE(name) func; \ + func = (FUNC_TYPE(name))__thr_jtable[idx][0]; \ + return (func()); \ + } \ + static ret FUNC_INT(name)(void) \ + { \ + FUNC_TYPE(name) func; \ + func = (FUNC_TYPE(name))__thr_jtable[idx][1]; \ + return (func()); \ + } + +#define STUB_FUNC1(name, idx, ret, p0_type) \ + static ret FUNC_EXP(name)(p0_type) __unused; \ + static ret FUNC_INT(name)(p0_type) __unused; \ + WEAK_REF(FUNC_EXP(name), name); \ + WEAK_REF(FUNC_INT(name), __CONCAT(_, name)); \ + typedef ret (*FUNC_TYPE(name))(p0_type); \ + static ret FUNC_EXP(name)(p0_type p0) \ + { \ + FUNC_TYPE(name) func; \ + func = (FUNC_TYPE(name))__thr_jtable[idx][0]; \ + return (func(p0)); \ + } \ + static ret FUNC_INT(name)(p0_type p0) \ + { \ + FUNC_TYPE(name) func; \ + func = (FUNC_TYPE(name))__thr_jtable[idx][1]; \ + return (func(p0)); \ + } + +#define STUB_FUNC2(name, idx, ret, p0_type, p1_type) \ + static ret FUNC_EXP(name)(p0_type, p1_type) __unused; \ + static ret FUNC_INT(name)(p0_type, p1_type) __unused; \ + WEAK_REF(FUNC_EXP(name), name); \ + WEAK_REF(FUNC_INT(name), __CONCAT(_, name)); \ + typedef ret (*FUNC_TYPE(name))(p0_type, p1_type); \ + static ret FUNC_EXP(name)(p0_type p0, p1_type p1) \ + { \ + FUNC_TYPE(name) func; \ + func = (FUNC_TYPE(name))__thr_jtable[idx][0]; \ + return (func(p0, p1)); \ + } \ + static ret FUNC_INT(name)(p0_type p0, p1_type p1) \ + { \ + FUNC_TYPE(name) func; \ + func = (FUNC_TYPE(name))__thr_jtable[idx][1]; \ + return (func(p0, p1)); \ + } + +#define STUB_FUNC3(name, idx, ret, p0_type, p1_type, p2_type) \ + static ret FUNC_EXP(name)(p0_type, p1_type, p2_type) __unused; \ + static ret FUNC_INT(name)(p0_type, p1_type, p2_type) __unused; \ + WEAK_REF(FUNC_EXP(name), name); \ + WEAK_REF(FUNC_INT(name), __CONCAT(_, name)); \ + typedef ret (*FUNC_TYPE(name))(p0_type, p1_type, p2_type); \ + static ret FUNC_EXP(name)(p0_type p0, p1_type p1, p2_type p2) \ + { \ + FUNC_TYPE(name) func; \ + func = (FUNC_TYPE(name))__thr_jtable[idx][0]; \ + return (func(p0, p1, p2)); \ + } \ + static ret FUNC_INT(name)(p0_type p0, p1_type p1, p2_type p2) \ + { \ + FUNC_TYPE(name) func; \ + func = (FUNC_TYPE(name))__thr_jtable[idx][1]; \ + return (func(p0, p1, p2)); \ + } + +STUB_FUNC1(pthread_cond_broadcast, PJT_COND_BROADCAST, int, void *) +STUB_FUNC1(pthread_cond_destroy, PJT_COND_DESTROY, int, void *) +STUB_FUNC2(pthread_cond_init, PJT_COND_INIT, int, void *, void *) +STUB_FUNC1(pthread_cond_signal, PJT_COND_SIGNAL, int, void *) +STUB_FUNC1(pthread_cond_wait, PJT_COND_WAIT, int, void *) +STUB_FUNC1(pthread_getspecific, PJT_GETSPECIFIC, void *, pthread_key_t) +STUB_FUNC2(pthread_key_create, PJT_KEY_CREATE, int, void *, void *) +STUB_FUNC1(pthread_key_delete, PJT_KEY_DELETE, int, pthread_key_t) +STUB_FUNC(pthread_main_np, PJT_MAIN_NP, int) +STUB_FUNC1(pthread_mutex_destroy, PJT_MUTEX_DESTROY, int, void *) +STUB_FUNC2(pthread_mutex_init, PJT_MUTEX_INIT, int, void *, void *) +STUB_FUNC1(pthread_mutex_lock, PJT_MUTEX_LOCK, int, void *) +STUB_FUNC1(pthread_mutex_trylock, PJT_MUTEX_TRYLOCK, int, void *) +STUB_FUNC1(pthread_mutex_unlock, PJT_MUTEX_UNLOCK, int, void *) +STUB_FUNC1(pthread_mutexattr_destroy, PJT_MUTEXATTR_DESTROY, int, void *) +STUB_FUNC1(pthread_mutexattr_init, PJT_MUTEXATTR_INIT, int, void *) +STUB_FUNC1(pthread_mutexattr_settype, PJT_MUTEXATTR_SETTYPE, int, void *) +STUB_FUNC2(pthread_once, PJT_ONCE, int, void *, void *) +STUB_FUNC1(pthread_rwlock_destroy, PJT_RWLOCK_DESTROY, int, void *) +STUB_FUNC2(pthread_rwlock_init, PJT_RWLOCK_INIT, int, void *, void *) +STUB_FUNC1(pthread_rwlock_rdlock, PJT_RWLOCK_RDLOCK, int, void *) +STUB_FUNC1(pthread_rwlock_tryrdlock, PJT_RWLOCK_TRYRDLOCK, int, void *) +STUB_FUNC1(pthread_rwlock_trywrlock, PJT_RWLOCK_TRYWRLOCK, int, void *) +STUB_FUNC1(pthread_rwlock_unlock, PJT_RWLOCK_UNLOCK, int, void *) +STUB_FUNC1(pthread_rwlock_wrlock, PJT_RWLOCK_WRLOCK, int, void *) +STUB_FUNC(pthread_self, PJT_SELF, pthread_t) +STUB_FUNC2(pthread_setspecific, PJT_SETSPECIFIC, int, pthread_key_t, void *) +STUB_FUNC3(pthread_sigmask, PJT_SIGMASK, int, int, void *, void *) + +static int +stub_zero(void) { return (0); } static void * -_pthread_getspecific_stub(pthread_key_t key) +stub_null(void) { return (NULL); } -static int -_pthread_key_create_stub(pthread_key_t *key, void (*destructor) (void *)) -{ - return (0); -} - -static int -_pthread_key_delete_stub(pthread_key_t key) -{ - return (0); -} - -static int -_pthread_main_np_stub() -{ - return (-1); -} - -static int -_pthread_mutex_destroy_stub(pthread_mutex_t *mattr) -{ - return (0); -} - -static int -_pthread_mutex_init_stub(pthread_mutex_t *mutex, const pthread_mutexattr_t *mattr) -{ - return (0); -} - -static int -_pthread_mutex_lock_stub(pthread_mutex_t *mutex) -{ - return (0); -} - -static int -_pthread_mutex_trylock_stub(pthread_mutex_t *mutex) -{ - return (0); -} - -static int -_pthread_mutex_unlock_stub(pthread_mutex_t *mutex) -{ - return (0); -} - -static int -_pthread_mutexattr_init_stub(pthread_mutexattr_t *mattr) -{ - return (0); -} - -static int -_pthread_mutexattr_destroy_stub(pthread_mutexattr_t *mattr) -{ - return (0); -} - -static int -_pthread_mutexattr_settype_stub(pthread_mutexattr_t *mattr, int type) -{ - return (0); -} - -static int -_pthread_once_stub(pthread_once_t *once_control, void (*init_routine) (void)) -{ - return (0); -} - -static int -_pthread_rwlock_init_stub(pthread_rwlock_t *rwlock, - const pthread_rwlockattr_t *attr) -{ - return (0); -} - -static int -_pthread_rwlock_destroy_stub(pthread_rwlock_t *rwlock) -{ - return (0); -} - -static int -_pthread_rwlock_rdlock_stub(pthread_rwlock_t *rwlock) -{ - return (0); -} - -static int -_pthread_rwlock_tryrdlock_stub(pthread_rwlock_t *rwlock) -{ - return (0); -} - -static int -_pthread_rwlock_trywrlock_stub(pthread_rwlock_t *rwlock) -{ - return (0); -} - -static int -_pthread_rwlock_unlock_stub(pthread_rwlock_t *rwlock) -{ - return (0); -} - -static int -_pthread_rwlock_wrlock_stub(pthread_rwlock_t *rwlock) -{ - return (0); -} - -static pthread_t -_pthread_self_stub(void) +static struct pthread * +stub_self(void) { return (&main_thread); } static int -_pthread_setspecific_stub(pthread_key_t key, const void *value) +stub_main(void) { - return (0); -} - -static int -_pthread_sigmask_stub(int how, const sigset_t *set, sigset_t *oset) -{ - return (0); -} - -static int -pthread_cond_init_stub(pthread_cond_t *cond, - const pthread_condattr_t *cond_attr) -{ - return (_pthread_cond_init(cond, cond_attr)); -} - -static int -pthread_cond_signal_stub(pthread_cond_t *cond) -{ - return (_pthread_cond_signal(cond)); -} - -static int -pthread_cond_broadcast_stub(pthread_cond_t *cond) -{ - return (_pthread_cond_broadcast(cond)); -} - -static int -pthread_cond_wait_stub(pthread_cond_t *cond, pthread_mutex_t *mutex) -{ - return (_pthread_cond_wait(cond, mutex)); -} - -static int -pthread_cond_destroy_stub(pthread_cond_t *cond) -{ - return (_pthread_cond_destroy(cond)); -} - -static void * -pthread_getspecific_stub(pthread_key_t key) -{ - return (_pthread_getspecific(key)); -} - -static int -pthread_key_create_stub(pthread_key_t *key, void (*destructor) (void *)) -{ - return (_pthread_key_create(key, destructor)); -} - -static int -pthread_key_delete_stub(pthread_key_t key) -{ - return (_pthread_key_delete(key)); -} - -static int -pthread_main_np_stub() -{ - return (_pthread_main_np()); -} - -static int -pthread_mutex_destroy_stub(pthread_mutex_t *mattr) -{ - return (_pthread_mutex_destroy(mattr)); -} - -static int -pthread_mutex_init_stub(pthread_mutex_t *mutex, const pthread_mutexattr_t *mattr) -{ - return (_pthread_mutex_init(mutex, mattr)); -} - -static int -pthread_mutex_lock_stub(pthread_mutex_t *mutex) -{ - return (_pthread_mutex_lock(mutex)); -} - -static int -pthread_mutex_trylock_stub(pthread_mutex_t *mutex) -{ - return (_pthread_mutex_trylock(mutex)); -} - -static int -pthread_mutex_unlock_stub(pthread_mutex_t *mutex) -{ - return (_pthread_mutex_unlock(mutex)); -} - -static int -pthread_mutexattr_init_stub(pthread_mutexattr_t *mattr) -{ - return (_pthread_mutexattr_init(mattr)); -} - -static int -pthread_mutexattr_destroy_stub(pthread_mutexattr_t *mattr) -{ - return (_pthread_mutexattr_destroy(mattr)); -} - -static int -pthread_mutexattr_settype_stub(pthread_mutexattr_t *mattr, int type) -{ - return (_pthread_mutexattr_settype(mattr, type)); -} - -static int -pthread_once_stub(pthread_once_t *once_control, void (*init_routine) (void)) -{ - return (_pthread_once(once_control, init_routine)); -} - -static int -pthread_rwlock_init_stub(pthread_rwlock_t *rwlock, - const pthread_rwlockattr_t *attr) -{ - return (_pthread_rwlock_init(rwlock, attr)); -} - -static int -pthread_rwlock_destroy_stub(pthread_rwlock_t *rwlock) -{ - return (_pthread_rwlock_destroy(rwlock)); -} - -static int -pthread_rwlock_rdlock_stub(pthread_rwlock_t *rwlock) -{ - return (_pthread_rwlock_rdlock(rwlock)); -} - -static int -pthread_rwlock_tryrdlock_stub(pthread_rwlock_t *rwlock) -{ - return (_pthread_rwlock_tryrdlock(rwlock)); -} - -static int -pthread_rwlock_trywrlock_stub(pthread_rwlock_t *rwlock) -{ - return (_pthread_rwlock_trywrlock(rwlock)); -} - -static int -pthread_rwlock_unlock_stub(pthread_rwlock_t *rwlock) -{ - return (_pthread_rwlock_unlock(rwlock)); -} - -static int -pthread_rwlock_wrlock_stub(pthread_rwlock_t *rwlock) -{ - return (_pthread_rwlock_wrlock(rwlock)); -} - -static pthread_t -pthread_self_stub(void) -{ - return (_pthread_self()); -} - -static int -pthread_setspecific_stub(pthread_key_t key, const void *value) -{ - return (_pthread_setspecific(key, value)); -} - -static int -pthread_sigmask_stub(int how, const sigset_t *set, sigset_t *oset) -{ - return (_pthread_sigmask(how, set, oset)); + return (-1); } diff --git a/lib/libc/include/libc_private.h b/lib/libc/include/libc_private.h index e47e756..96ee8ad 100644 --- a/lib/libc/include/libc_private.h +++ b/lib/libc/include/libc_private.h @@ -64,6 +64,48 @@ extern int __isthreaded; #define FUNLOCKFILE(fp) if (__isthreaded) _funlockfile(fp) /* + * Indexes into the pthread jump table. + * + * Warning! If you change this type, you must also change the threads + * libraries that reference it (libc_r, libpthread). + */ +typedef enum { + PJT_COND_BROADCAST, + PJT_COND_DESTROY, + PJT_COND_INIT, + PJT_COND_SIGNAL, + PJT_COND_WAIT, + PJT_GETSPECIFIC, + PJT_KEY_CREATE, + PJT_KEY_DELETE, + PJT_MAIN_NP, + PJT_MUTEX_DESTROY, + PJT_MUTEX_INIT, + PJT_MUTEX_LOCK, + PJT_MUTEX_TRYLOCK, + PJT_MUTEX_UNLOCK, + PJT_MUTEXATTR_DESTROY, + PJT_MUTEXATTR_INIT, + PJT_MUTEXATTR_SETTYPE, + PJT_ONCE, + PJT_RWLOCK_DESTROY, + PJT_RWLOCK_INIT, + PJT_RWLOCK_RDLOCK, + PJT_RWLOCK_TRYRDLOCK, + PJT_RWLOCK_TRYWRLOCK, + PJT_RWLOCK_UNLOCK, + PJT_RWLOCK_WRLOCK, + PJT_SELF, + PJT_SETSPECIFIC, + PJT_SIGMASK, + PJT_MAX +} pjt_index_t; + +typedef int (*pthread_func_t)(); + +extern pthread_func_t __thr_jtable[][]; + +/* * This is a pointer in the C run-time startup code. It is used * by getprogname() and setprogname(). */ diff --git a/lib/libc/include/namespace.h b/lib/libc/include/namespace.h index bfe49e2..00c034e 100644 --- a/lib/libc/include/namespace.h +++ b/lib/libc/include/namespace.h @@ -31,6 +31,9 @@ /* * Adjust names so that headers declare "hidden" names. + * + * README: When modifying this file don't forget to make the appropriate + * changes in un-namespace.h!!! */ /* @@ -76,10 +79,12 @@ #define nanosleep _nanosleep #define open _open #define poll _poll -#define pthread_cond_signal _pthread_cond_signal #define pthread_cond_broadcast _pthread_cond_broadcast -#define pthread_cond_wait _pthread_cond_wait +#define pthread_cond_destroy _pthread_cond_destroy #define pthread_cond_init _pthread_cond_init +#define pthread_cond_signal _pthread_cond_signal +#define pthread_cond_timedwait _pthread_cond_timedwait +#define pthread_cond_wait _pthread_cond_wait #define pthread_exit _pthread_exit #define pthread_getspecific _pthread_getspecific #define pthread_key_create _pthread_key_create @@ -90,13 +95,16 @@ #define pthread_mutex_lock _pthread_mutex_lock #define pthread_mutex_trylock _pthread_mutex_trylock #define pthread_mutex_unlock _pthread_mutex_unlock -#define pthread_mutexattr_init _pthread_mutexattr_init #define pthread_mutexattr_destroy _pthread_mutexattr_destroy +#define pthread_mutexattr_init _pthread_mutexattr_init #define pthread_mutexattr_settype _pthread_mutexattr_settype #define pthread_once _pthread_once +#define pthread_rwlock_destroy _pthread_rwlock_destroy #define pthread_rwlock_init _pthread_rwlock_init #define pthread_rwlock_rdlock _pthread_rwlock_rdlock #define pthread_rwlock_wrlock _pthread_rwlock_wrlock +#define pthread_rwlock_tryrdlock _pthread_rwlock_tryrdlock +#define pthread_rwlock_trywrlock _pthread_rwlock_trywrlock #define pthread_rwlock_unlock _pthread_rwlock_unlock #define pthread_self _pthread_self #define pthread_setspecific _pthread_setspecific @@ -135,9 +143,6 @@ #define msync _msync #define nfssvc _nfssvc #define pause _pause -#define pthread_rwlock_destroy _pthread_rwlock_destroy -#define pthread_rwlock_tryrdlock _pthread_rwlock_tryrdlock -#define pthread_rwlock_trywrlock _pthread_rwlock_trywrlock #define pthread_rwlockattr_init _pthread_rwlockattr_init #define pthread_rwlockattr_destroy _pthread_rwlockattr_destroy #define sched_yield _sched_yield diff --git a/lib/libc/include/un-namespace.h b/lib/libc/include/un-namespace.h index 3b21900..2809e0d 100644 --- a/lib/libc/include/un-namespace.h +++ b/lib/libc/include/un-namespace.h @@ -60,9 +60,18 @@ #undef listen #undef nanosleep #undef open +#undef poll +#undef pthread_cond_broadcast +#undef pthread_cond_destroy +#undef pthread_cond_init +#undef pthread_cond_signal +#undef pthread_cond_timedwait +#undef pthread_cond_wait +#undef pthread_exit #undef pthread_getspecific #undef pthread_key_create #undef pthread_key_delete +#undef pthread_main_np #undef pthread_mutex_destroy #undef pthread_mutex_init #undef pthread_mutex_lock @@ -72,8 +81,16 @@ #undef pthread_mutexattr_destroy #undef pthread_mutexattr_settype #undef pthread_once +#undef pthread_rwlock_destroy +#undef pthread_rwlock_init +#undef pthread_rwlock_rdlock +#undef pthread_rwlock_wrlock +#undef pthread_rwlock_tryrdlock +#undef pthread_rwlock_trywrlock +#undef pthread_rwlock_unlock #undef pthread_self #undef pthread_setspecific +#undef pthread_sigmask #undef read #undef readv #undef recvfrom @@ -100,14 +117,6 @@ #undef msync #undef nfssvc #undef pause -#undef poll -#undef pthread_rwlock_destroy -#undef pthread_rwlock_init -#undef pthread_rwlock_rdlock -#undef pthread_rwlock_tryrdlock -#undef pthread_rwlock_trywrlock -#undef pthread_rwlock_unlock -#undef pthread_rwlock_wrlock #undef pthread_rwlockattr_init #undef pthread_rwlockattr_destroy #undef sched_yield |