summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2015-04-14 10:42:44 -0400
committerRich Felker <dalias@aerifal.cx>2015-04-14 10:42:44 -0400
commitbc081f628b51337b525ca2d53aeff1b971f092f5 (patch)
treec09ccb284057973bb978adbdfecbfcd2d655a227
parentda7ccf822c2a7f0413868b8d99029907f1d61a41 (diff)
downloadmusl-bc081f628b51337b525ca2d53aeff1b971f092f5.tar.gz
fix inconsistent visibility for internal __tls_get_new function
at the point of call it was declared hidden, but the definition was not hidden. for some toolchains this inconsistency produced textrels without ld-time binding.
-rw-r--r--src/ldso/dynlink.c1
-rw-r--r--src/thread/__tls_get_addr.c5
2 files changed, 3 insertions, 3 deletions
diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c
index 46183ce7..0151f74d 100644
--- a/src/ldso/dynlink.c
+++ b/src/ldso/dynlink.c
@@ -1051,6 +1051,7 @@ void *__copy_tls(unsigned char *mem)
return td;
}
+__attribute__((__visibility__("hidden")))
void *__tls_get_new(size_t *v)
{
pthread_t self = __pthread_self();
diff --git a/src/thread/__tls_get_addr.c b/src/thread/__tls_get_addr.c
index 28ec7f02..36333967 100644
--- a/src/thread/__tls_get_addr.c
+++ b/src/thread/__tls_get_addr.c
@@ -1,13 +1,12 @@
#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
+ __attribute__((__visibility__("hidden")))
+ void *__tls_get_new(size_t *);
if (v[0]<=(size_t)self->dtv[0])
return (char *)self->dtv[v[0]]+v[1];
return __tls_get_new(v);