diff options
Diffstat (limited to 'libpthread/linuxthreads/sysdeps/pthread/bits')
5 files changed, 50 insertions, 133 deletions
| diff --git a/libpthread/linuxthreads/sysdeps/pthread/bits/initspin.h b/libpthread/linuxthreads/sysdeps/pthread/bits/initspin.h deleted file mode 100644 index b9e4acf30..000000000 --- a/libpthread/linuxthreads/sysdeps/pthread/bits/initspin.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Generic definitions for spinlock initializers. -   Copyright (C) 2000, 2001 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; see the file COPYING.LIB.  If -   not, see <http://www.gnu.org/licenses/>.  */ - -/* Initial value of a spinlock.  Most platforms should use zero, -   unless they only implement a "test and clear" operation instead of -   the usual "test and set". */ -#define __LT_SPINLOCK_INIT 0 - -/* Macros for lock initializers, using the above definition. */ -#define __LOCK_INITIALIZER { 0, __LT_SPINLOCK_INIT } -#define __ALT_LOCK_INITIALIZER { 0, __LT_SPINLOCK_INIT } -#define __ATOMIC_INITIALIZER { 0, __LT_SPINLOCK_INIT } diff --git a/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h b/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h index 855efff12..8833e343d 100644 --- a/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h +++ b/libpthread/linuxthreads/sysdeps/pthread/bits/libc-lock.h @@ -1,5 +1,5 @@  /* libc-internal interface for mutex locks.  LinuxThreads version. -   Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003,2006 +   Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003     	Free Software Foundation, Inc.     This file is part of the GNU C Library. @@ -23,13 +23,13 @@  #include <pthread.h>  #if defined _LIBC && !defined NOT_IN_libc -#include <linuxthreads/internals.h> +#include <linuxthreads.old/internals.h>  #endif  /* Mutex type.  */  #if defined(_LIBC) || defined(_IO_MTSAFE_IO)  typedef pthread_mutex_t __libc_lock_t; -typedef struct { pthread_mutex_t mutex; } __libc_lock_recursive_t; +typedef pthread_mutex_t __libc_lock_recursive_t;  # ifdef __USE_UNIX98  typedef pthread_rwlock_t __libc_rwlock_t;  # else @@ -131,15 +131,39 @@ typedef pthread_key_t __libc_key_t;  #define __libc_rwlock_init(NAME) \    (__libc_maybe_call (__pthread_rwlock_init, (&(NAME), NULL), 0)); +/* Same as last but this time we initialize an adaptive mutex.  */ +#if defined _LIBC && !defined NOT_IN_libc && defined SHARED +#define __libc_lock_init_adaptive(NAME) \ +  ({									      \ +    (NAME).__m_count = 0;						      \ +    (NAME).__m_owner = NULL;						      \ +    (NAME).__m_kind = PTHREAD_MUTEX_ADAPTIVE_NP;			      \ +    (NAME).__m_lock.__status = 0;					      \ +    (NAME).__m_lock.__spinlock = __LT_SPINLOCK_INIT;			      \ +    0; }) +#else +#define __libc_lock_init_adaptive(NAME) \ +  do {									      \ +    if (__pthread_mutex_init != NULL)					      \ +      {									      \ +	pthread_mutexattr_t __attr;					      \ +	__pthread_mutexattr_init (&__attr);				      \ +	__pthread_mutexattr_settype (&__attr, PTHREAD_MUTEX_ADAPTIVE_NP);     \ +	__pthread_mutex_init (&(NAME), &__attr);			      \ +	__pthread_mutexattr_destroy (&__attr);				      \ +      }									      \ +  } while (0); +#endif +  /* Same as last but this time we initialize a recursive mutex.  */  #if defined _LIBC && !defined NOT_IN_libc && defined SHARED  #define __libc_lock_init_recursive(NAME) \    ({									      \ -    (NAME).mutex.__m_count = 0;						      \ -    (NAME).mutex.__m_owner = NULL;					      \ -    (NAME).mutex.__m_kind = PTHREAD_MUTEX_RECURSIVE_NP;			      \ -    (NAME).mutex.__m_lock.__status = 0;					      \ -    (NAME).mutex.__m_lock.__spinlock = __LT_SPINLOCK_INIT;		      \ +    (NAME).__m_count = 0;						      \ +    (NAME).__m_owner = NULL;					      \ +    (NAME).__m_kind = PTHREAD_MUTEX_RECURSIVE_NP;			      \ +    (NAME).__m_lock.__status = 0;					      \ +    (NAME).__m_lock.__spinlock = __LT_SPINLOCK_INIT;		      \      0; })  #else  #define __libc_lock_init_recursive(NAME) \ @@ -149,7 +173,7 @@ typedef pthread_key_t __libc_key_t;  	pthread_mutexattr_t __attr;					      \  	__pthread_mutexattr_init (&__attr);				      \  	__pthread_mutexattr_settype (&__attr, PTHREAD_MUTEX_RECURSIVE_NP); \ -	__pthread_mutex_init (&(NAME).mutex, &__attr);			      \ +	__pthread_mutex_init (&(NAME), &__attr);			      \  	__pthread_mutexattr_destroy (&__attr);				      \        }									      \    } while (0); @@ -202,23 +226,6 @@ typedef pthread_key_t __libc_key_t;  /* Unlock the recursive named lock variable.  */  #define __libc_lock_unlock_recursive(NAME) __libc_lock_unlock ((NAME).mutex) -#if defined _LIBC && defined SHARED -# define __rtld_lock_default_lock_recursive(lock) \ -  ++((pthread_mutex_t *)(lock))->__m_count; - -# define __rtld_lock_default_unlock_recursive(lock) \ -  --((pthread_mutex_t *)(lock))->__m_count; - -# define __rtld_lock_lock_recursive(NAME) \ -  GL(dl_rtld_lock_recursive) (&(NAME).mutex) - -# define __rtld_lock_unlock_recursive(NAME) \ -  GL(dl_rtld_unlock_recursive) (&(NAME).mutex) -#else -#define __rtld_lock_lock_recursive(NAME) __libc_lock_lock_recursive (NAME) -#define __rtld_lock_unlock_recursive(NAME) __libc_lock_unlock_recursive (NAME) -#endif -  /* Define once control variable.  */  #if PTHREAD_ONCE_INIT == 0  /* Special case for static variables where we can avoid the initialization @@ -237,7 +244,7 @@ typedef pthread_key_t __libc_key_t;        __pthread_once (&(ONCE_CONTROL), (INIT_FUNCTION));		      \      else if ((ONCE_CONTROL) == PTHREAD_ONCE_INIT) {			      \        INIT_FUNCTION ();							      \ -      (ONCE_CONTROL) = 2;						      \ +      (ONCE_CONTROL) = !PTHREAD_ONCE_INIT;				      \      }									      \    } while (0) @@ -263,6 +270,7 @@ typedef pthread_key_t __libc_key_t;        _pthread_cleanup_pop_restore (&_buffer, (DOIT));			      \      } +#if 0  #define __libc_cleanup_push(fct, arg) \      { struct _pthread_cleanup_buffer _buffer; 				      \      __libc_maybe_call (_pthread_cleanup_push, (&_buffer, (fct), (arg)), 0) @@ -270,6 +278,7 @@ typedef pthread_key_t __libc_key_t;  #define __libc_cleanup_pop(execute) \      __libc_maybe_call (_pthread_cleanup_pop, (&_buffer, execute), 0);	      \      } +#endif  /* Create thread-specific key.  */  #define __libc_key_create(KEY, DESTRUCTOR) \ @@ -367,7 +376,6 @@ weak_extern (BP_SYM (__pthread_key_create))  weak_extern (BP_SYM (__pthread_setspecific))  weak_extern (BP_SYM (__pthread_getspecific))  weak_extern (BP_SYM (__pthread_once)) -weak_extern (__pthread_initialize)  weak_extern (__pthread_atfork)  weak_extern (BP_SYM (_pthread_cleanup_push))  weak_extern (BP_SYM (_pthread_cleanup_pop)) @@ -392,7 +400,6 @@ weak_extern (BP_SYM (_pthread_cleanup_pop_restore))  #  pragma weak __pthread_setspecific  #  pragma weak __pthread_getspecific  #  pragma weak __pthread_once -#  pragma weak __pthread_initialize  #  pragma weak __pthread_atfork  #  pragma weak _pthread_cleanup_push_defer  #  pragma weak _pthread_cleanup_pop_restore diff --git a/libpthread/linuxthreads/sysdeps/pthread/bits/libc-tsd.h b/libpthread/linuxthreads/sysdeps/pthread/bits/libc-tsd.h index 7cc5f9cf6..97af75ebf 100644 --- a/libpthread/linuxthreads/sysdeps/pthread/bits/libc-tsd.h +++ b/libpthread/linuxthreads/sysdeps/pthread/bits/libc-tsd.h @@ -19,7 +19,19 @@  #ifndef _BITS_LIBC_TSD_H  #define _BITS_LIBC_TSD_H 1 -#include <linuxthreads/descr.h> +/* Fast thread-specific data internal to libc.  */ +enum __libc_tsd_key_t { _LIBC_TSD_KEY_MALLOC = 0, +			_LIBC_TSD_KEY_DL_ERROR, +			_LIBC_TSD_KEY_RPC_VARS, +			_LIBC_TSD_KEY_LOCALE, +			_LIBC_TSD_KEY_CTYPE_B, +			_LIBC_TSD_KEY_CTYPE_TOLOWER, +			_LIBC_TSD_KEY_CTYPE_TOUPPER, +			_LIBC_TSD_KEY_N }; + +#include <features.h> +#include <linuxthreads.old/internals.h> +  #ifdef __UCLIBC_HAS_TLS__  #include <tls.h> diff --git a/libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h b/libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h index 8d01c8908..3eb592919 100644 --- a/libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h +++ b/libpthread/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h @@ -56,20 +56,10 @@ 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_cond_align_t)]; -  __pthread_cond_align_t __align;  } pthread_cond_t; @@ -131,7 +121,7 @@ typedef struct  #ifdef __USE_XOPEN2K  /* POSIX spinlock data type.  */ -typedef __volatile__ int pthread_spinlock_t; +typedef volatile int pthread_spinlock_t;  /* POSIX barrier. */  typedef struct { diff --git a/libpthread/linuxthreads/sysdeps/pthread/bits/typesizes.h b/libpthread/linuxthreads/sysdeps/pthread/bits/typesizes.h deleted file mode 100644 index 0e900d2d5..000000000 --- a/libpthread/linuxthreads/sysdeps/pthread/bits/typesizes.h +++ /dev/null @@ -1,65 +0,0 @@ -/* bits/typesizes.h -- underlying types for *_t.  Generic version. -   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 -   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, see -   <http://www.gnu.org/licenses/>.  */ - -#ifndef _BITS_TYPES_H -# error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead." -#endif - -#ifndef	_BITS_TYPESIZES_H -#define	_BITS_TYPESIZES_H	1 - -/* See <bits/types.h> for the meaning of these macros.  This file exists so -   that <bits/types.h> need not vary across different GNU platforms.  */ - -#define __DEV_T_TYPE		__UQUAD_TYPE -#define __UID_T_TYPE		__U32_TYPE -#define __GID_T_TYPE		__U32_TYPE -#define __INO_T_TYPE		__ULONGWORD_TYPE -#define __INO64_T_TYPE		__UQUAD_TYPE -#define __MODE_T_TYPE		__U32_TYPE -#define __NLINK_T_TYPE		__UWORD_TYPE -#define __OFF_T_TYPE		__SLONGWORD_TYPE -#define __OFF64_T_TYPE		__SQUAD_TYPE -#define __PID_T_TYPE		__S32_TYPE -#define __RLIM_T_TYPE		__ULONGWORD_TYPE -#define __RLIM64_T_TYPE		__UQUAD_TYPE -#define	__BLKCNT_T_TYPE		__SLONGWORD_TYPE -#define	__BLKCNT64_T_TYPE	__SQUAD_TYPE -#define	__FSBLKCNT_T_TYPE	__ULONGWORD_TYPE -#define	__FSBLKCNT64_T_TYPE	__UQUAD_TYPE -#define	__FSFILCNT_T_TYPE	__ULONGWORD_TYPE -#define	__FSFILCNT64_T_TYPE	__UQUAD_TYPE -#define	__ID_T_TYPE		__U32_TYPE -#define __CLOCK_T_TYPE		__SLONGWORD_TYPE -#define __TIME_T_TYPE		__SLONGWORD_TYPE -#define __USECONDS_T_TYPE	__U32_TYPE -#define __SUSECONDS_T_TYPE	__SLONGWORD_TYPE -#define __DADDR_T_TYPE		__S32_TYPE -#define __SWBLK_T_TYPE		__SLONGWORD_TYPE -#define __KEY_T_TYPE		__S32_TYPE -#define __CLOCKID_T_TYPE	__S32_TYPE -#define __TIMER_T_TYPE		__S32_TYPE -#define __BLKSIZE_T_TYPE	__SLONGWORD_TYPE -#define __FSID_T_TYPE		struct { int __val[2]; } -#define __SSIZE_T_TYPE		__SWORD_TYPE - -/* Number of descriptors that can fit in an `fd_set'.  */ -#define	__FD_SETSIZE		1024 - - -#endif /* bits/typesizes.h */ | 
