1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-06-13 19:21:36 +03:00

nptl: Define __PTHREAD_MUTEX_{NUSERS_AFTER_KIND,USE_UNION}

This patch adds two new internal defines to set the internal
pthread_mutex_t layout required by the supported ABIS:

  1. __PTHREAD_MUTEX_NUSERS_AFTER_KIND which control whether to define
     __nusers fields before or after __kind.  The preferred value for
     is 0 for new ports and it sets __nusers before __kind.

  2. __PTHREAD_MUTEX_USE_UNION which control whether internal __spins and
     __list members will be place inside an union for linuxthreads
     compatibility.  The preferred value is 0 for ports and it sets
     to not use an union to define both fields.

It fixes the wrong offsets value for __kind value on x86_64-linux-gnu-x32.
Checked with a make check run-built-tests=no on all afected ABIs.

	[BZ #22298]
	* nptl/allocatestack.c (allocate_stack): Check if
	__PTHREAD_MUTEX_HAVE_PREV is non-zero, instead if
	__PTHREAD_MUTEX_HAVE_PREV is defined.
	* nptl/descr.h (pthread): Likewise.
	* nptl/nptl-init.c (__pthread_initialize_minimal_internal):
	Likewise.
	* nptl/pthread_create.c (START_THREAD_DEFN): Likewise.
	* sysdeps/nptl/fork.c (__libc_fork): Likewise.
	* sysdeps/nptl/pthread.h (PTHREAD_MUTEX_INITIALIZER): Likewise.
	* sysdeps/nptl/bits/thread-shared-types.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
	defines.
	(__pthread_internal_list): Check __PTHREAD_MUTEX_USE_UNION instead
	of __WORDSIZE for internal layout.
	(__pthread_mutex_s): Check __PTHREAD_MUTEX_NUSERS_AFTER_KIND instead
	of __WORDSIZE for internal __nusers layout and __PTHREAD_MUTEX_USE_UNION
	instead of __WORDSIZE whether to use an union for __spins and __list
	fields.
	(__PTHREAD_MUTEX_HAVE_PREV): Define also for __PTHREAD_MUTEX_USE_UNION
	case.
	* sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
	defines.
	* sysdeps/alpha/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.
	* sysdeps/arm/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.
	* sysdeps/hppa/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.
	* sysdeps/ia64/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.
	* sysdeps/m68k/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.
	* sysdeps/microblaze/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.
	* sysdeps/mips/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.
	* sysdeps/nios2/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.
	* sysdeps/powerpc/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.
	* sysdeps/s390/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.
	* sysdeps/sh/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.
	* sysdeps/sparc/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.
	* sysdeps/tile/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.
	* sysdeps/x86/nptl/bits/pthreadtypes-arch.h
	(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
	Likewise.

Signed-off-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
Adhemerval Zanella
2017-10-19 10:11:57 -02:00
parent 72b3c6eecd
commit 06be6368da
23 changed files with 136 additions and 12 deletions

View File

@ -1,5 +1,72 @@
2017-11-07 Adhemerval Zanella <adhemerval.zanella@linaro.org> 2017-11-07 Adhemerval Zanella <adhemerval.zanella@linaro.org>
[BZ #22298]
* nptl/allocatestack.c (allocate_stack): Check if
__PTHREAD_MUTEX_HAVE_PREV is non-zero, instead if
__PTHREAD_MUTEX_HAVE_PREV is defined.
* nptl/descr.h (pthread): Likewise.
* nptl/nptl-init.c (__pthread_initialize_minimal_internal):
Likewise.
* nptl/pthread_create.c (START_THREAD_DEFN): Likewise.
* sysdeps/nptl/fork.c (__libc_fork): Likewise.
* sysdeps/nptl/pthread.h (PTHREAD_MUTEX_INITIALIZER): Likewise.
* sysdeps/nptl/bits/thread-shared-types.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
defines.
(__pthread_internal_list): Check __PTHREAD_MUTEX_USE_UNION instead
of __WORDSIZE for internal layout.
(__pthread_mutex_s): Check __PTHREAD_MUTEX_NUSERS_AFTER_KIND instead
of __WORDSIZE for internal __nusers layout and __PTHREAD_MUTEX_USE_UNION
instead of __WORDSIZE whether to use an union for __spins and __list
fields.
(__PTHREAD_MUTEX_HAVE_PREV): Define also for __PTHREAD_MUTEX_USE_UNION
case.
* sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION): New
defines.
* sysdeps/alpha/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* sysdeps/arm/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* sysdeps/hppa/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* sysdeps/ia64/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* sysdeps/m68k/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* sysdeps/microblaze/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* sysdeps/mips/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* sysdeps/nios2/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* sysdeps/powerpc/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* sysdeps/s390/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* sysdeps/sh/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* sysdeps/sparc/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* sysdeps/tile/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* sysdeps/x86/nptl/bits/pthreadtypes-arch.h
(__PTHREAD_MUTEX_NUSERS_AFTER_KIND, __PTHREAD_MUTEX_USE_UNION):
Likewise.
* nptl/pthreadP.h (ASSERT_TYPE_SIZE, ASSERT_PTHREAD_INTERNAL_SIZE): * nptl/pthreadP.h (ASSERT_TYPE_SIZE, ASSERT_PTHREAD_INTERNAL_SIZE):
New macros. New macros.
* nptl/pthread_attr_init.c (__pthread_mutex_init): Add build time * nptl/pthread_attr_init.c (__pthread_mutex_init): Add build time

View File

@ -753,7 +753,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
- offsetof (pthread_mutex_t, - offsetof (pthread_mutex_t,
__data.__list.__next)); __data.__list.__next));
pd->robust_head.list_op_pending = NULL; pd->robust_head.list_op_pending = NULL;
#ifdef __PTHREAD_MUTEX_HAVE_PREV #if __PTHREAD_MUTEX_HAVE_PREV
pd->robust_prev = &pd->robust_head; pd->robust_prev = &pd->robust_head;
#endif #endif
pd->robust_head.list = &pd->robust_head; pd->robust_head.list = &pd->robust_head;

