1 2 #include "namespace.h" 3 #include <machine/tls.h> 4 #include <sys/mman.h> 5 #include <sys/queue.h> 6 #include <sys/stat.h> 7 #include <sys/types.h> 8 #include <errno.h> 9 #include <fcntl.h> 10 #include <limits.h> 11 #include <pthread.h> 12 #include <stdarg.h> 13 #include <stdlib.h> 14 #include <string.h> 15 #include <time.h> 16 #include <unistd.h> 17 #ifdef _PTHREADS_DEBUGGING 18 #include <stdio.h> 19 #endif 20 #include "un-namespace.h" 21 22 #include "thr_private.h" 23 void 24 _libthread_distribute_static_tls(size_t offset, void *src, 25 size_t len, size_t total_len); 26 27 void 28 _libthread_distribute_static_tls(size_t offset, void *src, 29 size_t len, size_t total_len) 30 { 31 pthread_t curthread = tls_get_curthread(); 32 pthread_t td; 33 char *tlsbase; 34 35 THREAD_LIST_LOCK(curthread); 36 TAILQ_FOREACH(td, &_thread_list, tle) { 37 tlsbase = (char *)td->tcb - offset; 38 memcpy(tlsbase, src, len); 39 memset(tlsbase + len, 0, total_len - len); 40 } 41 THREAD_LIST_UNLOCK(curthread); 42 } 43 44 __strong_reference(_libthread_distribute_static_tls, _pthread_distribute_static_tls); 45