diff mbox series

[1/7] nptl: Add tests for internal pthread_rwlock_t offsets

Message ID 20191106175001.12182-1-adhemerval.zanella@linaro.org
State New
Headers show
Series [1/7] nptl: Add tests for internal pthread_rwlock_t offsets | expand

Commit Message

Adhemerval Zanella Netto Nov. 6, 2019, 5:49 p.m. UTC
This patch new build tests to check for internal fields offsets for
internal pthread_rwlock_t definition.  Althoug the '__data.__flags'
field layout should be preserved due static initializators, the patch
also adds tests for the futexes that may be used in a shared memory
(although using different libc version in such scenario is not really
supported).

Checked with a build against all affected ABIs.
---
 nptl/pthread_rwlock_init.c                | 16 ++++++++++++++++
 sysdeps/aarch64/nptl/pthread-offsets.h    |  8 ++++++++
 sysdeps/alpha/nptl/pthread-offsets.h      |  8 ++++++++
 sysdeps/arm/nptl/pthread-offsets.h        | 13 +++++++++++++
 sysdeps/csky/nptl/pthread-offsets.h       |  8 ++++++++
 sysdeps/hppa/nptl/pthread-offsets.h       |  8 ++++++++
 sysdeps/i386/nptl/pthread-offsets.h       |  8 ++++++++
 sysdeps/ia64/nptl/pthread-offsets.h       |  8 ++++++++
 sysdeps/m68k/nptl/pthread-offsets.h       |  8 ++++++++
 sysdeps/microblaze/nptl/pthread-offsets.h | 13 +++++++++++++
 sysdeps/mips/nptl/pthread-offsets.h       | 23 +++++++++++++++++++++++
 sysdeps/nios2/nptl/pthread-offsets.h      |  8 ++++++++
 sysdeps/powerpc/nptl/pthread-offsets.h    | 18 ++++++++++++++++++
 sysdeps/riscv/nptl/pthread-offsets.h      |  8 ++++++++
 sysdeps/s390/nptl/pthread-offsets.h       | 18 ++++++++++++++++++
 sysdeps/sh/nptl/pthread-offsets.h         | 13 +++++++++++++
 sysdeps/sparc/nptl/pthread-offsets.h      | 18 ++++++++++++++++++
 sysdeps/x86_64/nptl/pthread-offsets.h     | 12 ++++++++++++
 18 files changed, 216 insertions(+)

-- 
2.17.1
diff mbox series

Patch

diff --git a/nptl/pthread_rwlock_init.c b/nptl/pthread_rwlock_init.c
index 04f0d40ed8..a485cb81be 100644
--- a/nptl/pthread_rwlock_init.c
+++ b/nptl/pthread_rwlock_init.c
@@ -18,6 +18,7 @@ 
 
 #include "pthreadP.h"
 #include <string.h>
+#include <pthread-offsets.h>
 
 
 static const struct pthread_rwlockattr default_rwlockattr =
@@ -34,6 +35,21 @@  __pthread_rwlock_init (pthread_rwlock_t *rwlock,
 {
   ASSERT_TYPE_SIZE (pthread_rwlock_t, __SIZEOF_PTHREAD_RWLOCK_T);
 
+  ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__readers,
+				  __PTHREAD_RWLOCK_READERS_OFFSET);
+  ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__writers,
+				  __PTHREAD_RWLOCK_WRITERS_OFFSET);
+  ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__wrphase_futex,
+				  __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET);
+  ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__writers_futex,
+				  __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET);
+  ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__cur_writer,
+				  __PTHREAD_RWLOCK_CUR_WRITER_OFFSET);
+  ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__shared,
+				  __PTHREAD_RWLOCK_SHARED_OFFSET);
+  ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__flags,
+				  __PTHREAD_RWLOCK_FLAGS_OFFSET);
+
   const struct pthread_rwlockattr *iattr;
 
   iattr = ((const struct pthread_rwlockattr *) attr) ?: &default_rwlockattr;
