aboutsummaryrefslogtreecommitdiff
path: root/linuxthreads/pthread.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-07-23 23:12:01 +0000
committerUlrich Drepper <drepper@redhat.com>2002-07-23 23:12:01 +0000
commit8a30f00fe8ea30054c2df183d34ef3ad8a522cc5 (patch)
tree4b34500fac3e847c4f98bec8ca6c0ab96f7704ba /linuxthreads/pthread.c
parentfcda29e2604e941cbe9a9eb30c56b8b8fa607836 (diff)
downloadglibc-8a30f00fe8ea30054c2df183d34ef3ad8a522cc5.zip
glibc-8a30f00fe8ea30054c2df183d34ef3ad8a522cc5.tar.gz
glibc-8a30f00fe8ea30054c2df183d34ef3ad8a522cc5.tar.bz2
Update.
2002-07-23 Ulrich Drepper <drepper@redhat.com> * sysdeps/generic/libc-tls.c: New file. * csu/Makefile (routines): Add libc-tls. (static-only-routines): Add libc-tls. * elf/dl-support.c (_dl_phdr): New variable. (_dl_phnum): New variable. (_dl_aux_init): Initialize _dl_phdr and _dl_phnum from aux vector. * sysdeps/generic/libc-start.c (__libc_start_main): Reorganize code for !SHARED. First look through auxiliary vector. If TLS always call __pthread_initialize_minimal. * sysdeps/generic/dl-tls.c (_dl_allocate_tls): Make sure size argument in mmap call is never zero.
Diffstat (limited to 'linuxthreads/pthread.c')
-rw-r--r--linuxthreads/pthread.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c
index 12ce38b..8bca63e 100644
--- a/linuxthreads/pthread.c
+++ b/linuxthreads/pthread.c
@@ -394,13 +394,26 @@ extern void *__dso_handle __attribute__ ((weak));
#endif
+#if defined USE_TLS && !defined SHARED
+extern void __libc_setup_tls (size_t tcbsize, size_t tcbalign);
+#endif
+
+
/* Do some minimal initialization which has to be done during the
startup of the C library. */
void
__pthread_initialize_minimal(void)
{
#ifdef USE_TLS
- pthread_descr self = THREAD_SELF;
+ pthread_descr self;
+
+# ifndef SHARED
+ /* Unlike in the dynamically linked case the dynamic linker has not
+ taken care of initializing the TLS data structures. */
+ __libc_setup_tls (TLS_TCB_SIZE, TLS_TCB_ALIGN);
+# endif
+
+ self = THREAD_SELF;
/* The memory for the thread descriptor was allocated elsewhere as
part of the TLS allocation. We have to initialize the data