about summary refs log tree commit diff
path: root/src/env/__init_tls.c
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2014-06-19 02:59:44 -0400
committerRich Felker <dalias@aerifal.cx>2014-06-19 02:59:44 -0400
commit5ba238e1e48d2fe4107e09903b26b2b36aa9e9ff (patch)
tree2933bdc33c131122acea9b188186443da2e6a37b /src/env/__init_tls.c
parent4e0b4a5de735ecb241fadb1e15381c947e16e71f (diff)
downloadmusl-5ba238e1e48d2fe4107e09903b26b2b36aa9e9ff.tar.gz
musl-5ba238e1e48d2fe4107e09903b26b2b36aa9e9ff.tar.xz
musl-5ba238e1e48d2fe4107e09903b26b2b36aa9e9ff.zip
separate __tls_get_addr implementation from dynamic linker/init_tls
such separation serves multiple purposes:

- by having the common path for __tls_get_addr alone in its own
  function with a tail call to the slow case, code generation is
  greatly improved.

- by having __tls_get_addr in it own file, it can be replaced on a
  per-arch basis as needed, for optimization or ABI-specific purposes.

- by removing __tls_get_addr from __init_tls.c, a few bytes of code
  are shaved off of static binaries (which are unlikely to use this
  function unless the linker messed up).
Diffstat (limited to 'src/env/__init_tls.c')
-rw-r--r--src/env/__init_tls.c5
1 files changed, 0 insertions, 5 deletions
diff --git a/src/env/__init_tls.c b/src/env/__init_tls.c
index f7eab8d6..13cf2eea 100644
--- a/src/env/__init_tls.c
+++ b/src/env/__init_tls.c
@@ -53,11 +53,6 @@ void *__copy_tls(unsigned char *mem)
 	return td;
 }
 
-void *__tls_get_addr(size_t *v)
-{
-	return (char *)__pthread_self()->dtv[1]+v[1];
-}
-
 #if ULONG_MAX == 0xffffffff
 typedef Elf32_Phdr Phdr;
 #else