diff --git a/sysdeps/aarch64/nptl/pthread-offsets.h b/sysdeps/aarch64/nptl/pthread-offsets.h
index 16c6b0d9fd..679cec5de7 100644
--- a/sysdeps/aarch64/nptl/pthread-offsets.h
+++ b/sysdeps/aarch64/nptl/pthread-offsets.h
@@ -3,3 +3,11 @@ 
 #define __PTHREAD_MUTEX_SPINS_OFFSET    20
 #define __PTHREAD_MUTEX_ELISION_OFFSET  22
 #define __PTHREAD_MUTEX_LIST_OFFSET     24
+
+#define __PTHREAD_RWLOCK_READERS_OFFSET         0
+#define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+#define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+#define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+#define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     24
+#define __PTHREAD_RWLOCK_SHARED_OFFSET         28
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET          48
diff --git a/sysdeps/alpha/nptl/pthread-offsets.h b/sysdeps/alpha/nptl/pthread-offsets.h
index 16c6b0d9fd..679cec5de7 100644
--- a/sysdeps/alpha/nptl/pthread-offsets.h
+++ b/sysdeps/alpha/nptl/pthread-offsets.h
@@ -3,3 +3,11 @@ 
 #define __PTHREAD_MUTEX_SPINS_OFFSET    20
 #define __PTHREAD_MUTEX_ELISION_OFFSET  22
 #define __PTHREAD_MUTEX_LIST_OFFSET     24
+
+#define __PTHREAD_RWLOCK_READERS_OFFSET         0
+#define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+#define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+#define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+#define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     24
+#define __PTHREAD_RWLOCK_SHARED_OFFSET         28
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET          48
diff --git a/sysdeps/arm/nptl/pthread-offsets.h b/sysdeps/arm/nptl/pthread-offsets.h
index 9617354dc7..cc2a939222 100644
--- a/sysdeps/arm/nptl/pthread-offsets.h
+++ b/sysdeps/arm/nptl/pthread-offsets.h
@@ -3,3 +3,16 @@ 
 #define __PTHREAD_MUTEX_SPINS_OFFSET    20
 #define __PTHREAD_MUTEX_ELISION_OFFSET  22
 #define __PTHREAD_MUTEX_LIST_OFFSET     20
+
+#define __PTHREAD_RWLOCK_READERS_OFFSET         0
+#define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+#define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+#define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+#define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     28
+#if __BYTE_ORDER == __BIG_ENDIAN
+# define __PTHREAD_RWLOCK_SHARED_OFFSET        26
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET         27
+#else
+# define __PTHREAD_RWLOCK_SHARED_OFFSET        25
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET         24
+#endif
diff --git a/sysdeps/csky/nptl/pthread-offsets.h b/sysdeps/csky/nptl/pthread-offsets.h
index 9617354dc7..a0eea7a6d3 100644
--- a/sysdeps/csky/nptl/pthread-offsets.h
+++ b/sysdeps/csky/nptl/pthread-offsets.h
@@ -3,3 +3,11 @@ 
 #define __PTHREAD_MUTEX_SPINS_OFFSET    20
 #define __PTHREAD_MUTEX_ELISION_OFFSET  22
 #define __PTHREAD_MUTEX_LIST_OFFSET     20
+
+#define __PTHREAD_RWLOCK_READERS_OFFSET         0
+#define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+#define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+#define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+#define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     28
+#define __PTHREAD_RWLOCK_SHARED_OFFSET         25
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET          24
diff --git a/sysdeps/hppa/nptl/pthread-offsets.h b/sysdeps/hppa/nptl/pthread-offsets.h
index 8ae01b9d95..f5d5b9e5f6 100644
--- a/sysdeps/hppa/nptl/pthread-offsets.h
+++ b/sysdeps/hppa/nptl/pthread-offsets.h
@@ -3,3 +3,11 @@ 
 #define __PTHREAD_MUTEX_SPINS_OFFSET    36
 #define __PTHREAD_MUTEX_ELISION_OFFSET  22
 #define __PTHREAD_MUTEX_LIST_OFFSET     36
