drm/linux: Improve put_user()
[dragonfly.git] / lib / libthread_xu / thread / thr_distribute.c
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         struct pthread *curthread = tls_get_curthread();
32         struct pthread *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);