1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-06-06 11:41:02 +03:00
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.
This commit is contained in:
Ulrich Drepper 2003-01-03 01:35:14 +00:00
parent b0c9067d7b
commit bf293afeca
44 changed files with 598 additions and 130 deletions

View File

@ -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> 2003-01-02 Art Haas <ahaas@airmail.net>
* login/tst-utmp.c: Convert GCC extension initializer syntax to C99. * login/tst-utmp.c: Convert GCC extension initializer syntax to C99.

View File

@ -1,3 +1,64 @@
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> 2003-01-02 Ulrich Drepper <drepper@redhat.com>
* sysdeps/pthread/bits/pthreadtypes.h (pthread_cond_t): Add padding. * sysdeps/pthread/bits/pthreadtypes.h (pthread_cond_t): Add padding.

View 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. # This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or # 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 libpthread-nonshared = pthread_atfork
CFLAGS-pthread_atfork.c = -DNOT_IN_libc
nodelete-yes = -Wl,--enable-new-dtags,-z,nodelete nodelete-yes = -Wl,--enable-new-dtags,-z,nodelete
initfirst-yes = -Wl,--enable-new-dtags,-z,initfirst initfirst-yes = -Wl,--enable-new-dtags,-z,initfirst
LDFLAGS-pthread.so = $(nodelete-$(have-z-nodelete)) \ LDFLAGS-pthread.so = $(nodelete-$(have-z-nodelete)) \
@ -92,8 +94,8 @@ test-srcs = tst-signal
tests-reverse += tst-cancel5 tests-reverse += tst-cancel5
ifeq ($(build-static),yes) ifeq ($(build-static),yes)
tests += tststatic tst-static-locale tests += tststatic tst-static-locale tst-cancel-static
tests-static += tststatic tst-static-locale tests-static += tststatic tst-static-locale tst-cancel-static
endif endif
ifeq (yes,$(build-shared)) ifeq (yes,$(build-shared))

View File

