mirror of
https://github.com/fluencelabs/musl
synced 2025-06-02 01:21:34 +00:00
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).
18 lines
350 B
C
18 lines
350 B
C
#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
|
|
}
|