diff options
Diffstat (limited to 'src/env/__init_tls.c')
-rw-r--r-- | src/env/__init_tls.c | 11 |
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 |