Use uint64_t and (uint64_t) 1 for 64-bit int
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 23 Jan 2015 22:48:40 +0000 (14:48 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 23 Jan 2015 22:48:40 +0000 (14:48 -0800)
This patch replaces unsigned long int and 1UL with uint64_t and
(uint64_t) 1 to support ILP32 targets like x32.

[BZ #17870]
* nptl/sem_post.c (__new_sem_post): Replace unsigned long int
with uint64_t.
* nptl/sem_waitcommon.c (__sem_wait_cleanup): Replace 1UL with
(uint64_t) 1.
(__new_sem_wait_slow): Replace unsigned long int with uint64_t.
Replace 1UL with (uint64_t) 1.
* sysdeps/nptl/internaltypes.h (new_sem): Replace unsigned long
int with uint64_t.

ChangeLog
NEWS
nptl/sem_post.c
nptl/sem_waitcommon.c
sysdeps/nptl/internaltypes.h

index 051a7c4c56948520a55afc3d1ccf6f5bea4daa7e..a59266f77183a271608d41d40ac480c10c273490 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2015-01-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       [BZ #17870]
+       * nptl/sem_post.c (__new_sem_post): Replace unsigned long int
+       with uint64_t.
+       * nptl/sem_waitcommon.c (__sem_wait_cleanup): Replace 1UL with
+       (uint64_t) 1.
+       (__new_sem_wait_slow): Replace unsigned long int with uint64_t.
+       Replace 1UL with (uint64_t) 1.
+       * sysdeps/nptl/internaltypes.h (new_sem): Replace unsigned long
+       int with uint64_t.
+
 2015-01-23  Roland McGrath  <roland@hack.frob.com>
 
        * inet/if_index.c (if_nameindex): Add missing libc_hidden_weak.
diff --git a/NEWS b/NEWS
index fd6da90595e6ec261f5da01ee056da30be160181..0ce43521eaec6832601c5eac8d6451c2c6751d78 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -18,7 +18,7 @@ Version 2.21
   17664, 17665, 17668, 17682, 17702, 17717, 17719, 17722, 17723, 17724,
   17725, 17732, 17733, 17744, 17745, 17746, 17747, 17748, 17775, 17777,
   17780, 17781, 17782, 17791, 17793, 17796, 17797, 17803, 17806, 17834,
-  17844, 17848
+  17844, 17848, 17870
 
 * A new semaphore algorithm has been implemented in generic C code for all
   machines. Previous custom assembly implementations of semaphore were
index 9162e4c8a66bb0d94a25037a033b5e28137f638e..6e495ed8104ef7b30b1e53772ff888b7ecf8b7c8 100644 (file)
@@ -65,7 +65,7 @@ __new_sem_post (sem_t *sem)
      added tokens before (the release sequence includes atomic RMW operations
      by other threads).  */
   /* TODO Use atomic_fetch_add to make it scale better than a CAS loop?  */
-  unsigned long int d = atomic_load_relaxed (&isem->data);
+  uint64_t d = atomic_load_relaxed (&isem->data);
   do
     {
       if ((d & SEM_VALUE_MASK) == SEM_VALUE_MAX)
index 96848d7ac5b6f8f1f3099b422deacc09323c796a..c60daa386536b4b8b34959857d61ff567ec2fc89 100644 (file)
@@ -187,7 +187,7 @@ __sem_wait_cleanup (void *arg)
 
 #if __HAVE_64B_ATOMICS
   /* Stop being registered as a waiter.  See below for MO.  */
-  atomic_fetch_add_relaxed (&sem->data, -(1UL << SEM_NWAITERS_SHIFT));
+  atomic_fetch_add_relaxed (&sem->data, -((uint64_t) 1 << SEM_NWAITERS_SHIFT));
 #else
   __sem_wait_32_finish (sem);
 #endif
@@ -263,8 +263,8 @@ __new_sem_wait_slow (struct new_sem *sem, const struct timespec *abstime)
 #if __HAVE_64B_ATOMICS
   /* Add a waiter.  Relaxed MO is sufficient because we can rely on the
      ordering provided by the RMW operations we use.  */
-  unsigned long d = atomic_fetch_add_relaxed (&sem->data,
-      1UL << SEM_NWAITERS_SHIFT);
+  uint64_t d = atomic_fetch_add_relaxed (&sem->data,
+      (uint64_t) 1 << SEM_NWAITERS_SHIFT);
 
   pthread_cleanup_push (__sem_wait_cleanup, sem);
 
@@ -304,7 +304,7 @@ __new_sem_wait_slow (struct new_sem *sem, const struct timespec *abstime)
              err = -1;
              /* Stop being registered as a waiter.  */
              atomic_fetch_add_relaxed (&sem->data,
-                 -(1UL << SEM_NWAITERS_SHIFT));
+                 -((uint64_t) 1 << SEM_NWAITERS_SHIFT));
              break;
            }
          /* Relaxed MO is sufficient; see below.  */
@@ -320,7 +320,7 @@ __new_sem_wait_slow (struct new_sem *sem, const struct timespec *abstime)
             up-to-date value; the futex_wait or the CAS perform the real
             work.  */
          if (atomic_compare_exchange_weak_acquire (&sem->data,
-             &d, d - 1 - (1UL << SEM_NWAITERS_SHIFT)))
+             &d, d - 1 - ((uint64_t) 1 << SEM_NWAITERS_SHIFT)))
            {
              err = 0;
              break;
index 7c0d2402a3a68eec0b9849e4b6b52287f65d3f54..8f5cfa4af6d2a3354c07a2b3d6fd38977dac7ef0 100644 (file)
@@ -155,7 +155,7 @@ struct new_sem
 # endif
 # define SEM_NWAITERS_SHIFT 32
 # define SEM_VALUE_MASK (~(unsigned int)0)
-  unsigned long int data;
+  uint64_t data;
   int private;
   int pad;
 #else