mirror of
https://github.com/fluencelabs/musl
synced 2025-06-30 15:11:55 +00:00
unify static and dynamic linked implementations of thread-local storage
this both allows removal of some of the main remaining uses of the SHARED macro and clears one obstacle to static-linked dlopen support, which may be added at some point in the future. specialized single-TLS-module versions of __copy_tls and __reset_tls are removed and replaced with code adapted from their dynamic-linked versions, capable of operating on a whole chain of TLS modules, and use of the dynamic linker's DSO chain (which contains large struct dso objects) by these functions is replaced with a new chain of struct tls_module objects containing only the information needed for implementing TLS. this may also yield some performance benefit initializing TLS for a new thread when a large number of modules without TLS have been loaded, since since there is no need to walk structures for modules without TLS.
This commit is contained in:
@ -11,13 +11,20 @@ struct __locale_struct {
|
||||
const struct __locale_map *volatile cat[6];
|
||||
};
|
||||
|
||||
struct tls_module {
|
||||
struct tls_module *next;
|
||||
void *image;
|
||||
size_t len, size, align, offset;
|
||||
};
|
||||
|
||||
struct __libc {
|
||||
int can_do_threads;
|
||||
int threaded;
|
||||
int secure;
|
||||
volatile int threads_minus_1;
|
||||
size_t *auxv;
|
||||
size_t tls_size;
|
||||
struct tls_module *tls_head;
|
||||
size_t tls_size, tls_align, tls_cnt;
|
||||
size_t page_size;
|
||||
struct __locale_struct global_locale;
|
||||
};
|
||||
|
Reference in New Issue
Block a user