about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nptl/ChangeLog5
-rw-r--r--nptl/init.c6
2 files changed, 11 insertions, 0 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 6dea2933e2..cc8ac2af4e 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,8 @@
+2002-12-11  Ulrich Drepper  <drepper@redhat.com>
+
+	* init.c (__pthread_initialize_minimal): Fix initialization in
+	static lib by preventing gcc from being too clever.
+
 2002-12-10  Ulrich Drepper  <drepper@redhat.com>
 
 	* init.c (__pthread_initialize_minimal): Remove unneccesary
diff --git a/nptl/init.c b/nptl/init.c
index e3f51119cf..678c0a56c8 100644
--- a/nptl/init.c
+++ b/nptl/init.c
@@ -104,6 +104,12 @@ __pthread_initialize_minimal (void)
   /* 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);
+
+  /* We must prevent gcc from being clever and move any of the
+     following code ahead of the __libc_setup_tls call.  This function
+     will initialize the thread register which is subsequently
+     used.  */
+  __asm __volatile ("");
 #endif
 
   /* Minimal initialization of the thread descriptor.  */