Update.
authorUlrich Drepper <drepper@redhat.com>
Thu, 27 Apr 2000 20:18:02 +0000 (20:18 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 27 Apr 2000 20:18:02 +0000 (20:18 +0000)
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>.

ChangeLog
elf/soinit.c
linuxthreads/ChangeLog
linuxthreads/Versions
linuxthreads/pthread.c
linuxthreads/sysdeps/i386/i686/pt-machine.h
linuxthreads_db/ChangeLog
sysdeps/i386/i486/atomicity.h

index e5c2bb4..b068b8f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+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.
+
 2000-04-27  Jakub Jelinek  <jakub@redhat.com>
 
        * nss/getXXbyYY_r.c: Fix a typo in __old_getxxbyyy_r versioning.
@@ -44,7 +52,7 @@
 2000-04-27  Andreas Jaeger  <aj@suse.de>
 
        * intl/libintl.h: Fix typo, reported by Bruno Haible
-       <clisp.cons.org>.
+       <haible@clisp.cons.org>.
 
 2000-04-25  Ulrich Drepper  <drepper@redhat.com>
 
index 1dee73c..7db054e 100644 (file)
@@ -40,6 +40,9 @@ extern void __deregister_frame (const void *);
 # endif
 #endif
 
+/* We have to initialize the thread library at least if bit.  */
+extern void __pthread_initialize_minimal (void) __attribute__ ((weak));
+
 /* This function will be called from _init in init-first.c.  */
 void
 __libc_global_ctors (void)
@@ -48,6 +51,11 @@ __libc_global_ctors (void)
   run_hooks (__CTOR_LIST__);
 #ifdef HAVE_DWARF2_UNWIND_INFO
 # ifdef HAVE_DWARF2_UNWIND_INFO_STATIC
+  /* Initialize the thread library at least a bit since the libgcc functions
+     are using thread functions if these are available.  */
+  if (__pthread_initialize_minimal)
+    __pthread_initialize_minimal ();
+
   {
     static struct object ob;
     __register_frame_info (__EH_FRAME_BEGIN__, &ob);
index 8161323..ccc38eb 100644 (file)
@@ -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
index e8f7f4e..327e62e 100644 (file)
@@ -138,5 +138,8 @@ libpthread {
 
     # Extensions.
     pthread_yield;
+
+    # New internal function.
+    __pthread_initialize_minimal;
   }
 }
index 7370420..a78e0c9 100644 (file)
@@ -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);
index 4e7832b..68e7871 100644 (file)
@@ -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"
index 9d0286a..3fc5b6e 100644 (file)
@@ -1,3 +1,10 @@
+2000-04-24  Mark Kettenis  <kettenis@gnu.org>
+
+       * td_thr_get_info.c (td_thr_get_info): Set ti_state to
+       TD_THR_ACTIVE instead of TD_THR_RUN.  If the thread is no longer
+       running but is still joinable, set it to TD_THR_ZOMBIE.  Otherwise
+       set it to TD_THR_UNKNOWN.
+
 2000-02-25  Andreas Jaeger  <aj@suse.de>
 
        * td_ta_thr_iter.c: Include <alloca.h> for prototype declaration.
index da4137a..b30363d 100644 (file)
@@ -1,5 +1,5 @@
 /* Low-level functions for atomic operations.  ix86 version, x >= 4.
-   Copyright (C) 1997 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 #include <inttypes.h>
 
 
-static inline int
+static inline uint32_t
 __attribute__ ((unused))
-exchange_and_add (volatile uint32_t *mem, int val)
+exchange_and_add (volatile uint32_t *mem, uint32_t val)
 {
-  register int result;
+  register uint32_t result;
   __asm__ __volatile__ ("lock; xaddl %0,%2"
                        : "=r" (result) : "0" (val), "m" (*mem) : "memory");
   return result;