View File

@ -169,7 +169,7 @@ struct pthread
pid_t pid_ununsed; pid_t pid_ununsed;
/* List of robust mutexes the thread is holding. */ /* List of robust mutexes the thread is holding. */
#ifdef __PTHREAD_MUTEX_HAVE_PREV #if __PTHREAD_MUTEX_HAVE_PREV
void *robust_prev; void *robust_prev;
struct robust_list_head robust_head; struct robust_list_head robust_head;

View File

@ -297,7 +297,7 @@ __pthread_initialize_minimal_internal (void)
/* Initialize the robust mutex data. */ /* Initialize the robust mutex data. */
{ {
#ifdef __PTHREAD_MUTEX_HAVE_PREV #if __PTHREAD_MUTEX_HAVE_PREV
pd->robust_prev = &pd->robust_head; pd->robust_prev = &pd->robust_head;
#endif #endif
pd->robust_head.list = &pd->robust_head; pd->robust_head.list = &pd->robust_head;

View File

@ -518,7 +518,7 @@ START_THREAD_DEFN
#ifndef __ASSUME_SET_ROBUST_LIST #ifndef __ASSUME_SET_ROBUST_LIST
/* If this thread has any robust mutexes locked, handle them now. */ /* If this thread has any robust mutexes locked, handle them now. */
# ifdef __PTHREAD_MUTEX_HAVE_PREV # if __PTHREAD_MUTEX_HAVE_PREV
void *robust = pd->robust_head.list; void *robust = pd->robust_head.list;
# else # else
__pthread_slist_t *robust = pd->robust_list.__next; __pthread_slist_t *robust = pd->robust_list.__next;
@ -536,7 +536,7 @@ START_THREAD_DEFN
__list.__next)); __list.__next));
robust = *((void **) robust); robust = *((void **) robust);
# ifdef __PTHREAD_MUTEX_HAVE_PREV # if __PTHREAD_MUTEX_HAVE_PREV
this->__list.__prev = NULL; this->__list.__prev = NULL;
# endif # endif
this->__list.__next = NULL; this->__list.__next = NULL;

