* sysdeps/arm/nptl/tls.h (THREAD_GSCOPE_FLAG_UNUSED,

THREAD_GSCOPE_FLAG_USED, THREAD_GSCOPE_FLAG_WAIT): Define.
	(THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_SET_FLAG,
	THREAD_GSCOPE_WAIT): Define.
	* sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c
	(lll_unlock_wake_cb): Delete.
	* sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
	(FUTEX_PRIVATE_FLAG): Define.
	(lll_unlock_wake_cb): Delete prototype.
	* sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h: Include
	<endian.h>.
	(pthread_rwlock_t): Shrink __flags and add __shared.
	* sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h
	(RTLD_SINGLE_THREAD_P): Define.

	* sysdeps/mips/nptl/tls.h (THREAD_GSCOPE_FLAG_UNUSED,
	THREAD_GSCOPE_FLAG_USED, THREAD_GSCOPE_FLAG_WAIT): Define.
	(THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_SET_FLAG,
	THREAD_GSCOPE_WAIT): Define.
	* sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h
	(FUTEX_PRIVATE_FLAG): Define.
	(lll_unlock_wake_cb): Delete prototype.
	* sysdeps/unix/sysv/linux/mips/nptl/bits/pthreadtypes.h: Include
	<endian.h>.
	(pthread_rwlock_t): Shrink __flags and add __shared.
This commit is contained in:
Daniel Jacobowitz 2007-06-06 17:27:04 +00:00
parent d3d5bc2540
commit 30efab519e
10 changed files with 122 additions and 27 deletions

View File

@ -1,3 +1,20 @@
2007-06-06 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/arm/nptl/tls.h (THREAD_GSCOPE_FLAG_UNUSED,
THREAD_GSCOPE_FLAG_USED, THREAD_GSCOPE_FLAG_WAIT): Define.
(THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_SET_FLAG,
THREAD_GSCOPE_WAIT): Define.
* sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c
(lll_unlock_wake_cb): Delete.
* sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
(FUTEX_PRIVATE_FLAG): Define.
(lll_unlock_wake_cb): Delete prototype.
* sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h: Include
<endian.h>.
(pthread_rwlock_t): Shrink __flags and add __shared.
* sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h
(RTLD_SINGLE_THREAD_P): Define.
2007-05-23 Joseph Myers <joseph@codesourcery.com> 2007-05-23 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/arm/kernel-features.h * sysdeps/unix/sysv/linux/arm/kernel-features.h

View File

@ -1,3 +1,16 @@
2007-06-06 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/mips/nptl/tls.h (THREAD_GSCOPE_FLAG_UNUSED,
THREAD_GSCOPE_FLAG_USED, THREAD_GSCOPE_FLAG_WAIT): Define.
(THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_SET_FLAG,
THREAD_GSCOPE_WAIT): Define.
* sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h
(FUTEX_PRIVATE_FLAG): Define.
(lll_unlock_wake_cb): Delete prototype.
* sysdeps/unix/sysv/linux/mips/nptl/bits/pthreadtypes.h: Include
<endian.h>.
(pthread_rwlock_t): Shrink __flags and add __shared.
2007-05-24 Atsushi Nemoto <anemo@mba.ocn.ne.jp> 2007-05-24 Atsushi Nemoto <anemo@mba.ocn.ne.jp>
* sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c * sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c

View File

@ -1,5 +1,5 @@
/* Definition for thread-local data handling. NPTL/ARM version. /* Definition for thread-local data handling. NPTL/ARM version.
Copyright (C) 2005 Free Software Foundation, Inc. Copyright (C) 2005, 2007 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
@ -132,6 +132,29 @@ typedef struct
is not available. */ is not available. */
#define TLS_INIT_TP_EXPENSIVE 1 #define TLS_INIT_TP_EXPENSIVE 1
/* Get and set the global scope generation counter in struct pthread. */
#define THREAD_GSCOPE_FLAG_UNUSED 0
#define THREAD_GSCOPE_FLAG_USED 1
#define THREAD_GSCOPE_FLAG_WAIT 2
#define THREAD_GSCOPE_RESET_FLAG() \
do \
{ int __res \
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
THREAD_GSCOPE_FLAG_UNUSED); \
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1); \
} \
while (0)
#define THREAD_GSCOPE_SET_FLAG() \
do \
{ \
THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \
atomic_write_barrier (); \
} \
while (0)
#define THREAD_GSCOPE_WAIT() \
GL(dl_wait_lookup_done) ()
#endif /* __ASSEMBLER__ */ #endif /* __ASSEMBLER__ */
#endif /* tls.h */ #endif /* tls.h */