+
+#define __PTHREAD_RWLOCK_READERS_OFFSET        16
+#define __PTHREAD_RWLOCK_WRITERS_OFFSET        20
+#define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET  24
+#define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  28
+#define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     40
+#define __PTHREAD_RWLOCK_SHARED_OFFSET         50
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET          51
diff --git a/sysdeps/i386/nptl/pthread-offsets.h b/sysdeps/i386/nptl/pthread-offsets.h
index 9617354dc7..a0eea7a6d3 100644
--- a/sysdeps/i386/nptl/pthread-offsets.h
+++ b/sysdeps/i386/nptl/pthread-offsets.h
@@ -3,3 +3,11 @@ 
 #define __PTHREAD_MUTEX_SPINS_OFFSET    20
 #define __PTHREAD_MUTEX_ELISION_OFFSET  22
 #define __PTHREAD_MUTEX_LIST_OFFSET     20
+
+#define __PTHREAD_RWLOCK_READERS_OFFSET         0
+#define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+#define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+#define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+#define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     28
+#define __PTHREAD_RWLOCK_SHARED_OFFSET         25
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET          24
diff --git a/sysdeps/ia64/nptl/pthread-offsets.h b/sysdeps/ia64/nptl/pthread-offsets.h
index 16c6b0d9fd..679cec5de7 100644
--- a/sysdeps/ia64/nptl/pthread-offsets.h
+++ b/sysdeps/ia64/nptl/pthread-offsets.h
@@ -3,3 +3,11 @@ 
 #define __PTHREAD_MUTEX_SPINS_OFFSET    20
 #define __PTHREAD_MUTEX_ELISION_OFFSET  22
 #define __PTHREAD_MUTEX_LIST_OFFSET     24
+
+#define __PTHREAD_RWLOCK_READERS_OFFSET         0
+#define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+#define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+#define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+#define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     24
+#define __PTHREAD_RWLOCK_SHARED_OFFSET         28
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET          48
diff --git a/sysdeps/m68k/nptl/pthread-offsets.h b/sysdeps/m68k/nptl/pthread-offsets.h
index 9617354dc7..14d66ace9b 100644
--- a/sysdeps/m68k/nptl/pthread-offsets.h
+++ b/sysdeps/m68k/nptl/pthread-offsets.h
@@ -3,3 +3,11 @@ 
 #define __PTHREAD_MUTEX_SPINS_OFFSET    20
 #define __PTHREAD_MUTEX_ELISION_OFFSET  22
 #define __PTHREAD_MUTEX_LIST_OFFSET     20
+
+#define __PTHREAD_RWLOCK_READERS_OFFSET         0
+#define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+#define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+#define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+#define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     28
+#define __PTHREAD_RWLOCK_SHARED_OFFSET         26
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET          27
diff --git a/sysdeps/microblaze/nptl/pthread-offsets.h b/sysdeps/microblaze/nptl/pthread-offsets.h
index 9617354dc7..cc2a939222 100644
--- a/sysdeps/microblaze/nptl/pthread-offsets.h
+++ b/sysdeps/microblaze/nptl/pthread-offsets.h
@@ -3,3 +3,16 @@ 
 #define __PTHREAD_MUTEX_SPINS_OFFSET    20
 #define __PTHREAD_MUTEX_ELISION_OFFSET  22
 #define __PTHREAD_MUTEX_LIST_OFFSET     20
+
+#define __PTHREAD_RWLOCK_READERS_OFFSET         0
+#define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+#define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+#define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+#define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     28
+#if __BYTE_ORDER == __BIG_ENDIAN
+# define __PTHREAD_RWLOCK_SHARED_OFFSET        26
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET         27
+#else
+# define __PTHREAD_RWLOCK_SHARED_OFFSET        25
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET         24
+#endif
diff --git a/sysdeps/mips/nptl/pthread-offsets.h b/sysdeps/mips/nptl/pthread-offsets.h
index 0ac3eda3fb..cf96b8868e 100644
--- a/sysdeps/mips/nptl/pthread-offsets.h
+++ b/sysdeps/mips/nptl/pthread-offsets.h
@@ -11,3 +11,26 @@ 
 # define __PTHREAD_MUTEX_ELISION_OFFSET  22
 # define __PTHREAD_MUTEX_LIST_OFFSET     20
 #endif
