diff options
Diffstat (limited to 'src/thread/__tls_get_addr.c')
-rw-r--r-- | src/thread/__tls_get_addr.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/thread/__tls_get_addr.c b/src/thread/__tls_get_addr.c new file mode 100644 index 00000000..28ec7f02 --- /dev/null +++ b/src/thread/__tls_get_addr.c @@ -0,0 +1,17 @@ +#include <stddef.h> +#include "pthread_impl.h" +#include "libc.h" + +void *__tls_get_new(size_t *) ATTR_LIBC_VISIBILITY; + +void *__tls_get_addr(size_t *v) +{ + pthread_t self = __pthread_self(); +#ifdef SHARED + if (v[0]<=(size_t)self->dtv[0]) + return (char *)self->dtv[v[0]]+v[1]; + return __tls_get_new(v); +#else + return (char *)self->dtv[1]+v[1]; +#endif +} |