View File

@ -1,5 +1,5 @@
/* Definition for thread-local data handling. NPTL/MIPS version. /* Definition for thread-local data handling. NPTL/MIPS version.
Copyright (C) 2005 Free Software Foundation, Inc. Copyright (C) 2005, 2007 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
@ -156,6 +156,29 @@ typedef struct
different value to mean unset l_tls_offset. */ different value to mean unset l_tls_offset. */
# define NO_TLS_OFFSET -1 # define NO_TLS_OFFSET -1
/* Get and set the global scope generation counter in struct pthread. */
#define THREAD_GSCOPE_FLAG_UNUSED 0
#define THREAD_GSCOPE_FLAG_USED 1
#define THREAD_GSCOPE_FLAG_WAIT 2
#define THREAD_GSCOPE_RESET_FLAG() \
do \
{ int __res \
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
THREAD_GSCOPE_FLAG_UNUSED); \
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1); \
} \
while (0)
#define THREAD_GSCOPE_SET_FLAG() \
do \
{ \
THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \
atomic_write_barrier (); \
} \
while (0)
#define THREAD_GSCOPE_WAIT() \
GL(dl_wait_lookup_done) ()
#endif /* __ASSEMBLER__ */ #endif /* __ASSEMBLER__ */
#endif /* tls.h */ #endif /* tls.h */

View File

@ -19,6 +19,8 @@
#ifndef _BITS_PTHREADTYPES_H #ifndef _BITS_PTHREADTYPES_H
#define _BITS_PTHREADTYPES_H 1 #define _BITS_PTHREADTYPES_H 1
#include <endian.h>
#define __SIZEOF_PTHREAD_ATTR_T 36 #define __SIZEOF_PTHREAD_ATTR_T 36
#define __SIZEOF_PTHREAD_MUTEX_T 24 #define __SIZEOF_PTHREAD_MUTEX_T 24
#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 #define __SIZEOF_PTHREAD_MUTEXATTR_T 4
@ -126,9 +128,21 @@ typedef union
unsigned int __writer_wakeup; unsigned int __writer_wakeup;
unsigned int __nr_readers_queued; unsigned int __nr_readers_queued;
unsigned int __nr_writers_queued; unsigned int __nr_writers_queued;
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned char __pad1;
unsigned char __pad2;
unsigned char __shared;
/* FLAGS must stay at this position in the structure to maintain /* FLAGS must stay at this position in the structure to maintain
binary compatibility. */ binary compatibility. */
unsigned int __flags; unsigned char __flags;
#else
/* FLAGS must stay at this position in the structure to maintain
binary compatibility. */
unsigned char __flags;
unsigned char __shared;
unsigned char __pad1;
unsigned char __pad2;
#endif
int __writer; int __writer;
} __data; } __data;
char __size[__SIZEOF_PTHREAD_RWLOCK_T]; char __size[__SIZEOF_PTHREAD_RWLOCK_T];

View File

