Browse Source

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.
Rich Felker 10 years ago
parent
commit
bc081f628b
2 changed files with 3 additions and 3 deletions
  1. 1 0
      src/ldso/dynlink.c
  2. 2 3
      src/thread/__tls_get_addr.c

+ 1 - 0
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();

+ 2 - 3
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);