aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-02-22 12:10:26 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-05-14 08:44:03 -0300
commit959aff9fa22c45e0fa11cd88c9f8ea10bd9ba494 (patch)
treee5b227f07c74b644e8b2d71a9186b1f9ea79baab
parentd7e4c642ef13933361c276df87c52e83b2c212a2 (diff)
downloadglibc-959aff9fa22c45e0fa11cd88c9f8ea10bd9ba494.tar.gz
glibc-959aff9fa22c45e0fa11cd88c9f8ea10bd9ba494.tar.xz
glibc-959aff9fa22c45e0fa11cd88c9f8ea10bd9ba494.zip
Assume LLL_LOCK_INITIALIZER is 0
Since hppa is not an outlier anymore regarding LLL_LOCK_INITIALIZER value, we can now assume it 0 for all architectures. Checked on a build for all major ABIs. * nptl/nptl-init.c (__pthread_initialize_minimal_internal): Remove initialization for LLL_LOCK_INITIALIZER different than 0. * nptl/old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Assume LLL_LOCK_INITIALIZER being 0. * nptl/old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. * nptl/old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): Likewise. * nptl/old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. * sysdeps/nptl/libc-lockP.h (__libc_lock_define_initialized): Likewise.
-rw-r--r--ChangeLog10
-rw-r--r--nptl/nptl-init.c2
-rw-r--r--nptl/old_pthread_cond_broadcast.c9
-rw-r--r--nptl/old_pthread_cond_signal.c9
-rw-r--r--nptl/old_pthread_cond_timedwait.c9
-rw-r--r--nptl/old_pthread_cond_wait.c9
-rw-r--r--sysdeps/nptl/libc-lockP.h17
7 files changed, 13 insertions, 52 deletions
diff --git a/ChangeLog b/ChangeLog
index 6a26dad64f4..4cb846f476f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2019-05-14 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * nptl/nptl-init.c (__pthread_initialize_minimal_internal): Remove
+ initialization for LLL_LOCK_INITIALIZER different than 0.
+ * nptl/old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0):
+ Assume LLL_LOCK_INITIALIZER being 0.
+ * nptl/old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise.
+ * nptl/old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0):
+ Likewise.
+ * nptl/old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise.
+ * sysdeps/nptl/libc-lockP.h (__libc_lock_define_initialized): Likewise.
+
* nptl/lowlevellock.c (__lll_lock_wait, __lll_lock_wait_private):
Optimize futex call and add systemtap probe.
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index b845c6e45d1..2926558b912 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -265,8 +265,6 @@ __pthread_initialize_minimal_internal (void)
__pthread_initialize_pids (pd);
THREAD_SETMEM (pd, specific[0], &pd->specific_1stblock[0]);
THREAD_SETMEM (pd, user_stack, true);
- if (LLL_LOCK_INITIALIZER != 0)
- THREAD_SETMEM (pd, lock, LLL_LOCK_INITIALIZER);
/* Initialize the robust mutex data. */
{
diff --git a/nptl/old_pthread_cond_broadcast.c b/nptl/old_pthread_cond_broadcast.c
index f561eb941f6..04f285a1b1c 100644
--- a/nptl/old_pthread_cond_broadcast.c
+++ b/nptl/old_pthread_cond_broadcast.c
@@ -31,18 +31,9 @@ __pthread_cond_broadcast_2_0 (pthread_cond_2_0_t *cond)
{
pthread_cond_t *newcond;
-#if LLL_LOCK_INITIALIZER == 0
newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
if (newcond == NULL)
return ENOMEM;
-#else
- newcond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t));
- if (newcond == NULL)
- return ENOMEM;
-
- /* Initialize the condvar. */
- (void) pthread_cond_init (newcond, NULL);
-#endif
if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL))
/* Somebody else just initialized the condvar. */
diff --git a/nptl/old_pthread_cond_signal.c b/nptl/old_pthread_cond_signal.c
index a167c8addc1..9b67cb8a54d 100644
--- a/nptl/old_pthread_cond_signal.c
+++ b/nptl/old_pthread_cond_signal.c
@@ -31,18 +31,9 @@ __pthread_cond_signal_2_0 (pthread_cond_2_0_t *cond)
{
pthread_cond_t *newcond;
-#if LLL_LOCK_INITIALIZER == 0
newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
if (newcond == NULL)
return ENOMEM;
-#else
- newcond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t));
- if (newcond == NULL)
- return ENOMEM;
-
- /* Initialize the condvar. */
- (void) pthread_cond_init (newcond, NULL);
-#endif
if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL))
/* Somebody else just initialized the condvar. */
diff --git a/nptl/old_pthread_cond_timedwait.c b/nptl/old_pthread_cond_timedwait.c
index f920320b13c..a1fde858255 100644
--- a/nptl/old_pthread_cond_timedwait.c
+++ b/nptl/old_pthread_cond_timedwait.c
@@ -32,18 +32,9 @@ __pthread_cond_timedwait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex,
{
pthread_cond_t *newcond;
-#if LLL_LOCK_INITIALIZER == 0
newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
if (newcond == NULL)
return ENOMEM;
-#else
- newcond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t));
- if (newcond == NULL)
- return ENOMEM;
-
- /* Initialize the condvar. */
- (void) pthread_cond_init (newcond, NULL);
-#endif
if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL))
/* Somebody else just initialized the condvar. */
diff --git a/nptl/old_pthread_cond_wait.c b/nptl/old_pthread_cond_wait.c
index 2be41b36d6b..bb65340a172 100644
--- a/nptl/old_pthread_cond_wait.c
+++ b/nptl/old_pthread_cond_wait.c
@@ -31,18 +31,9 @@ __pthread_cond_wait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex)
{
pthread_cond_t *newcond;
-#if LLL_LOCK_INITIALIZER == 0
newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
if (newcond == NULL)
return ENOMEM;
-#else
- newcond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t));
- if (newcond == NULL)
- return ENOMEM;
-
- /* Initialize the condvar. */
- (void) pthread_cond_init (newcond, NULL);
-#endif
if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL))
/* Somebody else just initialized the condvar. */
diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
index fc1bfe57e50..07d583f11a1 100644
--- a/sysdeps/nptl/libc-lockP.h
+++ b/sysdeps/nptl/libc-lockP.h
@@ -71,23 +71,12 @@ typedef pthread_key_t __libc_key_t;
For the C library we take a deeper look at the initializer. For
this implementation all fields are initialized to zero. Therefore
we don't initialize the variable which allows putting it into the
- BSS section. (Except on PA-RISC and other odd architectures, where
- initialized locks must be set to one due to the lack of normal
- atomic operations.) */
+ BSS section. */
+_Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
#define _LIBC_LOCK_INITIALIZER LLL_LOCK_INITIALIZER
-#if IS_IN (libc) || IS_IN (libpthread)
-# if LLL_LOCK_INITIALIZER == 0
-# define __libc_lock_define_initialized(CLASS,NAME) \
- CLASS __libc_lock_t NAME;
-# else
-# define __libc_lock_define_initialized(CLASS,NAME) \
- CLASS __libc_lock_t NAME = LLL_LOCK_INITIALIZER;
-# endif
-#else
-# define __libc_lock_define_initialized(CLASS,NAME) \
+#define __libc_lock_define_initialized(CLASS,NAME) \
CLASS __libc_lock_t NAME;
-#endif
#define __libc_rwlock_define_initialized(CLASS,NAME) \
CLASS __libc_rwlock_t NAME = PTHREAD_RWLOCK_INITIALIZER;