From a162642d80973c1ca52bf58e0d776060d9746d75 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 5 Aug 2002 06:38:00 +0000 Subject: [PATCH] * sysdeps/generic/libc-tls.c (__libc_setup_tls): Make the phdr loop actually iterate over the elements. Fix typo p_type -> p_vaddr. * include/pthread.h: Don't declare __pthread_initialize_minimal as weak here; we declare it weak or strong in the one place we use it. * sysdeps/generic/libc-start.c: ... which is here. Don't make the decl weak if [USE_TLS], since static programs need TLS setup even when single-threaded. --- ChangeLog | 9 +++++++++ include/pthread.h | 2 -- sysdeps/generic/libc-start.c | 9 +++++++-- sysdeps/generic/libc-tls.c | 10 ++++------ 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2d2dd67..b3a0dd4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2002-08-04 Roland McGrath + * sysdeps/generic/libc-tls.c (__libc_setup_tls): Make the phdr loop + actually iterate over the elements. Fix typo p_type -> p_vaddr. + + * include/pthread.h: Don't declare __pthread_initialize_minimal as + weak here; we declare it weak or strong in the one place we use it. + * sysdeps/generic/libc-start.c: ... which is here. + Don't make the decl weak if [USE_TLS], since static programs need TLS + setup even when single-threaded. + * stdlib/isomac.c (fmt): Add -DNOT_IN_libc to the compiler command. * elf/Makefile (test-srcs): Add $(modules-names) to it. diff --git a/include/pthread.h b/include/pthread.h index fb37db1..f8860bd 100644 --- a/include/pthread.h +++ b/include/pthread.h @@ -2,5 +2,3 @@ /* This function is called to initialize the pthread library. */ extern void __pthread_initialize (void) __attribute__ ((weak)); - -extern void __pthread_initialize_minimal (void) __attribute__ ((weak)); diff --git a/sysdeps/generic/libc-start.c b/sysdeps/generic/libc-start.c index 600136d..8d523e6 100644 --- a/sysdeps/generic/libc-start.c +++ b/sysdeps/generic/libc-start.c @@ -30,7 +30,12 @@ extern int __libc_multiple_libcs; extern void *__libc_stack_end; #ifndef SHARED -extern void __pthread_initialize_minimal (void) __attribute__ ((weak)); +# include +extern void __pthread_initialize_minimal (void) +# if !(USE_TLS - 0) + __attribute__ ((weak)) +# endif + ; #endif @@ -91,7 +96,7 @@ BP_SYM (__libc_start_main) (int (*main) (int, char **, char **), we need to setup errno. If there is no thread library and we handle TLS the function is defined in the libc to initialized the TLS handling. */ -# ifndef TLS +# if !(USE_TLS - 0) if (__pthread_initialize_minimal) # endif __pthread_initialize_minimal (); diff --git a/sysdeps/generic/libc-tls.c b/sysdeps/generic/libc-tls.c index 6b9a746..6c01f41 100644 --- a/sysdeps/generic/libc-tls.c +++ b/sysdeps/generic/libc-tls.c @@ -57,14 +57,12 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign) size_t max_align = tcbalign; size_t loadaddr = ~0ul; size_t tcb_offset; + ElfW(Phdr) *phdr; /* Look through the TLS segment if there is any. */ if (_dl_phdr != NULL) - { - ElfW(Phdr) *phdr = _dl_phdr; - size_t phnum = _dl_phnum; - - while (phnum-- > 0) + for (phdr = _dl_phdr; phdr < &_dl_phdr[_dl_phnum]; ++phdr) + { if (phdr->p_type == PT_TLS) { /* Remember the values we need. */ @@ -80,7 +78,7 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign) /* We have to find the load address which is not easy. Look for the load segment with the lowest address. */ if (phdr->p_vaddr < loadaddr) - loadaddr = phdr->p_type; + loadaddr = phdr->p_vaddr; } } -- 2.7.4