+
+#if _MIPS_SIM == _ABI64
+# define __PTHREAD_RWLOCK_READERS_OFFSET         0
+# define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+# define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+# define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+# define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     24
+# define __PTHREAD_RWLOCK_SHARED_OFFSET         28
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET          48
+#else
+# define __PTHREAD_RWLOCK_READERS_OFFSET         0
+# define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+# define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+# define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+# define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     28
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define __PTHREAD_RWLOCK_SHARED_OFFSET        26
+#  define __PTHREAD_RWLOCK_FLAGS_OFFSET         27
+# else
+#  define __PTHREAD_RWLOCK_SHARED_OFFSET        25
+#  define __PTHREAD_RWLOCK_FLAGS_OFFSET         24
+# endif
+#endif
diff --git a/sysdeps/nios2/nptl/pthread-offsets.h b/sysdeps/nios2/nptl/pthread-offsets.h
index 9617354dc7..a0eea7a6d3 100644
--- a/sysdeps/nios2/nptl/pthread-offsets.h
+++ b/sysdeps/nios2/nptl/pthread-offsets.h
@@ -3,3 +3,11 @@ 
 #define __PTHREAD_MUTEX_SPINS_OFFSET    20
 #define __PTHREAD_MUTEX_ELISION_OFFSET  22
 #define __PTHREAD_MUTEX_LIST_OFFSET     20
+
+#define __PTHREAD_RWLOCK_READERS_OFFSET         0
+#define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+#define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+#define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+#define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     28
+#define __PTHREAD_RWLOCK_SHARED_OFFSET         25
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET          24
diff --git a/sysdeps/powerpc/nptl/pthread-offsets.h b/sysdeps/powerpc/nptl/pthread-offsets.h
index bdda1f197e..a9ce40d97f 100644
--- a/sysdeps/powerpc/nptl/pthread-offsets.h
+++ b/sysdeps/powerpc/nptl/pthread-offsets.h
@@ -13,3 +13,21 @@ 
 # define __PTHREAD_MUTEX_ELISION_OFFSET  22
 # define __PTHREAD_MUTEX_LIST_OFFSET     20
 #endif
+
+#if __WORDSIZE == 64
+# define __PTHREAD_RWLOCK_READERS_OFFSET         0
+# define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+# define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+# define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+# define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     24
+# define __PTHREAD_RWLOCK_SHARED_OFFSET         28
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET          48
+#else
+# define __PTHREAD_RWLOCK_READERS_OFFSET         0
+# define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+# define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+# define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+# define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     28
+# define __PTHREAD_RWLOCK_SHARED_OFFSET         26
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET          27
+#endif
diff --git a/sysdeps/riscv/nptl/pthread-offsets.h b/sysdeps/riscv/nptl/pthread-offsets.h
index f1640047a0..f93af00cfc 100644
--- a/sysdeps/riscv/nptl/pthread-offsets.h
+++ b/sysdeps/riscv/nptl/pthread-offsets.h
@@ -22,3 +22,11 @@ 
 #define __PTHREAD_MUTEX_SPINS_OFFSET    20
 #define __PTHREAD_MUTEX_ELISION_OFFSET  22
 #define __PTHREAD_MUTEX_LIST_OFFSET     24
+
+#define __PTHREAD_RWLOCK_READERS_OFFSET         0
+#define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+#define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+#define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+#define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     24
+#define __PTHREAD_RWLOCK_SHARED_OFFSET         28
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET          48
diff --git a/sysdeps/s390/nptl/pthread-offsets.h b/sysdeps/s390/nptl/pthread-offsets.h
index bdda1f197e..a9ce40d97f 100644
--- a/sysdeps/s390/nptl/pthread-offsets.h
+++ b/sysdeps/s390/nptl/pthread-offsets.h
@@ -13,3 +13,21 @@ 
 # define __PTHREAD_MUTEX_ELISION_OFFSET  22
 # define __PTHREAD_MUTEX_LIST_OFFSET     20
 #endif
