aboutsummaryrefslogtreecommitdiff
path: root/linuxthreads
diff options
context:
space:
mode:
Diffstat (limited to 'linuxthreads')
-rw-r--r--linuxthreads/ChangeLog6
-rw-r--r--linuxthreads/Examples/tststatic.c1
-rw-r--r--linuxthreads/pthread.c15
3 files changed, 20 insertions, 2 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 3b87581339..95feff2ac6 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,6 +1,10 @@
2002-07-22 Ulrich Drepper <drepper@redhat.com>
- * Makefile: Actually creat tst-signal.out file when running the test.
+ * pthread.c (__pthread_initialize_minimal): If !SHARED and TLS
+ call __libc_setup_tls first.
+ * Makefile: Actually create tst-signal.out file when running the test.
+ (tests): Add tststatic.
+ * Examples/tststatic.c: New file.
2002-07-19 Ulrich Drepper <drepper@redhat.com>
diff --git a/linuxthreads/Examples/tststatic.c b/linuxthreads/Examples/tststatic.c
new file mode 100644
index 0000000000..421011a3c4
--- /dev/null
+++ b/linuxthreads/Examples/tststatic.c
@@ -0,0 +1 @@
+#include "ex1.c"
diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c
index 12ce38ba75..8bca63e201 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