mirror of https://git.musl-libc.org/git/musl
Browse Source
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).master
3 changed files with 23 additions and 11 deletions
@ -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 |
|||
} |
|||
Loading…
Reference in new issue