View File

@ -45,6 +45,8 @@
#define __PTHREAD_COMPAT_PADDING_MID #define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END #define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 0 #define __PTHREAD_MUTEX_LOCK_ELISION 0
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 0
#define __PTHREAD_MUTEX_USE_UNION 0
#define __LOCK_ALIGNMENT #define __LOCK_ALIGNMENT
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT

View File

@ -33,6 +33,8 @@
#define __PTHREAD_COMPAT_PADDING_MID #define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END #define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 0 #define __PTHREAD_MUTEX_LOCK_ELISION 0
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 0
#define __PTHREAD_MUTEX_USE_UNION 0
#define __LOCK_ALIGNMENT #define __LOCK_ALIGNMENT
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT

View File

@ -34,6 +34,8 @@
#define __PTHREAD_COMPAT_PADDING_MID #define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END #define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 0 #define __PTHREAD_MUTEX_LOCK_ELISION 0
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 1
#define __PTHREAD_MUTEX_USE_UNION 1
#define __LOCK_ALIGNMENT #define __LOCK_ALIGNMENT
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT

View File

@ -48,6 +48,8 @@
pthread_mutex_t is larger than Linuxthreads. */ pthread_mutex_t is larger than Linuxthreads. */
#define __PTHREAD_COMPAT_PADDING_END int __reserved[2]; #define __PTHREAD_COMPAT_PADDING_END int __reserved[2];
#define __PTHREAD_MUTEX_LOCK_ELISION 0 #define __PTHREAD_MUTEX_LOCK_ELISION 0
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 1
#define __PTHREAD_MUTEX_USE_UNION 1
#define __LOCK_ALIGNMENT __attribute__ ((__aligned__(16))) #define __LOCK_ALIGNMENT __attribute__ ((__aligned__(16)))
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT

View File

@ -33,6 +33,8 @@
#define __PTHREAD_COMPAT_PADDING_MID #define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END #define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 0 #define __PTHREAD_MUTEX_LOCK_ELISION 0
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 0
#define __PTHREAD_MUTEX_USE_UNION 0
#define __LOCK_ALIGNMENT #define __LOCK_ALIGNMENT
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT

View File

@ -35,6 +35,8 @@
#define __PTHREAD_COMPAT_PADDING_MID #define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END #define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 0 #define __PTHREAD_MUTEX_LOCK_ELISION 0
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 1
#define __PTHREAD_MUTEX_USE_UNION 1
#define __LOCK_ALIGNMENT __attribute__ ((__aligned__ (4))) #define __LOCK_ALIGNMENT __attribute__ ((__aligned__ (4)))
#define __ONCE_ALIGNMENT __attribute__ ((__aligned__ (4))) #define __ONCE_ALIGNMENT __attribute__ ((__aligned__ (4)))

View File

@ -35,6 +35,8 @@
#define __PTHREAD_COMPAT_PADDING_MID #define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END #define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 0 #define __PTHREAD_MUTEX_LOCK_ELISION 0
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 1
#define __PTHREAD_MUTEX_USE_UNION 1
#define __LOCK_ALIGNMENT #define __LOCK_ALIGNMENT
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT

View File

@ -42,6 +42,8 @@
#define __PTHREAD_COMPAT_PADDING_MID #define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END #define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 0 #define __PTHREAD_MUTEX_LOCK_ELISION 0
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND (_MIPS_SIM != _ABI64)
#define __PTHREAD_MUTEX_USE_UNION (_MIPS_SIM != _ABI64)
#define __LOCK_ALIGNMENT #define __LOCK_ALIGNMENT
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT

View File

@ -35,6 +35,8 @@
#define __PTHREAD_COMPAT_PADDING_MID #define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END #define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 0 #define __PTHREAD_MUTEX_LOCK_ELISION 0
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 1
#define __PTHREAD_MUTEX_USE_UNION 1
#define __LOCK_ALIGNMENT #define __LOCK_ALIGNMENT
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT

View File

@ -42,6 +42,25 @@
the internal structure. the internal structure.
__PTHREAD_MUTEX_LOCK_ELISION - 1 if the architecture supports lock __PTHREAD_MUTEX_LOCK_ELISION - 1 if the architecture supports lock
elision or 0 otherwise. elision or 0 otherwise.
__PTHREAD_MUTEX_NUSERS_AFTER_KIND - control where to put __nusers. The
preferred value for new architectures
is 0.
__PTHREAD_MUTEX_USE_UNION - control whether internal __spins and
__list will be place inside a union for
linuxthreads compatibility.
The preferred value for new architectures
is 0.
For a new port the preferred values for the required defines are:
#define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 0
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 0
#define __PTHREAD_MUTEX_USE_UNION 0
__PTHREAD_MUTEX_LOCK_ELISION can be set to 1 if the hardware plans to
eventually support lock elision using transactional memory.
The additional macro defines any constraint for the lock alignment The additional macro defines any constraint for the lock alignment
inside the thread structures: inside the thread structures:
@ -59,7 +78,7 @@
/* Common definition of pthread_mutex_t. */ /* Common definition of pthread_mutex_t. */
#if __WORDSIZE == 64 #if !__PTHREAD_MUTEX_USE_UNION
typedef struct __pthread_internal_list typedef struct __pthread_internal_list
{ {
struct __pthread_internal_list *__prev; struct __pthread_internal_list *__prev;
@ -74,7 +93,7 @@ typedef struct __pthread_internal_slist
/* Lock elision support. */ /* Lock elision support. */
#if __PTHREAD_MUTEX_LOCK_ELISION #if __PTHREAD_MUTEX_LOCK_ELISION
# if __WORDSIZE == 64 # if !__PTHREAD_MUTEX_USE_UNION
# define __PTHREAD_SPINS_DATA \ # define __PTHREAD_SPINS_DATA \
short __spins; \ short __spins; \
short __elision short __elision
@ -101,24 +120,27 @@ struct __pthread_mutex_s
int __lock __LOCK_ALIGNMENT; int __lock __LOCK_ALIGNMENT;
unsigned int __count; unsigned int __count;
int __owner; int __owner;
#if __WORDSIZE == 64 #if !__PTHREAD_MUTEX_NUSERS_AFTER_KIND
unsigned int __nusers; unsigned int __nusers;
#endif #endif
/* KIND must stay at this position in the structure to maintain /* KIND must stay at this position in the structure to maintain
binary compatibility with static initializers. */ binary compatibility with static initializers. */
int __kind; int __kind;
__PTHREAD_COMPAT_PADDING_MID __PTHREAD_COMPAT_PADDING_MID
#if __WORDSIZE == 64 #if __PTHREAD_MUTEX_NUSERS_AFTER_KIND
unsigned int __nusers;
#endif
#if !__PTHREAD_MUTEX_USE_UNION
__PTHREAD_SPINS_DATA; __PTHREAD_SPINS_DATA;
__pthread_list_t __list; __pthread_list_t __list;
# define __PTHREAD_MUTEX_HAVE_PREV 1 # define __PTHREAD_MUTEX_HAVE_PREV 1
#else #else
unsigned int __nusers;
__extension__ union __extension__ union
{ {
__PTHREAD_SPINS_DATA; __PTHREAD_SPINS_DATA;
__pthread_slist_t __list; __pthread_slist_t __list;
}; };
# define __PTHREAD_MUTEX_HAVE_PREV 0
#endif #endif
__PTHREAD_COMPAT_PADDING_END __PTHREAD_COMPAT_PADDING_END
}; };

