diff options
author | davidxu <davidxu@FreeBSD.org> | 2006-03-28 06:09:24 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2006-03-28 06:09:24 +0000 |
commit | f8168da7cf95cc9e1082de2f92593fa9e40bbde5 (patch) | |
tree | ac985a06120dcffc30366f910f16d1483f8eccad | |
parent | b99f1961b8b3456fa23cc4113117f8f1139d5c60 (diff) | |
download | FreeBSD-src-f8168da7cf95cc9e1082de2f92593fa9e40bbde5.zip FreeBSD-src-f8168da7cf95cc9e1082de2f92593fa9e40bbde5.tar.gz |
Allocate space for thread pointer, this allows thread library to access
its pointer from begin, and simplifies _get_curthread() in libthr.
-rw-r--r-- | lib/libc/gen/tls.c | 6 | ||||
-rw-r--r-- | libexec/rtld-elf/amd64/reloc.c | 2 | ||||
-rw-r--r-- | libexec/rtld-elf/i386/reloc.c | 2 | ||||
-rw-r--r-- | libexec/rtld-elf/rtld.c | 2 | ||||
-rw-r--r-- | libexec/rtld-elf/sparc64/reloc.c | 2 |
5 files changed, 7 insertions, 7 deletions
diff --git a/lib/libc/gen/tls.c b/lib/libc/gen/tls.c index 033c737..f63b361 100644 --- a/lib/libc/gen/tls.c +++ b/lib/libc/gen/tls.c @@ -131,7 +131,7 @@ __libc_allocate_tls(void *oldtls, size_t tcbsize, size_t tcbalign __unused) if (size < tcbsize) size = tcbsize; - tls = malloc(size); + tls = calloc(1, size); dtv = malloc(3 * sizeof(Elf_Addr)); *(Elf_Addr **) tls = dtv; @@ -202,7 +202,7 @@ __libc_allocate_tls(void *oldtls, size_t tcbsize, size_t tcbalign) size = round(tls_static_space, tcbalign); assert(tcbsize >= 2*sizeof(Elf_Addr)); - tls = malloc(size + tcbsize); + tls = calloc(1, size + tcbsize); dtv = malloc(3 * sizeof(Elf_Addr)); segbase = (Elf_Addr)(tls + size); @@ -309,7 +309,7 @@ _init_tls() } } - tls = _rtld_allocate_tls(NULL, 2*sizeof(Elf_Addr), + tls = _rtld_allocate_tls(NULL, 3*sizeof(Elf_Addr), sizeof(Elf_Addr)); _set_tp(tls); diff --git a/libexec/rtld-elf/amd64/reloc.c b/libexec/rtld-elf/amd64/reloc.c index 8f25278..8a32adf 100644 --- a/libexec/rtld-elf/amd64/reloc.c +++ b/libexec/rtld-elf/amd64/reloc.c @@ -384,7 +384,7 @@ allocate_initial_tls(Obj_Entry *objs) */ tls_static_space = tls_last_offset + RTLD_STATIC_TLS_EXTRA; amd64_set_fsbase(allocate_tls(objs, 0, - 2*sizeof(Elf_Addr), sizeof(Elf_Addr))); + 3*sizeof(Elf_Addr), sizeof(Elf_Addr))); } void *__tls_get_addr(tls_index *ti) diff --git a/libexec/rtld-elf/i386/reloc.c b/libexec/rtld-elf/i386/reloc.c index 809f16e..ec83bff 100644 --- a/libexec/rtld-elf/i386/reloc.c +++ b/libexec/rtld-elf/i386/reloc.c @@ -336,7 +336,7 @@ allocate_initial_tls(Obj_Entry *objs) * use. */ tls_static_space = tls_last_offset + RTLD_STATIC_TLS_EXTRA; - tls = allocate_tls(objs, NULL, 2*sizeof(Elf_Addr), sizeof(Elf_Addr)); + tls = allocate_tls(objs, NULL, 3*sizeof(Elf_Addr), sizeof(Elf_Addr)); i386_set_gsbase(tls); } diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index e164ef8..9824c3e 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -2707,7 +2707,7 @@ allocate_tls(Obj_Entry *objs, void *oldtls, size_t tcbsize, size_t tcbalign) size = tls_static_space; - tls = malloc(size); + tls = calloc(1, size); dtv = calloc(1, (tls_max_index + 2) * sizeof(Elf_Addr)); *(Elf_Addr**) tls = dtv; diff --git a/libexec/rtld-elf/sparc64/reloc.c b/libexec/rtld-elf/sparc64/reloc.c index f264860..dc0d830 100644 --- a/libexec/rtld-elf/sparc64/reloc.c +++ b/libexec/rtld-elf/sparc64/reloc.c @@ -731,7 +731,7 @@ allocate_initial_tls(Obj_Entry *objs) * use. */ tls_static_space = tls_last_offset + RTLD_STATIC_TLS_EXTRA; - tp = allocate_tls(objs, NULL, 2*sizeof(Elf_Addr), sizeof(Elf_Addr)); + tp = allocate_tls(objs, NULL, 3*sizeof(Elf_Addr), sizeof(Elf_Addr)); } void *__tls_get_addr(tls_index *ti) |