+
+#if __WORDSIZE == 64
+# define __PTHREAD_RWLOCK_READERS_OFFSET         0
+# define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+# define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+# define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+# define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     24
+# define __PTHREAD_RWLOCK_SHARED_OFFSET         28
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET          48
+#else
+# define __PTHREAD_RWLOCK_READERS_OFFSET         0
+# define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+# define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+# define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+# define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     28
+# define __PTHREAD_RWLOCK_SHARED_OFFSET         26
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET          27
+#endif
diff --git a/sysdeps/sh/nptl/pthread-offsets.h b/sysdeps/sh/nptl/pthread-offsets.h
index 9617354dc7..cc2a939222 100644
--- a/sysdeps/sh/nptl/pthread-offsets.h
+++ b/sysdeps/sh/nptl/pthread-offsets.h
@@ -3,3 +3,16 @@ 
 #define __PTHREAD_MUTEX_SPINS_OFFSET    20
 #define __PTHREAD_MUTEX_ELISION_OFFSET  22
 #define __PTHREAD_MUTEX_LIST_OFFSET     20
+
+#define __PTHREAD_RWLOCK_READERS_OFFSET         0
+#define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+#define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+#define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+#define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     28
+#if __BYTE_ORDER == __BIG_ENDIAN
+# define __PTHREAD_RWLOCK_SHARED_OFFSET        26
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET         27
+#else
+# define __PTHREAD_RWLOCK_SHARED_OFFSET        25
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET         24
+#endif
diff --git a/sysdeps/sparc/nptl/pthread-offsets.h b/sysdeps/sparc/nptl/pthread-offsets.h
index bdda1f197e..a9ce40d97f 100644
--- a/sysdeps/sparc/nptl/pthread-offsets.h
+++ b/sysdeps/sparc/nptl/pthread-offsets.h
@@ -13,3 +13,21 @@ 
 # define __PTHREAD_MUTEX_ELISION_OFFSET  22
 # define __PTHREAD_MUTEX_LIST_OFFSET     20
 #endif
+
+#if __WORDSIZE == 64
+# define __PTHREAD_RWLOCK_READERS_OFFSET         0
+# define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+# define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+# define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+# define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     24
+# define __PTHREAD_RWLOCK_SHARED_OFFSET         28
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET          48
+#else
+# define __PTHREAD_RWLOCK_READERS_OFFSET         0
+# define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+# define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+# define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+# define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     28
+# define __PTHREAD_RWLOCK_SHARED_OFFSET         26
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET          27
+#endif
diff --git a/sysdeps/x86_64/nptl/pthread-offsets.h b/sysdeps/x86_64/nptl/pthread-offsets.h
index 16c6b0d9fd..5c0cab0eda 100644
--- a/sysdeps/x86_64/nptl/pthread-offsets.h
+++ b/sysdeps/x86_64/nptl/pthread-offsets.h
@@ -3,3 +3,15 @@ 
 #define __PTHREAD_MUTEX_SPINS_OFFSET    20
 #define __PTHREAD_MUTEX_ELISION_OFFSET  22
 #define __PTHREAD_MUTEX_LIST_OFFSET     24
+
+#define __PTHREAD_RWLOCK_READERS_OFFSET         0
+#define __PTHREAD_RWLOCK_WRITERS_OFFSET         4
+#define __PTHREAD_RWLOCK_WRPHASE_FUTEX_OFFSET   8
+#define __PTHREAD_RWLOCK_WRITERS_FUTEX_OFFSET  12
+#define __PTHREAD_RWLOCK_CUR_WRITER_OFFSET     24
+#define __PTHREAD_RWLOCK_SHARED_OFFSET         28
+#ifdef  __ILP32__
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET         40
+#else
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET         48
+#endif