View File

@ -166,7 +166,7 @@ __libc_fork (void)
inherit the correct value from the parent. We do not need to clear inherit the correct value from the parent. We do not need to clear
the pending operation because it must have been zero when fork was the pending operation because it must have been zero when fork was
called. */ called. */
# ifdef __PTHREAD_MUTEX_HAVE_PREV # if __PTHREAD_MUTEX_HAVE_PREV
self->robust_prev = &self->robust_head; self->robust_prev = &self->robust_head;
# endif # endif
self->robust_head.list = &self->robust_head; self->robust_head.list = &self->robust_head;

View File

@ -83,7 +83,7 @@ enum
#endif #endif
#ifdef __PTHREAD_MUTEX_HAVE_PREV #if __PTHREAD_MUTEX_HAVE_PREV
# define PTHREAD_MUTEX_INITIALIZER \ # define PTHREAD_MUTEX_INITIALIZER \
{ { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } } { { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } }
# ifdef __USE_GNU # ifdef __USE_GNU

View File

@ -42,6 +42,8 @@
#define __PTHREAD_COMPAT_PADDING_MID #define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END #define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 1 #define __PTHREAD_MUTEX_LOCK_ELISION 1
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND (__WORDSIZE != 64)
#define __PTHREAD_MUTEX_USE_UNION (__WORDSIZE != 64)
#define __LOCK_ALIGNMENT #define __LOCK_ALIGNMENT
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT

View File

@ -45,6 +45,8 @@
#else #else
#define __PTHREAD_MUTEX_LOCK_ELISION 0 #define __PTHREAD_MUTEX_LOCK_ELISION 0
#endif #endif
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND (__WORDSIZE != 64)
#define __PTHREAD_MUTEX_USE_UNION (__WORDSIZE != 64)
#define __LOCK_ALIGNMENT #define __LOCK_ALIGNMENT
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT

View File

@ -34,6 +34,8 @@
#define __PTHREAD_COMPAT_PADDING_MID #define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END #define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 0 #define __PTHREAD_MUTEX_LOCK_ELISION 0
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 1
#define __PTHREAD_MUTEX_USE_UNION 1
#define __LOCK_ALIGNMENT #define __LOCK_ALIGNMENT
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT

View File

@ -43,6 +43,8 @@
#define __PTHREAD_COMPAT_PADDING_MID #define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END #define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 0 #define __PTHREAD_MUTEX_LOCK_ELISION 0
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND (__WORDSIZE != 64)
#define __PTHREAD_MUTEX_USE_UNION (__WORDSIZE != 64)
#define __LOCK_ALIGNMENT #define __LOCK_ALIGNMENT
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT

View File

@ -43,6 +43,8 @@
#define __PTHREAD_COMPAT_PADDING_MID #define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END #define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 0 #define __PTHREAD_MUTEX_LOCK_ELISION 0
#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND (__WORDSIZE != 64)
#define __PTHREAD_MUTEX_USE_UNION (__WORDSIZE != 64)
#define __LOCK_ALIGNMENT #define __LOCK_ALIGNMENT
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT

View File

@ -51,6 +51,13 @@
#define __PTHREAD_COMPAT_PADDING_MID #define __PTHREAD_COMPAT_PADDING_MID
#define __PTHREAD_COMPAT_PADDING_END #define __PTHREAD_COMPAT_PADDING_END
#define __PTHREAD_MUTEX_LOCK_ELISION 1 #define __PTHREAD_MUTEX_LOCK_ELISION 1
#ifdef __x86_64__
# define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 0
# define __PTHREAD_MUTEX_USE_UNION 0
#else
# define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 1
# define __PTHREAD_MUTEX_USE_UNION 1
#endif
#define __LOCK_ALIGNMENT #define __LOCK_ALIGNMENT
#define __ONCE_ALIGNMENT #define __ONCE_ALIGNMENT