@ -1,5 +1,5 @@
/* low level locking for pthread library. Generic futex-using version. /* low level locking for pthread library. Generic futex-using version.
Copyright (C) 2003, 2005 Free Software Foundation, Inc. Copyright (C) 2003, 2005, 2007 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
@ -63,20 +63,8 @@ __lll_timedlock_wait (int *futex, const struct timespec *abstime)
} }
/* These don't get included in libc.so */ /* This function doesn't get included in libc.so */
#ifdef IS_IN_libpthread #ifdef IS_IN_libpthread
int
lll_unlock_wake_cb (int *futex)
{
int val = atomic_exchange_rel (futex, 0);
if (__builtin_expect (val > 1, 0))
lll_futex_wake (futex, 1);
return 0;
}
int int
__lll_timedwait_tid (int *tidp, const struct timespec *abstime) __lll_timedwait_tid (int *tidp, const struct timespec *abstime)
{ {
@ -114,5 +102,4 @@ __lll_timedwait_tid (int *tidp, const struct timespec *abstime)
return 0; return 0;
} }
#endif #endif

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2005, 2006 Free Software Foundation, Inc. /* Copyright (C) 2005, 2006, 2007 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
@ -34,6 +34,7 @@
#define FUTEX_LOCK_PI 6 #define FUTEX_LOCK_PI 6
#define FUTEX_UNLOCK_PI 7 #define FUTEX_UNLOCK_PI 7
#define FUTEX_TRYLOCK_PI 8 #define FUTEX_TRYLOCK_PI 8
#define FUTEX_PRIVATE_FLAG 128
/* Initializer for compatibility lock. */ /* Initializer for compatibility lock. */
#define LLL_MUTEX_LOCK_INITIALIZER (0) #define LLL_MUTEX_LOCK_INITIALIZER (0)
@ -267,8 +268,6 @@ typedef int lll_lock_t;
#define LLL_LOCK_INITIALIZER (0) #define LLL_LOCK_INITIALIZER (0)
#define LLL_LOCK_INITIALIZER_LOCKED (1) #define LLL_LOCK_INITIALIZER_LOCKED (1)
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
/* The states of a lock are: /* The states of a lock are:
0 - untaken 0 - untaken
1 - taken by one user 1 - taken by one user

View File

@ -126,3 +126,9 @@ extern int __local_multiple_threads attribute_hidden;
# define NO_CANCELLATION 1 # define NO_CANCELLATION 1
#endif #endif
#ifndef __ASSEMBLER__
# define RTLD_SINGLE_THREAD_P \
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
header.multiple_threads) == 0, 1)
#endif

View File

@ -20,6 +20,8 @@
#ifndef _BITS_PTHREADTYPES_H #ifndef _BITS_PTHREADTYPES_H
#define _BITS_PTHREADTYPES_H 1 #define _BITS_PTHREADTYPES_H 1
#include <endian.h>
#if _MIPS_SIM == _ABI64 #if _MIPS_SIM == _ABI64
# define __SIZEOF_PTHREAD_ATTR_T 56 # define __SIZEOF_PTHREAD_ATTR_T 56
# define __SIZEOF_PTHREAD_MUTEX_T 40 # define __SIZEOF_PTHREAD_MUTEX_T 40
@ -157,9 +159,9 @@ typedef union
unsigned int __nr_readers_queued; unsigned int __nr_readers_queued;
unsigned int __nr_writers_queued; unsigned int __nr_writers_queued;
int __writer; int __writer;
int __pad1; int __shared;
unsigned long int __pad1;
unsigned long int __pad2; unsigned long int __pad2;
unsigned long int __pad3;
/* FLAGS must stay at this position in the structure to maintain /* FLAGS must stay at this position in the structure to maintain
binary compatibility. */ binary compatibility. */
unsigned int __flags; unsigned int __flags;
@ -173,9 +175,21 @@ typedef union
unsigned int __writer_wakeup; unsigned int __writer_wakeup;
unsigned int __nr_readers_queued; unsigned int __nr_readers_queued;
unsigned int __nr_writers_queued; unsigned int __nr_writers_queued;
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned char __pad1;
unsigned char __pad2;
unsigned char __shared;
/* FLAGS must stay at this position in the structure to maintain /* FLAGS must stay at this position in the structure to maintain
binary compatibility. */ binary compatibility. */
unsigned int __flags; unsigned char __flags;
#else
/* FLAGS must stay at this position in the structure to maintain
binary compatibility. */
unsigned char __flags;
unsigned char __shared;
unsigned char __pad1;
unsigned char __pad2;
#endif
int __writer; int __writer;
} __data; } __data;
# endif # endif

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. /* Copyright (C) 2003, 2004, 2005, 2006, 2007 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
@ -35,6 +35,7 @@
#define FUTEX_LOCK_PI 6 #define FUTEX_LOCK_PI 6
#define FUTEX_UNLOCK_PI 7 #define FUTEX_UNLOCK_PI 7
#define FUTEX_TRYLOCK_PI 8 #define FUTEX_TRYLOCK_PI 8
#define FUTEX_PRIVATE_FLAG 128
/* Initializer for compatibility lock. */ /* Initializer for compatibility lock. */
#define LLL_MUTEX_LOCK_INITIALIZER (0) #define LLL_MUTEX_LOCK_INITIALIZER (0)
@ -234,8 +235,6 @@ typedef int lll_lock_t;
#define LLL_LOCK_INITIALIZER (0) #define LLL_LOCK_INITIALIZER (0)
#define LLL_LOCK_INITIALIZER_LOCKED (1) #define LLL_LOCK_INITIALIZER_LOCKED (1)
extern int lll_unlock_wake_cb (int *__futex) attribute_hidden;
/* The states of a lock are: /* The states of a lock are:
0 - untaken 0 - untaken
1 - taken by one user 1 - taken by one user