diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2017-09-24 23:09:59 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2017-09-24 23:09:59 +0200 |
commit | f881f17267506f3ced17259a066a4d95bffb57f0 (patch) | |
tree | 8fd2dd37c928033b6cc6fff7835575899b39b1e5 | |
parent | 4c9332bfdc9ccd793b6ded3168602195913cedb3 (diff) |
Fix symbols exposed in linkspace
Libc uses some thread functions, but should not expose the corresponding
symbols, so use aliases.
* Versions (__cthread_detach, __cthread_fork, __cthread_keycreate,
__cthread_getspecific, __cthread_setspecific, __pthread_getattr_np,
__pthread_attr_getstack): Add symbols
* pthread/cthreads-compat.c (cthread_t, cthread_fn_t, cthread_key_t): Do
not define.
(cthread_detach): Rename to __cthread_detach.
(cthread_detach): Define as weak alias to __cthread_detach.
(cthread_fork, cthread_keycreate, cthread_getspecific,
cthread_setspecific): Likewise.
* pthread/pt-getattr.c (pthread_getattr_np): Likewise.
* sysdeps/generic/pt-attr-getstack.c (pthread_attr_getstack): Likewise.
* sysdeps/pthread/pthread.h (__cthread_t, __cthread_key_t,
__cthread_fn_t, __cthread_fork, __cthread_detach, __cthread_keycreate,
__cthread_getspecific, __cthread_setspecific, __pthread_getattr_np,
__pthread_attr_getstack): Declare.
-rw-r--r-- | Versions | 8 | ||||
-rw-r--r-- | pthread/cthreads-compat.c | 25 | ||||
-rw-r--r-- | pthread/pt-getattr.c | 3 | ||||
-rw-r--r-- | sysdeps/generic/pt-attr-getstack.c | 3 | ||||
-rw-r--r-- | sysdeps/pthread/pthread.h | 15 |
5 files changed, 40 insertions, 14 deletions
@@ -143,5 +143,13 @@ libpthread { GLIBC_PRIVATE { __shm_directory; __pthread_threads; + + __cthread_detach; + __cthread_fork; + __cthread_keycreate; + __cthread_getspecific; + __cthread_setspecific; + __pthread_getattr_np; + __pthread_attr_getstack; } } diff --git a/pthread/cthreads-compat.c b/pthread/cthreads-compat.c index 1a0971b..cd845ed 100644 --- a/pthread/cthreads-compat.c +++ b/pthread/cthreads-compat.c @@ -20,23 +20,20 @@ #include <assert.h> #include <pthread.h> -typedef void *cthread_t; -typedef void *(*cthread_fn_t) (void *arg); -typedef int cthread_key_t; - -#define CTHREAD_KEY_INVALID (cthread_key_t) -1 +#define CTHREAD_KEY_INVALID (__cthread_key_t) -1 void -cthread_detach (cthread_t thread) +__cthread_detach (__cthread_t thread) { int err; err = pthread_detach ((pthread_t) thread); assert_perror (err); } +weak_alias (__cthread_detach, cthread_detach) -cthread_t -cthread_fork (cthread_fn_t func, void *arg) +__cthread_t +__cthread_fork (__cthread_fn_t func, void *arg) { pthread_t thread; int err; @@ -44,11 +41,12 @@ cthread_fork (cthread_fn_t func, void *arg) err = pthread_create (&thread, NULL, func, arg); assert_perror (err); - return (cthread_t) thread; + return (__cthread_t) thread; } +weak_alias (__cthread_fork, cthread_fork) int -cthread_keycreate (cthread_key_t *key) +__cthread_keycreate (__cthread_key_t *key) { error_t err; @@ -62,16 +60,18 @@ cthread_keycreate (cthread_key_t *key) return err; } +weak_alias (__cthread_keycreate, cthread_keycreate) int -cthread_getspecific (cthread_key_t key, void **val) +__cthread_getspecific (__cthread_key_t key, void **val) { *val = pthread_getspecific (key); return 0; } +weak_alias (__cthread_getspecific, cthread_getspecific) int -cthread_setspecific (cthread_key_t key, void *val) +__cthread_setspecific (__cthread_key_t key, void *val) { error_t err; @@ -84,6 +84,7 @@ cthread_setspecific (cthread_key_t key, void *val) return err; } +weak_alias (__cthread_setspecific, cthread_setspecific) void __mutex_lock_solid (void *lock) diff --git a/pthread/pt-getattr.c b/pthread/pt-getattr.c index 574420a..0b86c66 100644 --- a/pthread/pt-getattr.c +++ b/pthread/pt-getattr.c @@ -27,7 +27,7 @@ already running thread THREAD. It shall be called on an uninitialized ATTR and destroyed with pthread_attr_destroy when no longer needed. */ int -pthread_getattr_np (pthread_t thread, pthread_attr_t *attr) +__pthread_getattr_np (pthread_t thread, pthread_attr_t *attr) { struct __pthread *pthread; @@ -49,3 +49,4 @@ pthread_getattr_np (pthread_t thread, pthread_attr_t *attr) return 0; } +weak_alias (__pthread_getattr_np, pthread_getattr_np) diff --git a/sysdeps/generic/pt-attr-getstack.c b/sysdeps/generic/pt-attr-getstack.c index 7beb79f..5ab821e 100644 --- a/sysdeps/generic/pt-attr-getstack.c +++ b/sysdeps/generic/pt-attr-getstack.c @@ -21,7 +21,7 @@ #include <pt-internal.h> int -pthread_attr_getstack (const pthread_attr_t *attr, +__pthread_attr_getstack (const pthread_attr_t *attr, void **stackaddr, size_t *stacksize) { @@ -29,3 +29,4 @@ pthread_attr_getstack (const pthread_attr_t *attr, pthread_attr_getstacksize (attr, stacksize); return 0; } +weak_alias (__pthread_attr_getstack, pthread_attr_getstack) diff --git a/sysdeps/pthread/pthread.h b/sysdeps/pthread/pthread.h index 1d4d3c7..8e65b05 100644 --- a/sysdeps/pthread/pthread.h +++ b/sysdeps/pthread/pthread.h @@ -1,7 +1,22 @@ #ifndef _PTHREAD_H #include <pthread/pthread.h> +/* These represent the interface used by glibc itself. */ + extern int __pthread_mutex_lock (pthread_mutex_t *__mutex); extern int __pthread_mutex_unlock (pthread_mutex_t *__mutex); +typedef struct __cthread *__cthread_t; +typedef int __cthread_key_t; +typedef void * (*__cthread_fn_t)(void *__arg); + +__cthread_t __cthread_fork (__cthread_fn_t, void *); +void __cthread_detach (__cthread_t); +int __cthread_keycreate (__cthread_key_t *); +int __cthread_getspecific (__cthread_key_t, void **); +int __cthread_setspecific (__cthread_key_t, void *); + +int __pthread_getattr_np (pthread_t, pthread_attr_t *); +int __pthread_attr_getstack (const pthread_attr_t *, void **, size_t *); + #endif |