about summary refs log tree commit diff
path: root/linuxthreads
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-04-27 20:18:02 +0000
committerUlrich Drepper <drepper@redhat.com>2000-04-27 20:18:02 +0000
commit3300816c38721bcddbbeb92de7fe44b90454bce6 (patch)
treecd35fe7dc0799f565c04122cc63054d4790d9041 /linuxthreads
parent78477e4843c34f2ad54d25975758c3342746d0cd (diff)
downloadglibc-3300816c38721bcddbbeb92de7fe44b90454bce6.tar.gz
glibc-3300816c38721bcddbbeb92de7fe44b90454bce6.tar.xz
glibc-3300816c38721bcddbbeb92de7fe44b90454bce6.zip
Update.
2000-04-27  Ulrich Drepper  <drepper@redhat.com>

	* elf/soinit.c (__libc_global_ctors): Call __pthread_initialize_minimal
	if this function is available.

	* sysdeps/i386/i486/atomicity.h (exchange_and_add): Use uint32_t for
	all values.

	<haible@clisp.cons.org>.
Diffstat (limited to 'linuxthreads')
-rw-r--r--linuxthreads/ChangeLog9
-rw-r--r--linuxthreads/Versions3
-rw-r--r--linuxthreads/pthread.c25
-rw-r--r--linuxthreads/sysdeps/i386/i686/pt-machine.h3
4 files changed, 30 insertions, 10 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 8161323b4d..ccc38ebd71 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,12 @@
+2000-04-27  Ulrich Drepper  <drepper@redhat.com>
+
+	* Versions [libpthread] (GLIBC_2.2): Add __pthread_initialize_minimal.
+	* pthread.c (__pthread_initialize_minimal): New function.  Perform
+	minimal initialization.
+	(pthread_initialize): Remove this code here.
+	* sysdeps/i386/i686/pt-machine.h: Include "../useldt.h" again.  We
+	are working around the problem in glibc.
+
 2000-04-25  Ulrich Drepper  <drepper@redhat.com>
 
 	* sysdeps/i386/i686/pt-machine.h: Do not use "../useldt.h" for
diff --git a/linuxthreads/Versions b/linuxthreads/Versions
index e8f7f4e30c..327e62ea0c 100644
--- a/linuxthreads/Versions
+++ b/linuxthreads/Versions
@@ -138,5 +138,8 @@ libpthread {
 
     # Extensions.
     pthread_yield;
+
+    # New internal function.
+    __pthread_initialize_minimal;
   }
 }
diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c
index 737042002a..a78e0c92de 100644
--- a/linuxthreads/pthread.c
+++ b/linuxthreads/pthread.c
@@ -310,6 +310,23 @@ static void pthread_initialize(void) __attribute__((constructor));
 
 extern void *__dso_handle __attribute__ ((weak));
 
+
+/* Do some minimal initialization which has to be done during the
+   startup of the C library.  */
+void
+__pthread_initialize_minimal(void)
+{
+  /* The errno/h_errno variable of the main thread are the global ones.  */
+  __pthread_initial_thread.p_errnop = &_errno;
+  __pthread_initial_thread.p_h_errnop = &_h_errno;
+  /* If we have special thread_self processing, initialize that for the
+     main thread now.  */
+#ifdef INIT_THREAD_SELF
+  INIT_THREAD_SELF(&__pthread_initial_thread, 0);
+#endif
+}
+
+
 static void pthread_initialize(void)
 {
   struct sigaction sa;
@@ -330,14 +347,6 @@ static void pthread_initialize(void)
     (char *)(((long)CURRENT_STACK_FRAME - 2 * STACK_SIZE) & ~(STACK_SIZE - 1));
   /* Update the descriptor for the initial thread. */
   __pthread_initial_thread.p_pid = __getpid();
-  /* If we have special thread_self processing, initialize that for the
-     main thread now.  */
-#ifdef INIT_THREAD_SELF
-  INIT_THREAD_SELF(&__pthread_initial_thread, 0);
-#endif
-  /* The errno/h_errno variable of the main thread are the global ones.  */
-  __pthread_initial_thread.p_errnop = &_errno;
-  __pthread_initial_thread.p_h_errnop = &_h_errno;
   /* Play with the stack size limit to make sure that no stack ever grows
      beyond STACK_SIZE minus one page (to act as a guard page). */
   getrlimit(RLIMIT_STACK, &limit);
diff --git a/linuxthreads/sysdeps/i386/i686/pt-machine.h b/linuxthreads/sysdeps/i386/i686/pt-machine.h
index 4e7832b66a..68e7871a62 100644
--- a/linuxthreads/sysdeps/i386/i686/pt-machine.h
+++ b/linuxthreads/sysdeps/i386/i686/pt-machine.h
@@ -63,5 +63,4 @@ __compare_and_swap (long int *p, long int oldval, long int newval)
 }
 
 
-/* Use the LDT implementation only if the kernel is fixed.  */
-//#include "../useldt.h"
+#include "../useldt.h"