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