Update.
authorUlrich Drepper <drepper@redhat.com>
Fri, 3 Jan 2003 01:35:14 +0000 (01:35 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 3 Jan 2003 01:35:14 +0000 (01:35 +0000)
2003-01-02  Jakub Jelinek  <jakub@redhat.com>

* sysdeps/unix/sysv/linux/arm/sigaction.c (__sigaction,
sigaction): Protect weak_alias and libc_hidden_weak with
#ifndef LIBC_SIGACTION.
* sysdeps/unix/sysv/linux/ia64/sigaction.c (__sigaction,
sigaction): Likewise.
* sysdeps/unix/sysv/linux/mips/sigaction.c (__sigaction,
sigaction): Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c (__sigaction,
sigaction): Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c (__sigaction,
sigaction): Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c (__sigaction,
sigaction): Likewise.
* sysdeps/unix/sysv/linux/x86_64/sigaction.c (__sigaction,
sigaction): Likewise.
* sysdeps/unix/sysv/linux/i386/sigaction.c (__sigaction,
sigaction): Likewise.  Remove SIGCANCEL handling here.
* sysdeps/unix/sysv/linux/sigaction.c (__sigaction, sigaction):
Likewise.

44 files changed:
ChangeLog
linuxthreads/ChangeLog
linuxthreads/Makefile
linuxthreads/Versions
linuxthreads/forward.c
linuxthreads/internals.h
linuxthreads/libc-cancellation.c
linuxthreads/ptfork.c
linuxthreads/pthread.c
linuxthreads/ptlongjmp.c
linuxthreads/signals.c
linuxthreads/sysdeps/pthread/bits/libc-lock.h
linuxthreads/sysdeps/pthread/bits/pthreadtypes.h
linuxthreads/sysdeps/pthread/pthread.h
linuxthreads/sysdeps/pthread/sigaction.c [new file with mode: 0644]
linuxthreads/sysdeps/unix/sysv/linux/fork.c
linuxthreads/sysdeps/unix/sysv/linux/jmp-unwind.c
linuxthreads/sysdeps/unix/sysv/linux/raise.c [new file with mode: 0644]
linuxthreads/sysdeps/unix/sysv/linux/sigwait.c [new file with mode: 0644]
linuxthreads/tst-cancel-static.c [new file with mode: 0644]
linuxthreads/tst-cancel-wrappers.sh
nptl/ChangeLog
nptl/Makefile
nptl/Versions
nptl/forward.c
nptl/init.c
nptl/old_pthread_cond_broadcast.c
nptl/old_pthread_cond_destroy.c
nptl/old_pthread_cond_init.c
nptl/old_pthread_cond_signal.c
nptl/old_pthread_cond_wait.c
nptl/pthreadP.h
nptl/pthread_cond_destroy.c
nptl/pthread_cond_init.c
nptl/sysdeps/pthread/sigaction.c
sysdeps/unix/sysv/linux/arm/sigaction.c
sysdeps/unix/sysv/linux/i386/sigaction.c
sysdeps/unix/sysv/linux/ia64/sigaction.c
sysdeps/unix/sysv/linux/mips/sigaction.c
sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c
sysdeps/unix/sysv/linux/sigaction.c
sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c
sysdeps/unix/sysv/linux/x86_64/sigaction.c

index 5940301..68c5e0c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2003-01-02  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/unix/sysv/linux/arm/sigaction.c (__sigaction,
+       sigaction): Protect weak_alias and libc_hidden_weak with
+       #ifndef LIBC_SIGACTION.
+       * sysdeps/unix/sysv/linux/ia64/sigaction.c (__sigaction,
+       sigaction): Likewise.
+       * sysdeps/unix/sysv/linux/mips/sigaction.c (__sigaction,
+       sigaction): Likewise.
+       * sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c (__sigaction,
+       sigaction): Likewise.
+       * sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c (__sigaction,
+       sigaction): Likewise.
+       * sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c (__sigaction,
+       sigaction): Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/sigaction.c (__sigaction,
+       sigaction): Likewise.
+       * sysdeps/unix/sysv/linux/i386/sigaction.c (__sigaction,
+       sigaction): Likewise.  Remove SIGCANCEL handling here.
+       * sysdeps/unix/sysv/linux/sigaction.c (__sigaction, sigaction):
+       Likewise.
+
 2003-01-02  Art Haas  <ahaas@airmail.net>
 
        * login/tst-utmp.c: Convert GCC extension initializer syntax to C99.
index a667e22..ad38286 100644 (file)
@@ -1,5 +1,66 @@
 2003-01-02  Ulrich Drepper  <drepper@redhat.com>
 
+       * tst-cancel-wrappers.sh: Exclude sigwait.c as well, it does not have
+       cancellation tests.
+
+2003-01-02  Jakub Jelinek  <jakub@redhat.com>
+
+       * internals.h (struct pthread_functions): Rename
+       ptr_pthread_cond_* fields to ptr___pthread_cond_*.
+       * pthread.c (pthread_functions): Adjust.
+       * forward.c: Export both pthread_cond_*@@GLIBC_2.3.2 and
+       pthread_cond_*@GLIBC_2.0 compatibility symbols.
+       * Versions [libc] (GLIBC_2.3.2): Export pthread_cond_broadcast,
+       pthread_cond_destroy, pthread_cond_init, pthread_cond_signal
+       and pthread_cond_wait.
+
+       * sysdeps/pthread/bits/pthreadtypes.h (__pthread_cond_align_t): New
+       type.
+       (pthread_cond_t): Add __align member, shorten __padding.
+       * sysdeps/pthread/pthread.h (PHTREAD_COND_INITIALIZER): Initialize
+       __padding and __align too.
+
+       * sysdeps/pthread/bits/libc-lock.h (__libc_maybe_call2): Add
+       __builtin_expect.
+       * sysdeps/pthread/sigaction.c: New file.
+       * sysdeps/unix/sysv/linux/raise.c: New file.
+       * sysdeps/unix/sysv/linux/sigwait.c: New file.
+       * sysdeps/unix/sysv/linux/fork.c (__pthread_fork): Protect
+       weak_extern with #ifndef SHARED.
+       * sysdeps/unix/sysv/linux/jmp-unwind.c (__pthread_cleanup_upto):
+       Likewise.
+       * signals.c (__sigaction): Renamed to...
+       (__pthread_sigaction): ... this.
+       (__sigaction): New strong alias, #ifdef SHARED only.
+       (sigaction): Protect with #ifdef SHARED.
+       (sigwait): Renamed to...
+       (__pthread_sigwait): ... this.
+       (sigwait): New strong alias, #ifdef SHARED only.
+       (raise): Renamed to...
+       (__pthread_raise): ... this.
+       (raise): New strong alias, #ifdef SHARED only.
+       * internals.h (__pthread_sigaction, __pthread_sigwait,
+       __pthread_raise): New prototypes.
+       (struct pthread_functions): Add ptr_pthread_sigaction,
+       ptr_pthread_sigwait, ptr_pthread_raise.
+       * pthread.c (pthread_functions): Renamed to...
+       (__pthread_functions): ... this.  No longer static, no longer
+       SHARED only.  Initialize ptr_pthread_sigaction, ptr_pthread_sigwait
+       and ptr_pthread_raise.
+       [SHARED] (ptr_pthread_functions): Change to &__pthread_functions.
+       * libc-cancellation.c (__pthread_thread_self): Remove weak_extern.
+       * ptfork.c (__fork, __vfork): Protect with #ifdef SHARED.
+       * ptlongjmp.c (siglongjmp, longjmp): Protect with #ifdef SHARED.
+
+       * Makefile (tests, tests-static): Add tst-cancel-static.
+       * tst-cancel-static.c: New test.
+
+2003-01-02  Jakub Jelinek  <jakub@redhat.com>
+
+       * Makefile (CFLAGS-pthread_atfork.c): Add -DNOT_IN_libc.
+
+2003-01-02  Ulrich Drepper  <drepper@redhat.com>
+
        * sysdeps/pthread/bits/pthreadtypes.h (pthread_cond_t): Add padding.
        * condvar.c: Add symbol versioning.  The compatibility versions
        are the same as the change in the interface does not effect this
index 9a6745f..b9edd40 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 1996-2002, 2003 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
@@ -54,6 +54,8 @@ libpthread-shared-only-routines = pt-allocrtsig
 
 libpthread-nonshared = pthread_atfork
 
+CFLAGS-pthread_atfork.c = -DNOT_IN_libc
+
 nodelete-yes = -Wl,--enable-new-dtags,-z,nodelete
 initfirst-yes = -Wl,--enable-new-dtags,-z,initfirst
 LDFLAGS-pthread.so = $(nodelete-$(have-z-nodelete)) \
@@ -92,8 +94,8 @@ test-srcs = tst-signal
 tests-reverse += tst-cancel5
 
 ifeq ($(build-static),yes)
-tests += tststatic tst-static-locale
-tests-static += tststatic tst-static-locale
+tests += tststatic tst-static-locale tst-cancel-static
+tests-static += tststatic tst-static-locale tst-cancel-static
 endif
 
 ifeq (yes,$(build-shared))
index 8dd40ee..0facfbc 100644 (file)
@@ -16,6 +16,12 @@ libc {
   GLIBC_2.1 {
     pthread_attr_init;
   }
+  GLIBC_2.3.2 {
+    # Changed pthread_cond_t.
+    pthread_cond_init; pthread_cond_destroy;
+    pthread_cond_wait; pthread_cond_signal;
+    pthread_cond_broadcast;
+  }
   GLIBC_PRIVATE {
     # Internal libc interface to libpthread
     __libc_dl_error_tsd;
index b8f54f4..6cc2f99 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -84,18 +84,49 @@ FORWARD (pthread_condattr_destroy, (pthread_condattr_t *attr), (attr), 0)
 FORWARD (pthread_condattr_init, (pthread_condattr_t *attr), (attr), 0)
 
 
-FORWARD (pthread_cond_broadcast, (pthread_cond_t *cond), (cond), 0)
-
-FORWARD (pthread_cond_destroy, (pthread_cond_t *cond), (cond), 0)
+FORWARD (__pthread_cond_broadcast, (pthread_cond_t *cond), (cond), 0)
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
+strong_alias (__pthread_cond_broadcast, __pthread_cond_broadcast_2_0)
+compat_symbol (libc, __pthread_cond_broadcast_2_0, pthread_cond_broadcast,
+              GLIBC_2_0);
+#endif
+versioned_symbol (libc, __pthread_cond_broadcast, pthread_cond_broadcast,
+                 GLIBC_2_3_2);
+
+FORWARD (__pthread_cond_destroy, (pthread_cond_t *cond), (cond), 0)
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
+strong_alias (__pthread_cond_destroy, __pthread_cond_destroy_2_0)
+compat_symbol (libc, __pthread_cond_destroy_2_0, pthread_cond_destroy,
+              GLIBC_2_0);
+#endif
+versioned_symbol (libc, __pthread_cond_destroy, pthread_cond_destroy,
+                 GLIBC_2_3_2);
 
-FORWARD (pthread_cond_init,
+FORWARD (__pthread_cond_init,
         (pthread_cond_t *cond, const pthread_condattr_t *cond_attr),
         (cond, cond_attr), 0)
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
+strong_alias (__pthread_cond_init, __pthread_cond_init_2_0)
+compat_symbol (libc, __pthread_cond_init_2_0, pthread_cond_init, GLIBC_2_0);
+#endif
+versioned_symbol (libc, __pthread_cond_init, pthread_cond_init, GLIBC_2_3_2);
 
-FORWARD (pthread_cond_signal, (pthread_cond_t *cond), (cond), 0)
+FORWARD (__pthread_cond_signal, (pthread_cond_t *cond), (cond), 0)
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
+strong_alias (__pthread_cond_signal, __pthread_cond_signal_2_0)
+compat_symbol (libc, __pthread_cond_signal_2_0, pthread_cond_signal,
+              GLIBC_2_0);
+#endif
+versioned_symbol (libc, __pthread_cond_signal, pthread_cond_signal,
+                 GLIBC_2_3_2);
 
-FORWARD (pthread_cond_wait, (pthread_cond_t *cond, pthread_mutex_t *mutex),
+FORWARD (__pthread_cond_wait, (pthread_cond_t *cond, pthread_mutex_t *mutex),
         (cond, mutex), 0)
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
+strong_alias (__pthread_cond_wait, __pthread_cond_wait_2_0)
+compat_symbol (libc, __pthread_cond_wait_2_0, pthread_cond_wait, GLIBC_2_0);
+#endif
+versioned_symbol (libc, __pthread_cond_wait, pthread_cond_wait, GLIBC_2_3_2);
 
 
 FORWARD (pthread_equal, (pthread_t thread1, pthread_t thread2),
index 872bc5c..6241e93 100644 (file)
@@ -452,6 +452,10 @@ extern void __pthread_sighandler(int signo, SIGCONTEXT ctx);
 extern void __pthread_sighandler_rt(int signo, struct siginfo *si,
                                    struct ucontext *uc);
 extern void __pthread_null_sighandler(int sig);
+extern int __pthread_sigaction (int sig, const struct sigaction *act,
+                               struct sigaction *oact);
+extern int __pthread_sigwait (const sigset_t *set, int *sig);
+extern int __pthread_raise (int sig);
 
 /* Cancellation.  */
 extern int __pthread_enable_asynccancel (void) attribute_hidden;
@@ -505,11 +509,12 @@ struct pthread_functions
   int (*ptr_pthread_attr_setscope) (pthread_attr_t *, int);
   int (*ptr_pthread_condattr_destroy) (pthread_condattr_t *);
   int (*ptr_pthread_condattr_init) (pthread_condattr_t *);
-  int (*ptr_pthread_cond_broadcast) (pthread_cond_t *);
-  int (*ptr_pthread_cond_destroy) (pthread_cond_t *);
-  int (*ptr_pthread_cond_init) (pthread_cond_t *, const pthread_condattr_t *);
-  int (*ptr_pthread_cond_signal) (pthread_cond_t *);
-  int (*ptr_pthread_cond_wait) (pthread_cond_t *, pthread_mutex_t *);
+  int (*ptr___pthread_cond_broadcast) (pthread_cond_t *);
+  int (*ptr___pthread_cond_destroy) (pthread_cond_t *);
+  int (*ptr___pthread_cond_init) (pthread_cond_t *,
+                                 const pthread_condattr_t *);
+  int (*ptr___pthread_cond_signal) (pthread_cond_t *);
+  int (*ptr___pthread_cond_wait) (pthread_cond_t *, pthread_mutex_t *);
   int (*ptr_pthread_equal) (pthread_t, pthread_t);
   void (*ptr___pthread_exit) (void *);
   int (*ptr_pthread_getschedparam) (pthread_t, int *, struct sched_param *);
@@ -528,10 +533,14 @@ struct pthread_functions
   void (*ptr_pthread_cleanup_upto) (__jmp_buf target,
                                    char *targetframe);
   pthread_descr (*ptr_pthread_thread_self) (void);
-  int (*ptr_pthread_internal_tsd_set) (int key, const void * pointer);
+  int (*ptr_pthread_internal_tsd_set) (int key, const void *pointer);
   void * (*ptr_pthread_internal_tsd_get) (int key);
   void ** __attribute__ ((__const__))
     (*ptr_pthread_internal_tsd_address) (int key);
+  int (*ptr_pthread_sigaction) (int sig, const struct sigaction * act,
+                               struct sigaction *oact);
+  int (*ptr_pthread_sigwait) (const sigset_t *set, int *sig);
+  int (*ptr_pthread_raise) (int sig);
 };
 
 /* Variable in libc.so.  */
index 18feddb..b301d91 100644 (file)
@@ -29,7 +29,6 @@
 
 # ifndef SHARED
 weak_extern (__pthread_do_exit)
-weak_extern (__pthread_thread_self)
 # endif
 
 int __libc_multiple_threads attribute_hidden;
index 195ffcd..9cdbb54 100644 (file)
@@ -78,6 +78,7 @@ pid_t __pthread_fork (struct fork_block *b)
   return pid;
 }
 
+#ifdef SHARED
 pid_t __fork (void)
 {
   return __libc_fork ();
@@ -89,3 +90,4 @@ pid_t __vfork(void)
   return __libc_fork ();
 }
 weak_alias (__vfork, vfork);
+#endif
index 444c0a0..4323362 100644 (file)
@@ -230,8 +230,7 @@ extern void *__dso_handle __attribute__ ((weak));
 extern void __libc_setup_tls (size_t tcbsize, size_t tcbalign);
 #endif
 
-#ifdef SHARED
-static struct pthread_functions pthread_functions =
+struct pthread_functions __pthread_functions =
   {
 #if !(USE_TLS && HAVE___THREAD)
     .ptr_pthread_internal_tsd_set = __pthread_internal_tsd_set,
@@ -256,11 +255,11 @@ static struct pthread_functions pthread_functions =
     .ptr_pthread_attr_setscope = __pthread_attr_setscope,
     .ptr_pthread_condattr_destroy = __pthread_condattr_destroy,
     .ptr_pthread_condattr_init = __pthread_condattr_init,
-    .ptr_pthread_cond_broadcast = __pthread_cond_broadcast,
-    .ptr_pthread_cond_destroy = __pthread_cond_destroy,
-    .ptr_pthread_cond_init = __pthread_cond_init,
-    .ptr_pthread_cond_signal = __pthread_cond_signal,
-    .ptr_pthread_cond_wait = __pthread_cond_wait,
+    .ptr___pthread_cond_broadcast = __pthread_cond_broadcast,
+    .ptr___pthread_cond_destroy = __pthread_cond_destroy,
+    .ptr___pthread_cond_init = __pthread_cond_init,
+    .ptr___pthread_cond_signal = __pthread_cond_signal,
+    .ptr___pthread_cond_wait = __pthread_cond_wait,
     .ptr_pthread_equal = __pthread_equal,
     .ptr___pthread_exit = __pthread_exit,
     .ptr_pthread_getschedparam = __pthread_getschedparam,
@@ -275,9 +274,13 @@ static struct pthread_functions pthread_functions =
     .ptr_pthread_setcanceltype = __pthread_setcanceltype,
     .ptr_pthread_do_exit = __pthread_do_exit,
     .ptr_pthread_thread_self = __pthread_thread_self,
-    .ptr_pthread_cleanup_upto = __pthread_cleanup_upto
+    .ptr_pthread_cleanup_upto = __pthread_cleanup_upto,
+    .ptr_pthread_sigaction = __pthread_sigaction,
+    .ptr_pthread_sigwait = __pthread_sigwait,
+    .ptr_pthread_raise = __pthread_raise
   };
-# define ptr_pthread_functions &pthread_functions
+#ifdef SHARED
+# define ptr_pthread_functions &__pthread_functions
 #else
 # define ptr_pthread_functions NULL
 #endif
index ece5531..c89d28b 100644 (file)
@@ -59,6 +59,7 @@ void __pthread_cleanup_upto (__jmp_buf target, char *targetframe)
     THREAD_SETMEM(self, p_in_sighandler, NULL);
 }
 
+#ifdef SHARED
 void siglongjmp (sigjmp_buf env, int val)
 {
   __libc_siglongjmp (env, val);
@@ -68,3 +69,4 @@ void longjmp (jmp_buf env, int val)
 {
   __libc_longjmp (env, val);
 }
+#endif
index a11f865..d0087d9 100644 (file)
@@ -73,8 +73,8 @@ union sighandler __sighandler[NSIG] =
 
 /* The wrapper around sigaction.  Install our own signal handler
    around the signal. */
-int __sigaction(int sig, const struct sigaction * act,
-              struct sigaction * oact)
+int __pthread_sigaction(int sig, const struct sigaction * act,
+                       struct sigaction * oact)
 {
   struct sigaction newact;
   struct sigaction *newactp;
@@ -118,10 +118,13 @@ int __sigaction(int sig, const struct sigaction * act,
     }
   return 0;
 }
-strong_alias(__sigaction, sigaction)
+#ifdef SHARED
+strong_alias(__pthread_sigaction, __sigaction)
+strong_alias(__pthread_sigaction, sigaction)
+#endif
 
 /* sigwait -- synchronously wait for a signal */
-int sigwait(const sigset_t * set, int * sig)
+int __pthread_sigwait(const sigset_t * set, int * sig)
 {
   volatile pthread_descr self = thread_self();
   sigset_t mask;
@@ -173,10 +176,13 @@ int sigwait(const sigset_t * set, int * sig)
   *sig = THREAD_GETMEM(self, p_signal);
   return 0;
 }
+#ifdef SHARED
+strong_alias (__pthread_sigwait, sigwait)
+#endif
 
 /* Redefine raise() to send signal to calling thread only,
    as per POSIX 1003.1c */
-int raise (int sig)
+int __pthread_raise (int sig)
 {
   int retcode = pthread_kill(pthread_self(), sig);
   if (retcode == 0)
@@ -186,3 +192,6 @@ int raise (int sig)
     return -1;
   }
 }
+#ifdef SHARED
+strong_alias (__pthread_raise, raise)
+#endif
index cb839fa..bb0472d 100644 (file)
@@ -1,5 +1,5 @@
 /* libc-internal interface for mutex locks.  LinuxThreads version.
-   Copyright (C) 1996,1997,1998,1999,2000,2001,2002
+   Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003
        Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -108,7 +108,7 @@ typedef pthread_key_t __libc_key_t;
 #endif
 #if defined _LIBC && !defined NOT_IN_libc && defined SHARED
 # define __libc_maybe_call2(FUNC, ARGS, ELSE) \
-  ({__libc_pthread_functions.ptr_##FUNC != NULL \
+  ({__builtin_expect (__libc_pthread_functions.ptr_##FUNC != NULL, 0) \
     ? __libc_pthread_functions.ptr_##FUNC ARGS : ELSE; })
 #else
 # define __libc_maybe_call2(FUNC, ARGS, ELSE) __libc_maybe_call (__##FUNC, ARGS, ELSE)
index 43d4f7d..d97e134 100644 (file)
@@ -53,12 +53,20 @@ typedef struct __pthread_attr_s
 
 
 /* Conditions (not abstract because of PTHREAD_COND_INITIALIZER */
+
+#ifdef __GLIBC_HAVE_LONG_LONG
+__extension__ typedef long long __pthread_cond_align_t;
+#else
+typedef long __pthread_cond_align_t;
+#endif
+
 typedef struct
 {
   struct _pthread_fastlock __c_lock; /* Protect against concurrent access */
   _pthread_descr __c_waiting;        /* Threads waiting on this condition */
   char __padding[48 - sizeof (struct _pthread_fastlock)
-                - sizeof (_pthread_descr)];
+                - sizeof (_pthread_descr) - sizeof (__pthread_cond_align_t)];
+  __pthread_cond_align_t __align;
 } pthread_cond_t;
 
 
index bc39918..efeaad5 100644 (file)
@@ -41,7 +41,7 @@ __BEGIN_DECLS
   {0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __LOCK_INITIALIZER}
 #endif
 
-#define PTHREAD_COND_INITIALIZER {__LOCK_INITIALIZER, 0}
+#define PTHREAD_COND_INITIALIZER {__LOCK_INITIALIZER, 0, "", 0}
 
 #ifdef __USE_UNIX98
 # define PTHREAD_RWLOCK_INITIALIZER \
diff --git a/linuxthreads/sysdeps/pthread/sigaction.c b/linuxthreads/sysdeps/pthread/sigaction.c
new file mode 100644 (file)
index 0000000..f4e2079
--- /dev/null
@@ -0,0 +1,55 @@
+/* Copyright (C) 2003 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* This is tricky.  GCC doesn't like #include_next in the primary
+   source file and even if it did, the first #include_next is this
+   exact file anyway.  */
+#ifndef LIBC_SIGACTION
+
+# include <bits/libc-lock.h>
+
+# define LIBC_SIGACTION        1
+
+# include <linuxthreads/sysdeps/pthread/sigaction.c>
+
+# ifndef NOT_IN_libc
+#  ifndef SHARED
+weak_extern (__pthread_sigaction)
+#  endif
+
+int
+__sigaction (sig, act, oact)
+     int sig;
+     const struct sigaction *act;
+     struct sigaction *oact;
+{
+  return __libc_maybe_call2 (pthread_sigaction, (sig, act, oact),
+                            __libc_sigaction (sig, act, oact));
+}
+# else
+weak_alias (__libc_sigaction, __sigaction)
+# endif
+libc_hidden_weak (__sigaction)
+weak_alias (__sigaction, sigaction)
+
+#else
+
+# include_next <sigaction.c>
+
+#endif /* LIBC_SIGACTION */
index 49f1b08..443fb2b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
 
@@ -21,7 +21,9 @@
 #include <fork.h>
 #include <bits/libc-lock.h>
 
+#ifndef SHARED
 weak_extern (__pthread_fork);
+#endif
 
 struct fork_block __fork_block =
 {
index 37cc4c2..4b90315 100644 (file)
@@ -1,5 +1,5 @@
 /* _longjmp_unwind -- Clean up stack frames unwound by longjmp.
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003 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
@@ -21,7 +21,9 @@
 #include <stddef.h>
 #include <bits/libc-lock.h>
 
+#ifndef SHARED
 weak_extern (__pthread_cleanup_upto);
+#endif
 
 void
 _longjmp_unwind (jmp_buf env, int val)
diff --git a/linuxthreads/sysdeps/unix/sysv/linux/raise.c b/linuxthreads/sysdeps/unix/sysv/linux/raise.c
new file mode 100644 (file)
index 0000000..9dad2b2
--- /dev/null
@@ -0,0 +1,36 @@
+/* Copyright (C) 1991, 1996, 2002, 2003 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <signal.h>
+#include <unistd.h>
+#include <bits/libc-lock.h>
+
+#ifndef SHARED
+weak_extern (__pthread_raise)
+#endif
+
+/* Raise the signal SIG.  */
+int
+raise (sig)
+     int sig;
+{
+  return __libc_maybe_call2 (pthread_raise, (sig),
+                            __kill (__getpid (), sig));
+}
+libc_hidden_def (raise)
+weak_alias (raise, gsignal)
diff --git a/linuxthreads/sysdeps/unix/sysv/linux/sigwait.c b/linuxthreads/sysdeps/unix/sysv/linux/sigwait.c
new file mode 100644 (file)
index 0000000..460d3d5
--- /dev/null
@@ -0,0 +1,84 @@
+/* Copyright (C) 1997, 1998, 2000, 2002, 2003 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <errno.h>
+#include <signal.h>
+#define __need_NULL
+#include <stddef.h>
+
+#include <sysdep-cancel.h>
+#include <sys/syscall.h>
+#include <bp-checks.h>
+#include <bits/libc-lock.h>
+
+extern int __syscall_rt_sigtimedwait (const sigset_t *__unbounded, siginfo_t *__unbounded,
+                                     const struct timespec *__unbounded, size_t);
+
+
+/* Return any pending signal or wait for one for the given time.  */
+static inline int
+do_sigwait (const sigset_t *set, int *sig)
+{
+  int ret;
+
+  /* XXX The size argument hopefully will have to be changed to the
+     real size of the user-level sigset_t.  */
+#ifdef INTERNAL_SYSCALL
+  ret = INTERNAL_SYSCALL (rt_sigtimedwait, 4, CHECK_SIGSET (set),
+                         NULL, NULL, _NSIG / 8);
+  if (! INTERNAL_SYSCALL_ERROR_P (ret))
+    {
+      *sig = ret;
+      ret = 0;
+    }
+  else
+    ret = INTERNAL_SYSCALL_ERRNO (ret);
+#else
+  ret = INLINE_SYSCALL (rt_sigtimedwait, 4, CHECK_SIGSET (set),
+                       NULL, NULL, _NSIG / 8);
+  if (ret != -1)
+    {
+      *sig = ret;
+      ret = 0;
+    }
+  else
+    ret = errno;
+#endif
+
+  return ret;
+}
+
+#ifndef SHARED
+weak_extern (__pthread_sigwait)
+#endif
+
+int
+__sigwait (set, sig)
+     const sigset_t *set;
+     int *sig;
+{
+#ifndef NOT_IN_libc
+  return __libc_maybe_call2 (pthread_sigwait, (set, sig),
+                            do_sigwait (set, sig));
+#else
+  return do_sigwait (set, sig);
+#endif
+}
+libc_hidden_def (__sigwait)
+weak_alias (__sigwait, sigwait)
+strong_alias (__sigwait, __libc_sigwait)
diff --git a/linuxthreads/tst-cancel-static.c b/linuxthreads/tst-cancel-static.c
new file mode 100644 (file)
index 0000000..1c879eb
--- /dev/null
@@ -0,0 +1 @@
+#include "tst-cancel4.c"
index 2de0238..4daf109 100644 (file)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Test whether all cancellable functions are cancellable.
-# Copyright (C) 2002 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 # Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
 
@@ -67,11 +67,12 @@ C["__xpg_sigpause"]=1
 /:$/ {
   if (seen)
     {
-      # signals.c in linuxthreads does the cancellation checks not using
-      # *_{enable,disable}_asynccancel.
+      # signals.c and sigwait.c in linuxthreads do the cancellation checks
+      # not using *_{enable,disable}_asynccancel.
       # Similarly pt-system.o* is allowed to call __libc_system directly.
       if ((!seen_enable || !seen_disable) \
          && !(object ~ /^signals.o/) \
+         && !(object ~ /^sigwait.o/) \
          && !(object ~ /^pt-system.o/))
        {
          printf "in '$1'(%s) %s'\''s cancellation missing\n", object, seen
index ec44dff..ab4702f 100644 (file)
@@ -1,3 +1,56 @@
+2003-01-02  Jakub Jelinek  <jakub@redhat.com>
+
+       * Versions [libc] (GLIBC_2.3.2): Export pthread_cond_broadcast,
+       pthread_cond_destroy, pthread_cond_init, pthread_cond_signal
+       and pthread_cond_wait.
+       * old_pthread_cond_broadcast.c (__old_pthread_cond_broadcast):
+       Renamed to...
+       (__pthread_cond_broadcast_2_0): ... this.
+       * old_pthread_cond_destroy.c (__old_pthread_cond_destroy):
+       Renamed to...
+       (__pthread_cond_destroy_2_0): ... this.
+       * old_pthread_cond_init.c (__old_pthread_cond_init):
+       Renamed to...
+       (__pthread_cond_init_2_0): ... this.
+       * old_pthread_cond_signal.c (__old_pthread_cond_signal):
+       Renamed to...
+       (__pthread_cond_signal_2_0): ... this.
+       * old_pthread_cond_wait.c (__old_pthread_cond_wait):
+       Renamed to...
+       (__pthread_cond_wait_2_0): ... this.
+       * pthread_cond_destroy.c: Include shlib-compat.h.
+       (pthread_cond_destroy): Change strong_alias into versioned_symbol.
+       * pthread_cond_init.c: Include shlib-compat.h.
+       (pthread_cond_init): Change strong_alias into versioned_symbol.
+       * pthreadP.h (struct pthread_functions): Rename ptr_pthread_cond_*
+       fields to ptr___pthread_cond_* and add ptr___pthread_cond_*_2_0
+       fields.
+       (__pthread_cond_broadcast_2_0, __pthread_cond_destroy_2_0,
+       __pthread_cond_init_2_0, __pthread_cond_signal_2_0,
+       __pthread_cond_wait_2_0): New prototypes.
+       (__old_pthread_cond_broadcast, __old_pthread_cond_destroy,
+       __old_pthread_cond_init, __old_pthread_cond_signal,
+       __old_pthread_cond_wait): Removed.
+       * init.c: Include shlib-compat.h.
+       (pthread_functions): Guard ptr___pthread_attr_init_2_0
+       initialization with SHLIB_COMPAT (GLIBC_2_0, GLIBC_2_1).
+       Rename ptr_pthread_cond_* to ptr___pthread_cond_*, initialize
+       ptr___pthread_cond_*_2_0 fields.
+       * forward.c: Export both pthread_cond_*@@GLIBC_2.3.2 and
+       pthread_cond_*@GLIBC_2.0 compatibility symbols.
+
+       * sysdeps/pthread/sigaction.c (SIGCANCEL): Only define if
+       LIBC_SIGACTION was not yet defined.
+       [!defined LIBC_SIGACTION]: Define LIBC_SIGACTION, #include self.
+       [!defined LIBC_SIGACTION] (__sigaction): New function and
+       libc_hidden_weak.
+       [!defined LIBC_SIGACTION] (sigaction): New weak_alias.
+       [defined LIBC_SIGACTION]: #include_next <sigaction.c>.
+
+2003-01-02  Jakub Jelinek  <jakub@redhat.com>
+
+       * Makefile (CFLAGS-pthread_atfork.c): Add -DNOT_IN_libc.
+
 2003-01-02  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h (pthread_cond_t):
index 274b1b2..2a68c2e 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2002 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003 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
@@ -113,6 +113,8 @@ libpthread-shared-only-routines = pt-allocrtsig
 
 libpthread-nonshared = pthread_atfork
 
+CFLAGS-pthread_atfork.c = -DNOT_IN_libc
+
 # Don't generate deps for calls with no sources.  See sysdeps/unix/Makefile.
 omit-deps = $(unix-syscalls:%=ptw-%)
 
index 26655f3..436234a 100644 (file)
@@ -19,6 +19,12 @@ libc {
   GLIBC_2.1 {
     pthread_attr_init;
   }
+  GLIBC_2.3.2 {
+    # Changed pthread_cond_t.
+    pthread_cond_init; pthread_cond_destroy;
+    pthread_cond_wait; pthread_cond_signal;
+    pthread_cond_broadcast;
+  }
 }
 
 libpthread {
index a167bc1..038eae8 100644 (file)
@@ -85,19 +85,54 @@ FORWARD (pthread_attr_setscope, (pthread_attr_t *attr, int scope),
 FORWARD (pthread_condattr_destroy, (pthread_condattr_t *attr), (attr), 0)
 FORWARD (pthread_condattr_init, (pthread_condattr_t *attr), (attr), 0)
 
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
+FORWARD (__pthread_cond_broadcast_2_0, (pthread_cond_t *cond), (cond), 0)
+compat_symbol (libc, __pthread_cond_broadcast_2_0, pthread_cond_broadcast,
+              GLIBC_2_0);
+#endif
+FORWARD (__pthread_cond_broadcast, (pthread_cond_t *cond), (cond), 0)
+versioned_symbol (libc, __pthread_cond_broadcast, pthread_cond_broadcast,
+                 GLIBC_2_3_2);
+
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
+FORWARD (__pthread_cond_destroy_2_0, (pthread_cond_t *cond), (cond), 0)
+compat_symbol (libc, __pthread_cond_destroy_2_0, pthread_cond_destroy,
+              GLIBC_2_0);
+#endif
+FORWARD (__pthread_cond_destroy, (pthread_cond_t *cond), (cond), 0)
+versioned_symbol (libc, __pthread_cond_destroy, pthread_cond_destroy,
+                 GLIBC_2_3_2);
 
-FORWARD (pthread_cond_broadcast, (pthread_cond_t *cond), (cond), 0)
-
-FORWARD (pthread_cond_destroy, (pthread_cond_t *cond), (cond), 0)
-
-FORWARD (pthread_cond_init,
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
+FORWARD (__pthread_cond_init_2_0,
         (pthread_cond_t *cond, const pthread_condattr_t *cond_attr),
         (cond, cond_attr), 0)
+compat_symbol (libc, __pthread_cond_init_2_0, pthread_cond_init, GLIBC_2_0);
+#endif
+FORWARD (__pthread_cond_init,
+        (pthread_cond_t *cond, const pthread_condattr_t *cond_attr),
+        (cond, cond_attr), 0)
+versioned_symbol (libc, __pthread_cond_init, pthread_cond_init, GLIBC_2_3_2);
 
-FORWARD (pthread_cond_signal, (pthread_cond_t *cond), (cond), 0)
-
-FORWARD (pthread_cond_wait, (pthread_cond_t *cond, pthread_mutex_t *mutex),
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
+FORWARD (__pthread_cond_signal_2_0, (pthread_cond_t *cond), (cond), 0)
+compat_symbol (libc, __pthread_cond_signal_2_0, pthread_cond_signal,
+              GLIBC_2_0);
+#endif
+FORWARD (__pthread_cond_signal, (pthread_cond_t *cond), (cond), 0)
+versioned_symbol (libc, __pthread_cond_signal, pthread_cond_signal,
+                 GLIBC_2_3_2);
+
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
+FORWARD (__pthread_cond_wait_2_0,
+        (pthread_cond_t *cond, pthread_mutex_t *mutex), (cond, mutex), 0)
+compat_symbol (libc, __pthread_cond_wait_2_0, pthread_cond_wait,
+              GLIBC_2_0);
+#endif
+FORWARD (__pthread_cond_wait, (pthread_cond_t *cond, pthread_mutex_t *mutex),
         (cond, mutex), 0)
+versioned_symbol (libc, __pthread_cond_wait, pthread_cond_wait,
+                 GLIBC_2_3_2);
 
 
 FORWARD (pthread_equal, (pthread_t thread1, pthread_t thread2),
index b1d9a8a..9a0c4fa 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -30,6 +30,7 @@
 #include <tls.h>
 #include <fork.h>
 #include <version.h>
+#include <shlib-compat.h>
 
 
 /* XXX For the time being...  */
@@ -56,7 +57,9 @@ extern void __libc_setup_tls (size_t tcbsize, size_t tcbalign);
 static struct pthread_functions pthread_functions =
   {
     .ptr_pthread_attr_destroy = __pthread_attr_destroy,
+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1)
     .ptr___pthread_attr_init_2_0 = __pthread_attr_init_2_0,
+#endif
     .ptr___pthread_attr_init_2_1 = __pthread_attr_init_2_1,
     .ptr_pthread_attr_getdetachstate = __pthread_attr_getdetachstate,
     .ptr_pthread_attr_setdetachstate = __pthread_attr_setdetachstate,
@@ -70,11 +73,18 @@ static struct pthread_functions pthread_functions =
     .ptr_pthread_attr_setscope = __pthread_attr_setscope,
     .ptr_pthread_condattr_destroy = __pthread_condattr_destroy,
     .ptr_pthread_condattr_init = __pthread_condattr_init,
-    .ptr_pthread_cond_broadcast = __pthread_cond_broadcast,
-    .ptr_pthread_cond_destroy = __pthread_cond_destroy,
-    .ptr_pthread_cond_init = __pthread_cond_init,
-    .ptr_pthread_cond_signal = __pthread_cond_signal,
-    .ptr_pthread_cond_wait = __pthread_cond_wait,
+    .ptr___pthread_cond_broadcast = __pthread_cond_broadcast,
+    .ptr___pthread_cond_destroy = __pthread_cond_destroy,
+    .ptr___pthread_cond_init = __pthread_cond_init,
+    .ptr___pthread_cond_signal = __pthread_cond_signal,
+    .ptr___pthread_cond_wait = __pthread_cond_wait,
+#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
+    .ptr___pthread_cond_broadcast_2_0 = __pthread_cond_broadcast_2_0,
+    .ptr___pthread_cond_destroy_2_0 = __pthread_cond_destroy_2_0,
+    .ptr___pthread_cond_init_2_0 = __pthread_cond_init_2_0,
+    .ptr___pthread_cond_signal_2_0 = __pthread_cond_signal_2_0,
+    .ptr___pthread_cond_wait_2_0 = __pthread_cond_wait_2_0,
+#endif
     .ptr_pthread_equal = __pthread_equal,
     .ptr___pthread_exit = __pthread_exit,
     .ptr_pthread_getschedparam = __pthread_getschedparam,
index 9d63af9..86f8d5d 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -25,7 +25,7 @@
 
 #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
 int
-__old_pthread_cond_broadcast (cond)
+__pthread_cond_broadcast_2_0 (cond)
      pthread_cond_t *cond;
 {
   pthread_cond_t **realp = (pthread_cond_t **) cond;
@@ -41,6 +41,6 @@ __old_pthread_cond_broadcast (cond)
 
   return __pthread_cond_broadcast (*realp);
 }
-compat_symbol (libpthread, __old_pthread_cond_broadcast,
+compat_symbol (libpthread, __pthread_cond_broadcast_2_0,
               pthread_cond_broadcast, GLIBC_2_0);
 #endif
index 9afe7d3..6f73f7c 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -24,7 +24,7 @@
 
 #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
 int
-__old_pthread_cond_destroy (cond)
+__pthread_cond_destroy_2_0 (cond)
      pthread_cond_t *cond;
 {
   /* Free the memory which was eventually allocated.  */
@@ -32,6 +32,6 @@ __old_pthread_cond_destroy (cond)
 
   return 0;
 }
-compat_symbol (libpthread, __old_pthread_cond_destroy, pthread_cond_destroy,
+compat_symbol (libpthread, __pthread_cond_destroy_2_0, pthread_cond_destroy,
               GLIBC_2_0);
 #endif
index 70275d9..309136e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -23,7 +23,7 @@
 
 #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
 int
-__old_pthread_cond_init (cond, cond_attr)
+__pthread_cond_init_2_0 (cond, cond_attr)
      pthread_cond_t *cond;
      const pthread_condattr_t *cond_attr;
 {
@@ -38,6 +38,6 @@ __old_pthread_cond_init (cond, cond_attr)
 
   return 0;
 }
-compat_symbol (libpthread, __old_pthread_cond_init, pthread_cond_init,
+compat_symbol (libpthread, __pthread_cond_init_2_0, pthread_cond_init,
               GLIBC_2_0);
 #endif
index 467812e..869ac4d 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -25,7 +25,7 @@
 
 #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
 int
-__old_pthread_cond_signal (cond)
+__pthread_cond_signal_2_0 (cond)
      pthread_cond_t *cond;
 {
   pthread_cond_t **realp = (pthread_cond_t **) cond;
@@ -41,6 +41,6 @@ __old_pthread_cond_signal (cond)
 
   return __pthread_cond_signal (*realp);
 }
-compat_symbol (libpthread, __old_pthread_cond_signal, pthread_cond_signal,
+compat_symbol (libpthread, __pthread_cond_signal_2_0, pthread_cond_signal,
               GLIBC_2_0);
 #endif
index 4a7282f..4d4f943 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -25,7 +25,7 @@
 
 #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
 int
-__old_pthread_cond_wait (cond, mutex)
+__pthread_cond_wait_2_0 (cond, mutex)
      pthread_cond_t *cond;
      pthread_mutex_t *mutex;
 {
@@ -42,6 +42,6 @@ __old_pthread_cond_wait (cond, mutex)
 
   return __pthread_cond_wait (*realp, mutex);
 }
-compat_symbol (libpthread, __old_pthread_cond_wait, pthread_cond_wait,
+compat_symbol (libpthread, __pthread_cond_wait_2_0, pthread_cond_wait,
               GLIBC_2_0);
 #endif
index e4a9013..0a0e332 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -88,11 +88,18 @@ struct pthread_functions
   int (*ptr_pthread_attr_setscope) (pthread_attr_t *, int);
   int (*ptr_pthread_condattr_destroy) (pthread_condattr_t *);
   int (*ptr_pthread_condattr_init) (pthread_condattr_t *);
-  int (*ptr_pthread_cond_broadcast) (pthread_cond_t *);
-  int (*ptr_pthread_cond_destroy) (pthread_cond_t *);
-  int (*ptr_pthread_cond_init) (pthread_cond_t *, const pthread_condattr_t *);
-  int (*ptr_pthread_cond_signal) (pthread_cond_t *);
-  int (*ptr_pthread_cond_wait) (pthread_cond_t *, pthread_mutex_t *);
+  int (*ptr___pthread_cond_broadcast) (pthread_cond_t *);
+  int (*ptr___pthread_cond_destroy) (pthread_cond_t *);
+  int (*ptr___pthread_cond_init) (pthread_cond_t *,
+                                 const pthread_condattr_t *);
+  int (*ptr___pthread_cond_signal) (pthread_cond_t *);
+  int (*ptr___pthread_cond_wait) (pthread_cond_t *, pthread_mutex_t *);
+  int (*ptr___pthread_cond_broadcast_2_0) (pthread_cond_t *);
+  int (*ptr___pthread_cond_destroy_2_0) (pthread_cond_t *);
+  int (*ptr___pthread_cond_init_2_0) (pthread_cond_t *,
+                                     const pthread_condattr_t *);
+  int (*ptr___pthread_cond_signal_2_0) (pthread_cond_t *);
+  int (*ptr___pthread_cond_wait_2_0) (pthread_cond_t *, pthread_mutex_t *);
   int (*ptr_pthread_equal) (pthread_t, pthread_t);
   void (*ptr___pthread_exit) (void *);
   int (*ptr_pthread_getschedparam) (pthread_t, int *, struct sched_param *);
@@ -315,15 +322,15 @@ extern int __pthread_enable_asynccancel (void) attribute_hidden;
 extern void __pthread_disable_asynccancel (int oldtype)
      internal_function attribute_hidden;
 
-extern int __old_pthread_cond_broadcast (pthread_cond_t *cond);
-extern int __old_pthread_cond_destroy (pthread_cond_t *cond);
-extern int __old_pthread_cond_init (pthread_cond_t *cond,
+extern int __pthread_cond_broadcast_2_0 (pthread_cond_t *cond);
+extern int __pthread_cond_destroy_2_0 (pthread_cond_t *cond);
+extern int __pthread_cond_init_2_0 (pthread_cond_t *cond,
                                    const pthread_condattr_t *cond_attr);
-extern int __old_pthread_cond_signal (pthread_cond_t *cond);
+extern int __pthread_cond_signal_2_0 (pthread_cond_t *cond);
 extern int __old_pthread_cond_timedwait (pthread_cond_t *cond,
                                         pthread_mutex_t *mutex,
                                         const struct timespec *abstime);
-extern int __old_pthread_cond_wait (pthread_cond_t *cond,
+extern int __pthread_cond_wait_2_0 (pthread_cond_t *cond,
                                    pthread_mutex_t *mutex);
 
 /* The two functions are in libc.so and not exported.  */
index 130cb21..5ade3e6 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -17,6 +17,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <shlib-compat.h>
 #include "pthreadP.h"
 
 
@@ -26,4 +27,5 @@ __pthread_cond_destroy (cond)
 {
   return 0;
 }
-strong_alias (__pthread_cond_destroy, pthread_cond_destroy)
+versioned_symbol (libpthread, __pthread_cond_destroy,
+                 pthread_cond_destroy, GLIBC_2_3_2);
index cd762f2..e079ae9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -17,6 +17,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <shlib-compat.h>                  
 #include "pthreadP.h"
 
 
@@ -36,4 +37,5 @@ __pthread_cond_init (cond, cond_attr)
 
   return 0;
 }
-strong_alias (__pthread_cond_init, pthread_cond_init)
+versioned_symbol (libpthread, __pthread_cond_init,
+                 pthread_cond_init, GLIBC_2_3_2);
index c3f6f43..e3554dd 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+/* This is tricky.  GCC doesn't like #include_next in the primary
+   source file and even if it did, the first #include_next is this
+   exact file anyway.  */
+#ifndef LIBC_SIGACTION
+
 /* We use the libc implementation but we tell it to not allow
    SIGCANCEL to be handled.  */
-#define SIGCANCEL __SIGRTMIN
+# define SIGCANCEL __SIGRTMIN
+# define LIBC_SIGACTION        1
+
+# include <nptl/sysdeps/pthread/sigaction.c>
+
+int
+__sigaction (sig, act, oact)
+     int sig;
+     const struct sigaction *act;
+     struct sigaction *oact;
+{
+  if (sig == SIGCANCEL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  return __libc_sigaction (sig, act, oact);
+}
+libc_hidden_weak (__sigaction)
+weak_alias (__sigaction, sigaction)
+
+#else
+
+# include_next <sigaction.c>
 
-#include_next <sigaction.c>
+#endif /* LIBC_SIGACTION */
index 40ecb32..46ff2b1 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1998,1999,2000,2002,2003 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
@@ -149,6 +149,9 @@ __libc_sigaction (sig, act, oact)
   return result;
 }
 libc_hidden_def (__libc_sigaction)
+
+#ifndef LIBC_SIGACTION
 weak_alias (__libc_sigaction, __sigaction)
 libc_hidden_weak (__sigaction)
 weak_alias (__libc_sigaction, sigaction)
+#endif
index 361afba..18a5f1e 100644 (file)
@@ -1,5 +1,5 @@
 /* POSIX.1 `sigaction' call for Linux/i386.
-   Copyright (C) 1991,95,96,97,98,99,2000,02 Free Software Foundation, Inc.
+   Copyright (C) 1991,95,96,97,98,99,2000,02,03 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
@@ -154,27 +154,10 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
 }
 libc_hidden_def (__libc_sigaction)
 
-#ifndef SIGCANCEL
+#ifndef LIBC_SIGACTION
 weak_alias (__libc_sigaction, __sigaction)
 libc_hidden_weak (__sigaction)
 weak_alias (__libc_sigaction, sigaction)
-#else
-int
-__sigaction (sig, act, oact)
-     int sig;
-     const struct sigaction *act;
-     struct sigaction *oact;
-{
-  if (sig == SIGCANCEL)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  return __libc_sigaction (sig, act, oact);
-}
-libc_hidden_weak (__sigaction)
-weak_alias (__sigaction, sigaction)
 #endif
 
 /* NOTE: Please think twice before making any changes to the bits of
index 21180d5..86558a5 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1998,1999,2000,2002,2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Linux/IA64 specific sigaction
    Written by Jes Sorensen, <Jes.Sorensen@cern.ch>, April 1999.
@@ -50,6 +50,9 @@ __libc_sigaction (sig, act, oact)
                         CHECK_1_NULL_OK (act), CHECK_1_NULL_OK (oact), _NSIG / 8);
 }
 libc_hidden_def (__libc_sigaction)
+
+#ifndef LIBC_SIGACTION
 weak_alias (__libc_sigaction, __sigaction)
 libc_hidden_def (__sigaction)
 weak_alias (__libc_sigaction, sigaction)
+#endif
index 0e5cfb7..0dee8cc 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1998,1999,2000,2002,2003 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
@@ -135,6 +135,9 @@ __libc_sigaction (sig, act, oact)
 #endif
 }
 libc_hidden_def (__libc_sigaction)
+
+#ifndef LIBC_SIGACTION
 weak_alias (__libc_sigaction, __sigaction)
 libc_hidden_weak (__sigaction)
 weak_alias (__libc_sigaction, sigaction)
+#endif
index 05ee189..cba9f67 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2002, 2003 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
@@ -46,6 +46,9 @@ __libc_sigaction (sig, act, oact)
   return INLINE_SYSCALL (rt_sigaction, 4, sig, act, oact, _NSIG / 8);
 }
 libc_hidden_def (__libc_sigaction)
+
+#ifndef LIBC_SIGACTION
 weak_alias (__libc_sigaction, __sigaction)
 libc_hidden_weak (__sigaction)
 weak_alias (__libc_sigaction, sigaction)
+#endif
index 0d07469..2395abe 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1998,1999,2000,2002,2003 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
@@ -134,25 +134,8 @@ __libc_sigaction (sig, act, oact)
 }
 libc_hidden_def (__libc_sigaction)
 
-#ifndef SIGCANCEL
+#ifndef LIBC_SIGACTION
 weak_alias (__libc_sigaction, __sigaction)
 libc_hidden_weak (__sigaction)
 weak_alias (__libc_sigaction, sigaction)
-#else
-int
-__sigaction (sig, act, oact)
-     int sig;
-     const struct sigaction *act;
-     struct sigaction *oact;
-{
-  if (sig == SIGCANCEL)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  return __libc_sigaction (sig, act, oact);
-}
-libc_hidden_weak (__sigaction)
-weak_alias (__sigaction, sigaction)
 #endif
index a7a5bfd..af34740 100644 (file)
@@ -1,5 +1,5 @@
 /* POSIX.1 sigaction call for Linux/SPARC.
-   Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2000,2002,2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx), 1997.
 
@@ -135,9 +135,12 @@ __libc_sigaction (int sig, __const struct sigaction *act,
   return -1;
 }
 libc_hidden_def (__libc_sigaction)
+
+#ifndef LIBC_SIGACTION
 weak_alias (__libc_sigaction, __sigaction);
 libc_hidden_weak (__sigaction)
 weak_alias (__libc_sigaction, sigaction);
+#endif
 
 static void
 __rt_sigreturn_stub (void)
index d69e1b3..0a2d2c3 100644 (file)
@@ -1,5 +1,5 @@
 /* POSIX.1 sigaction call for Linux/SPARC64.
-   Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2000,2002,2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx) and
                  Jakub Jelinek (jj@ultra.linux.cz).
@@ -64,9 +64,12 @@ __libc_sigaction (int sig, __const struct sigaction *act,
   return ret;
 }
 libc_hidden_def (__libc_sigaction)
+
+#ifndef LIBC_SIGACTION
 weak_alias (__libc_sigaction, __sigaction);
 libc_hidden_weak (__sigaction)
 weak_alias (__libc_sigaction, sigaction);
+#endif
 
 static void
 __rt_sigreturn_stub (void)
index 36424bd..1d8ef6f 100644 (file)
@@ -1,5 +1,5 @@
 /* POSIX.1 `sigaction' call for Linux/x86-64.
-   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003 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
@@ -81,9 +81,12 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
   return result;
 }
 libc_hidden_def (__libc_sigaction)
+
+#ifndef LIBC_SIGACTION
 weak_alias (__libc_sigaction, __sigaction)
 libc_hidden_weak (__sigaction)
 weak_alias (__libc_sigaction, sigaction)
+#endif
 
 /* NOTE: Please think twice before making any changes to the bits of
    code below.  GDB needs some intimate knowledge about it to