@ -16,6 +16,12 @@ libc {
GLIBC_2.1 { GLIBC_2.1 {
pthread_attr_init; 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 { GLIBC_PRIVATE {
# Internal libc interface to libpthread # Internal libc interface to libpthread
__libc_dl_error_tsd; __libc_dl_error_tsd;

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. 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_condattr_init, (pthread_condattr_t *attr), (attr), 0)
FORWARD (pthread_cond_broadcast, (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) 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), (pthread_cond_t *cond, const pthread_condattr_t *cond_attr),
(cond, cond_attr), 0) (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) (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), FORWARD (pthread_equal, (pthread_t thread1, pthread_t thread2),

View File

@ -452,6 +452,10 @@ extern void __pthread_sighandler(int signo, SIGCONTEXT ctx);
extern void __pthread_sighandler_rt(int signo, struct siginfo *si, extern void __pthread_sighandler_rt(int signo, struct siginfo *si,
struct ucontext *uc); struct ucontext *uc);
extern void __pthread_null_sighandler(int sig); 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. */ /* Cancellation. */
extern int __pthread_enable_asynccancel (void) attribute_hidden; 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_attr_setscope) (pthread_attr_t *, int);
int (*ptr_pthread_condattr_destroy) (pthread_condattr_t *); int (*ptr_pthread_condattr_destroy) (pthread_condattr_t *);
int (*ptr_pthread_condattr_init) (pthread_condattr_t *); int (*ptr_pthread_condattr_init) (pthread_condattr_t *);
int (*ptr_pthread_cond_broadcast) (pthread_cond_t *); int (*ptr___pthread_cond_broadcast) (pthread_cond_t *);
int (*ptr_pthread_cond_destroy) (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_init) (pthread_cond_t *,
int (*ptr_pthread_cond_signal) (pthread_cond_t *); const pthread_condattr_t *);
int (*ptr_pthread_cond_wait) (pthread_cond_t *, pthread_mutex_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); int (*ptr_pthread_equal) (pthread_t, pthread_t);
void (*ptr___pthread_exit) (void *); void (*ptr___pthread_exit) (void *);
int (*ptr_pthread_getschedparam) (pthread_t, int *, struct sched_param *); 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, void (*ptr_pthread_cleanup_upto) (__jmp_buf target,
char *targetframe); char *targetframe);
pthread_descr (*ptr_pthread_thread_self) (void); 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 * (*ptr_pthread_internal_tsd_get) (int key);
void ** __attribute__ ((__const__)) void ** __attribute__ ((__const__))
(*ptr_pthread_internal_tsd_address) (int key); (*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. */ /* Variable in libc.so. */

View File

@ -29,7 +29,6 @@
# ifndef SHARED # ifndef SHARED
weak_extern (__pthread_do_exit) weak_extern (__pthread_do_exit)
weak_extern (__pthread_thread_self)
# endif # endif
int __libc_multiple_threads attribute_hidden; int __libc_multiple_threads attribute_hidden;

View File

@ -78,6 +78,7 @@ pid_t __pthread_fork (struct fork_block *b)
return pid; return pid;
} }
#ifdef SHARED
pid_t __fork (void) pid_t __fork (void)
{ {
return __libc_fork (); return __libc_fork ();
@ -89,3 +90,4 @@ pid_t __vfork(void)
return __libc_fork (); return __libc_fork ();
} }
weak_alias (__vfork, vfork); weak_alias (__vfork, vfork);
#endif

View File

@ -230,8 +230,7 @@ extern void *__dso_handle __attribute__ ((weak));
extern void __libc_setup_tls (size_t tcbsize, size_t tcbalign); extern void __libc_setup_tls (size_t tcbsize, size_t tcbalign);
#endif #endif
#ifdef SHARED struct pthread_functions __pthread_functions =
static struct pthread_functions pthread_functions =
{ {
#if !(USE_TLS && HAVE___THREAD) #if !(USE_TLS && HAVE___THREAD)
.ptr_pthread_internal_tsd_set = __pthread_internal_tsd_set, .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_attr_setscope = __pthread_attr_setscope,
.ptr_pthread_condattr_destroy = __pthread_condattr_destroy, .ptr_pthread_condattr_destroy = __pthread_condattr_destroy,
.ptr_pthread_condattr_init = __pthread_condattr_init, .ptr_pthread_condattr_init = __pthread_condattr_init,
.ptr_pthread_cond_broadcast = __pthread_cond_broadcast, .ptr___pthread_cond_broadcast = __pthread_cond_broadcast,
.ptr_pthread_cond_destroy = __pthread_cond_destroy, .ptr___pthread_cond_destroy = __pthread_cond_destroy,
.ptr_pthread_cond_init = __pthread_cond_init, .ptr___pthread_cond_init = __pthread_cond_init,
.ptr_pthread_cond_signal = __pthread_cond_signal, .ptr___pthread_cond_signal = __pthread_cond_signal,
.ptr_pthread_cond_wait = __pthread_cond_wait, .ptr___pthread_cond_wait = __pthread_cond_wait,
.ptr_pthread_equal = __pthread_equal, .ptr_pthread_equal = __pthread_equal,
.ptr___pthread_exit = __pthread_exit, .ptr___pthread_exit = __pthread_exit,
.ptr_pthread_getschedparam = __pthread_getschedparam, .ptr_pthread_getschedparam = __pthread_getschedparam,
@ -275,9 +274,13 @@ static struct pthread_functions pthread_functions =
.ptr_pthread_setcanceltype = __pthread_setcanceltype, .ptr_pthread_setcanceltype = __pthread_setcanceltype,
.ptr_pthread_do_exit = __pthread_do_exit, .ptr_pthread_do_exit = __pthread_do_exit,
.ptr_pthread_thread_self = __pthread_thread_self, .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 #else
# define ptr_pthread_functions NULL # define ptr_pthread_functions NULL
#endif #endif

View File

@ -59,6 +59,7 @@ void __pthread_cleanup_upto (__jmp_buf target, char *targetframe)
THREAD_SETMEM(self, p_in_sighandler, NULL); THREAD_SETMEM(self, p_in_sighandler, NULL);
} }
#ifdef SHARED
void siglongjmp (sigjmp_buf env, int val) void siglongjmp (sigjmp_buf env, int val)
{ {
__libc_siglongjmp (env, val); __libc_siglongjmp (env, val);
@ -68,3 +69,4 @@ void longjmp (jmp_buf env, int val)
{ {
__libc_longjmp (env, val); __libc_longjmp (env, val);
} }
#endif

View File

@ -73,8 +73,8 @@ union sighandler __sighandler[NSIG] =
/* The wrapper around sigaction. Install our own signal handler /* The wrapper around sigaction. Install our own signal handler
around the signal. */ around the signal. */
int __sigaction(int sig, const struct sigaction * act, int __pthread_sigaction(int sig, const struct sigaction * act,
struct sigaction * oact) struct sigaction * oact)
{ {
struct sigaction newact; struct sigaction newact;
struct sigaction *newactp; struct sigaction *newactp;
@ -118,10 +118,13 @@ int __sigaction(int sig, const struct sigaction * act,
} }
return 0; 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 */ /* 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(); volatile pthread_descr self = thread_self();
sigset_t mask; sigset_t mask;
@ -173,10 +176,13 @@ int sigwait(const sigset_t * set, int * sig)
*sig = THREAD_GETMEM(self, p_signal); *sig = THREAD_GETMEM(self, p_signal);
return 0; return 0;
} }
#ifdef SHARED
strong_alias (__pthread_sigwait, sigwait)
#endif
/* Redefine raise() to send signal to calling thread only, /* Redefine raise() to send signal to calling thread only,
as per POSIX 1003.1c */ as per POSIX 1003.1c */
int raise (int sig) int __pthread_raise (int sig)
{ {
int retcode = pthread_kill(pthread_self(), sig); int retcode = pthread_kill(pthread_self(), sig);
if (retcode == 0) if (retcode == 0)
@ -186,3 +192,6 @@ int raise (int sig)
return -1; return -1;
} }
} }
#ifdef SHARED
strong_alias (__pthread_raise, raise)
#endif

View File

@ -1,5 +1,5 @@
/* libc-internal interface for mutex locks. LinuxThreads version. /* 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. Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
@ -108,7 +108,7 @@ typedef pthread_key_t __libc_key_t;
#endif #endif
#if defined _LIBC && !defined NOT_IN_libc && defined SHARED #if defined _LIBC && !defined NOT_IN_libc && defined SHARED
# define __libc_maybe_call2(FUNC, ARGS, ELSE) \ # 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; }) ? __libc_pthread_functions.ptr_##FUNC ARGS : ELSE; })
#else #else
# define __libc_maybe_call2(FUNC, ARGS, ELSE) __libc_maybe_call (__##FUNC, ARGS, ELSE) # define __libc_maybe_call2(FUNC, ARGS, ELSE) __libc_maybe_call (__##FUNC, ARGS, ELSE)

View File

@ -53,12 +53,20 @@ typedef struct __pthread_attr_s
/* Conditions (not abstract because of PTHREAD_COND_INITIALIZER */ /* 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 typedef struct
{ {
struct _pthread_fastlock __c_lock; /* Protect against concurrent access */ struct _pthread_fastlock __c_lock; /* Protect against concurrent access */
_pthread_descr __c_waiting; /* Threads waiting on this condition */ _pthread_descr __c_waiting; /* Threads waiting on this condition */
char __padding[48 - sizeof (struct _pthread_fastlock) 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; } pthread_cond_t;

View File

@ -41,7 +41,7 @@ __BEGIN_DECLS
{0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __LOCK_INITIALIZER} {0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __LOCK_INITIALIZER}
#endif #endif
#define PTHREAD_COND_INITIALIZER {__LOCK_INITIALIZER, 0} #define PTHREAD_COND_INITIALIZER {__LOCK_INITIALIZER, 0, "", 0}
#ifdef __USE_UNIX98 #ifdef __USE_UNIX98
# define PTHREAD_RWLOCK_INITIALIZER \ # define PTHREAD_RWLOCK_INITIALIZER \

View File

@ -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 */

View 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. This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
@ -21,7 +21,9 @@
#include <fork.h> #include <fork.h>
#include <bits/libc-lock.h> #include <bits/libc-lock.h>
#ifndef SHARED
weak_extern (__pthread_fork); weak_extern (__pthread_fork);
#endif
struct fork_block __fork_block = struct fork_block __fork_block =
{ {

View File

@ -1,5 +1,5 @@
/* _longjmp_unwind -- Clean up stack frames unwound by longjmp. /* _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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -21,7 +21,9 @@
#include <stddef.h> #include <stddef.h>
#include <bits/libc-lock.h> #include <bits/libc-lock.h>
#ifndef SHARED
weak_extern (__pthread_cleanup_upto); weak_extern (__pthread_cleanup_upto);
#endif
void void
_longjmp_unwind (jmp_buf env, int val) _longjmp_unwind (jmp_buf env, int val)

View File

@ -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)

View File

@ -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)

View File

@ -0,0 +1 @@
#include "tst-cancel4.c"

View File

@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Test whether all cancellable functions are cancellable. # 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. # This file is part of the GNU C Library.
# Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. # Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
@ -67,11 +67,12 @@ C["__xpg_sigpause"]=1
/:$/ { /:$/ {
if (seen) if (seen)
{ {
# signals.c in linuxthreads does the cancellation checks not using # signals.c and sigwait.c in linuxthreads do the cancellation checks
# *_{enable,disable}_asynccancel. # not using *_{enable,disable}_asynccancel.
# Similarly pt-system.o* is allowed to call __libc_system directly. # Similarly pt-system.o* is allowed to call __libc_system directly.
if ((!seen_enable || !seen_disable) \ if ((!seen_enable || !seen_disable) \
&& !(object ~ /^signals.o/) \ && !(object ~ /^signals.o/) \
&& !(object ~ /^sigwait.o/) \
&& !(object ~ /^pt-system.o/)) && !(object ~ /^pt-system.o/))
{ {
printf "in '$1'(%s) %s'\''s cancellation missing\n", object, seen printf "in '$1'(%s) %s'\''s cancellation missing\n", object, seen

View 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> 2003-01-02 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h (pthread_cond_t): * sysdeps/unix/sysv/linux/i386/bits/pthreadtypes.h (pthread_cond_t):

View 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. # This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or # 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 libpthread-nonshared = pthread_atfork
CFLAGS-pthread_atfork.c = -DNOT_IN_libc
# Don't generate deps for calls with no sources. See sysdeps/unix/Makefile. # Don't generate deps for calls with no sources. See sysdeps/unix/Makefile.
omit-deps = $(unix-syscalls:%=ptw-%) omit-deps = $(unix-syscalls:%=ptw-%)

View File

@ -19,6 +19,12 @@ libc {
GLIBC_2.1 { GLIBC_2.1 {
pthread_attr_init; 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 { libpthread {

View 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_destroy, (pthread_condattr_t *attr), (attr), 0)
FORWARD (pthread_condattr_init, (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);
FORWARD (pthread_cond_broadcast, (pthread_cond_t *cond), (cond), 0) #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_destroy, (pthread_cond_t *cond), (cond), 0) #if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3_2)
FORWARD (__pthread_cond_init_2_0,
FORWARD (pthread_cond_init,
(pthread_cond_t *cond, const pthread_condattr_t *cond_attr), (pthread_cond_t *cond, const pthread_condattr_t *cond_attr),
(cond, cond_attr), 0) (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) #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);
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_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) (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), FORWARD (pthread_equal, (pthread_t thread1, pthread_t thread2),

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -30,6 +30,7 @@
#include <tls.h> #include <tls.h>
#include <fork.h> #include <fork.h>
#include <version.h> #include <version.h>
#include <shlib-compat.h>
/* XXX For the time being... */ /* 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 = static struct pthread_functions pthread_functions =
{ {
.ptr_pthread_attr_destroy = __pthread_attr_destroy, .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, .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_init_2_1 = __pthread_attr_init_2_1,
.ptr_pthread_attr_getdetachstate = __pthread_attr_getdetachstate, .ptr_pthread_attr_getdetachstate = __pthread_attr_getdetachstate,
.ptr_pthread_attr_setdetachstate = __pthread_attr_setdetachstate, .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_attr_setscope = __pthread_attr_setscope,
.ptr_pthread_condattr_destroy = __pthread_condattr_destroy, .ptr_pthread_condattr_destroy = __pthread_condattr_destroy,
.ptr_pthread_condattr_init = __pthread_condattr_init, .ptr_pthread_condattr_init = __pthread_condattr_init,
.ptr_pthread_cond_broadcast = __pthread_cond_broadcast, .ptr___pthread_cond_broadcast = __pthread_cond_broadcast,
.ptr_pthread_cond_destroy = __pthread_cond_destroy, .ptr___pthread_cond_destroy = __pthread_cond_destroy,
.ptr_pthread_cond_init = __pthread_cond_init, .ptr___pthread_cond_init = __pthread_cond_init,
.ptr_pthread_cond_signal = __pthread_cond_signal, .ptr___pthread_cond_signal = __pthread_cond_signal,
.ptr_pthread_cond_wait = __pthread_cond_wait, .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_equal = __pthread_equal,
.ptr___pthread_exit = __pthread_exit, .ptr___pthread_exit = __pthread_exit,
.ptr_pthread_getschedparam = __pthread_getschedparam, .ptr_pthread_getschedparam = __pthread_getschedparam,

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -25,7 +25,7 @@
#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2) #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
int int
__old_pthread_cond_broadcast (cond) __pthread_cond_broadcast_2_0 (cond)
pthread_cond_t *cond; pthread_cond_t *cond;
{ {
pthread_cond_t **realp = (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); 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); pthread_cond_broadcast, GLIBC_2_0);
#endif #endif

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -24,7 +24,7 @@
#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2) #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
int int
__old_pthread_cond_destroy (cond) __pthread_cond_destroy_2_0 (cond)
pthread_cond_t *cond; pthread_cond_t *cond;
{ {
/* Free the memory which was eventually allocated. */ /* Free the memory which was eventually allocated. */
@ -32,6 +32,6 @@ __old_pthread_cond_destroy (cond)
return 0; 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); GLIBC_2_0);
#endif #endif

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -23,7 +23,7 @@
#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2) #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
int int
__old_pthread_cond_init (cond, cond_attr) __pthread_cond_init_2_0 (cond, cond_attr)
pthread_cond_t *cond; pthread_cond_t *cond;
const pthread_condattr_t *cond_attr; const pthread_condattr_t *cond_attr;
{ {
@ -38,6 +38,6 @@ __old_pthread_cond_init (cond, cond_attr)
return 0; 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); GLIBC_2_0);
#endif #endif

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -25,7 +25,7 @@
#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2) #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
int int
__old_pthread_cond_signal (cond) __pthread_cond_signal_2_0 (cond)
pthread_cond_t *cond; pthread_cond_t *cond;
{ {
pthread_cond_t **realp = (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); 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); GLIBC_2_0);
#endif #endif

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -25,7 +25,7 @@
#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2) #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_3_2)
int int
__old_pthread_cond_wait (cond, mutex) __pthread_cond_wait_2_0 (cond, mutex)
pthread_cond_t *cond; pthread_cond_t *cond;
pthread_mutex_t *mutex; pthread_mutex_t *mutex;
{ {
@ -42,6 +42,6 @@ __old_pthread_cond_wait (cond, mutex)
return __pthread_cond_wait (*realp, 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); GLIBC_2_0);
#endif #endif

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. 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_attr_setscope) (pthread_attr_t *, int);
int (*ptr_pthread_condattr_destroy) (pthread_condattr_t *); int (*ptr_pthread_condattr_destroy) (pthread_condattr_t *);
int (*ptr_pthread_condattr_init) (pthread_condattr_t *); int (*ptr_pthread_condattr_init) (pthread_condattr_t *);
int (*ptr_pthread_cond_broadcast) (pthread_cond_t *); int (*ptr___pthread_cond_broadcast) (pthread_cond_t *);
int (*ptr_pthread_cond_destroy) (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_init) (pthread_cond_t *,
int (*ptr_pthread_cond_signal) (pthread_cond_t *); const pthread_condattr_t *);
int (*ptr_pthread_cond_wait) (pthread_cond_t *, pthread_mutex_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); int (*ptr_pthread_equal) (pthread_t, pthread_t);
void (*ptr___pthread_exit) (void *); void (*ptr___pthread_exit) (void *);
int (*ptr_pthread_getschedparam) (pthread_t, int *, struct sched_param *); 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) extern void __pthread_disable_asynccancel (int oldtype)
internal_function attribute_hidden; internal_function attribute_hidden;
extern int __old_pthread_cond_broadcast (pthread_cond_t *cond); extern int __pthread_cond_broadcast_2_0 (pthread_cond_t *cond);
extern int __old_pthread_cond_destroy (pthread_cond_t *cond); extern int __pthread_cond_destroy_2_0 (pthread_cond_t *cond);
extern int __old_pthread_cond_init (pthread_cond_t *cond, extern int __pthread_cond_init_2_0 (pthread_cond_t *cond,
const pthread_condattr_t *cond_attr); 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, extern int __old_pthread_cond_timedwait (pthread_cond_t *cond,
pthread_mutex_t *mutex, pthread_mutex_t *mutex,
const struct timespec *abstime); 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); pthread_mutex_t *mutex);
/* The two functions are in libc.so and not exported. */ /* The two functions are in libc.so and not exported. */

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -17,6 +17,7 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */ 02111-1307 USA. */
#include <shlib-compat.h>
#include "pthreadP.h" #include "pthreadP.h"
@ -26,4 +27,5 @@ __pthread_cond_destroy (cond)
{ {
return 0; return 0;
} }
strong_alias (__pthread_cond_destroy, pthread_cond_destroy) versioned_symbol (libpthread, __pthread_cond_destroy,
pthread_cond_destroy, GLIBC_2_3_2);

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -17,6 +17,7 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */ 02111-1307 USA. */
#include <shlib-compat.h>
#include "pthreadP.h" #include "pthreadP.h"
@ -36,4 +37,5 @@ __pthread_cond_init (cond, cond_attr)
return 0; return 0;
} }
strong_alias (__pthread_cond_init, pthread_cond_init) versioned_symbol (libpthread, __pthread_cond_init,
pthread_cond_init, GLIBC_2_3_2);

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -17,8 +17,37 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */ 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 /* We use the libc implementation but we tell it to not allow
SIGCANCEL to be handled. */ SIGCANCEL to be handled. */
#define SIGCANCEL __SIGRTMIN # define SIGCANCEL __SIGRTMIN
# define LIBC_SIGACTION 1
#include_next <sigaction.c> # 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>
#endif /* LIBC_SIGACTION */

