summaryrefslogtreecommitdiff
path: root/src/env/__init_tls.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/env/__init_tls.c')
-rw-r--r--src/env/__init_tls.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/src/env/__init_tls.c b/src/env/__init_tls.c
index 6b3cd28b..e70025d7 100644
--- a/src/env/__init_tls.c
+++ b/src/env/__init_tls.c
@@ -46,19 +46,14 @@ typedef Elf32_Phdr Phdr;
typedef Elf64_Phdr Phdr;
#endif
-#define AUX_CNT 6
-
-void __init_tls(size_t *auxv)
+void __init_tls(size_t *aux)
{
- size_t i, aux[AUX_CNT] = { 0 };
unsigned char *p, *mem;
size_t n, d;
Phdr *phdr, *tls_phdr=0;
size_t base = 0;
- for (; auxv[0]; auxv+=2) if (auxv[0]<AUX_CNT) aux[auxv[0]] = auxv[1];
- p = (void *)aux[AT_PHDR];
- for (p=(void *)aux[AT_PHDR]; aux[AT_PHNUM]--; p+=aux[AT_PHENT]) {
+ for (p=(void *)aux[AT_PHDR],n=aux[AT_PHNUM]; n; n--,p+=aux[AT_PHENT]) {
phdr = (void *)p;
if (phdr->p_type == PT_PHDR)
base = aux[AT_PHDR] - phdr->p_vaddr;
@@ -79,8 +74,6 @@ void __init_tls(size_t *auxv)
mem = __mmap(0, libc.tls_size, PROT_READ|PROT_WRITE,
MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
- if (mem == MAP_FAILED) a_crash();
-
if (!__install_initial_tls(__copy_tls(mem))) a_crash();
}
#else