View 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -149,6 +149,9 @@ __libc_sigaction (sig, act, oact)
return result; return result;
} }
libc_hidden_def (__libc_sigaction) libc_hidden_def (__libc_sigaction)
#ifndef LIBC_SIGACTION
weak_alias (__libc_sigaction, __sigaction) weak_alias (__libc_sigaction, __sigaction)
libc_hidden_weak (__sigaction) libc_hidden_weak (__sigaction)
weak_alias (__libc_sigaction, sigaction) weak_alias (__libc_sigaction, sigaction)
#endif

View File

@ -1,5 +1,5 @@
/* POSIX.1 `sigaction' call for Linux/i386. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or 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) libc_hidden_def (__libc_sigaction)
#ifndef SIGCANCEL #ifndef LIBC_SIGACTION
weak_alias (__libc_sigaction, __sigaction) weak_alias (__libc_sigaction, __sigaction)
libc_hidden_weak (__sigaction) libc_hidden_weak (__sigaction)
weak_alias (__libc_sigaction, 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 #endif
/* NOTE: Please think twice before making any changes to the bits of /* NOTE: Please think twice before making any changes to the bits of

View 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. This file is part of the GNU C Library.
Linux/IA64 specific sigaction Linux/IA64 specific sigaction
Written by Jes Sorensen, <Jes.Sorensen@cern.ch>, April 1999. 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); CHECK_1_NULL_OK (act), CHECK_1_NULL_OK (oact), _NSIG / 8);
} }
libc_hidden_def (__libc_sigaction) libc_hidden_def (__libc_sigaction)
#ifndef LIBC_SIGACTION
weak_alias (__libc_sigaction, __sigaction) weak_alias (__libc_sigaction, __sigaction)
libc_hidden_def (__sigaction) libc_hidden_def (__sigaction)
weak_alias (__libc_sigaction, sigaction) weak_alias (__libc_sigaction, sigaction)
#endif

View 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -135,6 +135,9 @@ __libc_sigaction (sig, act, oact)
#endif #endif
} }
libc_hidden_def (__libc_sigaction) libc_hidden_def (__libc_sigaction)
#ifndef LIBC_SIGACTION
weak_alias (__libc_sigaction, __sigaction) weak_alias (__libc_sigaction, __sigaction)
libc_hidden_weak (__sigaction) libc_hidden_weak (__sigaction)
weak_alias (__libc_sigaction, sigaction) weak_alias (__libc_sigaction, sigaction)
#endif

View 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or 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); return INLINE_SYSCALL (rt_sigaction, 4, sig, act, oact, _NSIG / 8);
} }
libc_hidden_def (__libc_sigaction) libc_hidden_def (__libc_sigaction)
#ifndef LIBC_SIGACTION
weak_alias (__libc_sigaction, __sigaction) weak_alias (__libc_sigaction, __sigaction)
libc_hidden_weak (__sigaction) libc_hidden_weak (__sigaction)
weak_alias (__libc_sigaction, sigaction) weak_alias (__libc_sigaction, sigaction)
#endif

View 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or 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) libc_hidden_def (__libc_sigaction)
#ifndef SIGCANCEL #ifndef LIBC_SIGACTION
weak_alias (__libc_sigaction, __sigaction) weak_alias (__libc_sigaction, __sigaction)
libc_hidden_weak (__sigaction) libc_hidden_weak (__sigaction)
weak_alias (__libc_sigaction, 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 #endif

View File

@ -1,5 +1,5 @@
/* POSIX.1 sigaction call for Linux/SPARC. /* 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. This file is part of the GNU C Library.
Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx), 1997. Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx), 1997.
@ -135,9 +135,12 @@ __libc_sigaction (int sig, __const struct sigaction *act,
return -1; return -1;
} }
libc_hidden_def (__libc_sigaction) libc_hidden_def (__libc_sigaction)
#ifndef LIBC_SIGACTION
weak_alias (__libc_sigaction, __sigaction); weak_alias (__libc_sigaction, __sigaction);
libc_hidden_weak (__sigaction) libc_hidden_weak (__sigaction)
weak_alias (__libc_sigaction, sigaction); weak_alias (__libc_sigaction, sigaction);
#endif
static void static void
__rt_sigreturn_stub (void) __rt_sigreturn_stub (void)

View File

@ -1,5 +1,5 @@
/* POSIX.1 sigaction call for Linux/SPARC64. /* 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. This file is part of the GNU C Library.
Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx) and Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx) and
Jakub Jelinek (jj@ultra.linux.cz). Jakub Jelinek (jj@ultra.linux.cz).
@ -64,9 +64,12 @@ __libc_sigaction (int sig, __const struct sigaction *act,
return ret; return ret;
} }
libc_hidden_def (__libc_sigaction) libc_hidden_def (__libc_sigaction)
#ifndef LIBC_SIGACTION
weak_alias (__libc_sigaction, __sigaction); weak_alias (__libc_sigaction, __sigaction);
libc_hidden_weak (__sigaction) libc_hidden_weak (__sigaction)
weak_alias (__libc_sigaction, sigaction); weak_alias (__libc_sigaction, sigaction);
#endif
static void static void
__rt_sigreturn_stub (void) __rt_sigreturn_stub (void)

View File

@ -1,5 +1,5 @@
/* POSIX.1 `sigaction' call for Linux/x86-64. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or 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; return result;
} }
libc_hidden_def (__libc_sigaction) libc_hidden_def (__libc_sigaction)
#ifndef LIBC_SIGACTION
weak_alias (__libc_sigaction, __sigaction) weak_alias (__libc_sigaction, __sigaction)
libc_hidden_weak (__sigaction) libc_hidden_weak (__sigaction)
weak_alias (__libc_sigaction, sigaction) weak_alias (__libc_sigaction, sigaction)
#endif
/* NOTE: Please think twice before making any changes to the bits of /* NOTE: Please think twice before making any changes to the bits of
code below. GDB needs some intimate knowledge about it to code below. GDB needs some intimate knowledge about it to