unofficial mirror of libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [review] nptl: Add tests for internal pthread_rwlock_t offsets
@ 2019-11-07 14:24 Adhemerval Zanella (Code Review)
  2019-11-07 16:08 ` Florian Weimer (Code Review)
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Adhemerval Zanella (Code Review) @ 2019-11-07 14:24 UTC (permalink / raw)
  To: libc-alpha

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516
......................................................................

nptl: Add tests for internal pthread_rwlock_t offsets

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.

Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148
---
M nptl/pthread_rwlock_init.c
M sysdeps/aarch64/nptl/pthread-offsets.h
M sysdeps/alpha/nptl/pthread-offsets.h
M sysdeps/arm/nptl/pthread-offsets.h
M sysdeps/csky/nptl/pthread-offsets.h
M sysdeps/hppa/nptl/pthread-offsets.h
M sysdeps/i386/nptl/pthread-offsets.h
M sysdeps/ia64/nptl/pthread-offsets.h
M sysdeps/m68k/nptl/pthread-offsets.h
M sysdeps/microblaze/nptl/pthread-offsets.h
M sysdeps/mips/nptl/pthread-offsets.h
M sysdeps/nios2/nptl/pthread-offsets.h
M sysdeps/powerpc/nptl/pthread-offsets.h
M sysdeps/riscv/nptl/pthread-offsets.h
M sysdeps/s390/nptl/pthread-offsets.h
M sysdeps/sh/nptl/pthread-offsets.h
M sysdeps/sparc/nptl/pthread-offsets.h
M sysdeps/x86_64/nptl/pthread-offsets.h
18 files changed, 216 insertions(+), 0 deletions(-)



diff --git a/nptl/pthread_rwlock_init.c b/nptl/pthread_rwlock_init.c
index 04f0d40..a485cb8 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 @@
 {
   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 16c6b0d..679cec5 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 16c6b0d..679cec5 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 9617354..cc2a939 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 9617354..a0eea7a 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 8ae01b9..f5d5b9e 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 9617354..a0eea7a 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 16c6b0d..679cec5 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 9617354..14d66ac 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 9617354..cc2a939 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 0ac3eda..cf96b88 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 9617354..a0eea7a 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 bdda1f1..a9ce40d 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 f164004..f93af00 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 bdda1f1..a9ce40d 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 9617354..cc2a939 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 bdda1f1..a9ce40d 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 16c6b0d..5c0cab0 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

-- 
Gerrit-Project: glibc
Gerrit-Branch: master
Gerrit-Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148
Gerrit-Change-Number: 516
Gerrit-PatchSet: 1
Gerrit-Owner: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-MessageType: newchange

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [review] nptl: Add tests for internal pthread_rwlock_t offsets
  2019-11-07 14:24 [review] nptl: Add tests for internal pthread_rwlock_t offsets Adhemerval Zanella (Code Review)
@ 2019-11-07 16:08 ` Florian Weimer (Code Review)
  2019-11-07 16:55 ` Adhemerval Zanella (Code Review)
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Florian Weimer (Code Review) @ 2019-11-07 16:08 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha; +Cc: Florian Weimer

Florian Weimer has posted comments on this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516
......................................................................


Patch Set 1: Code-Review+1

(3 comments)

Still need to run build-many-glibcs.py against this patch.

https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516/1//COMMIT_MSG 
Commit Message:

https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516/1//COMMIT_MSG@16 
PS1, Line 16: 
11 | field layout should be preserved due static initializators, the patch
12 | also adds tests for the futexes that may be used in a shared memory
13 | (although using different libc version in such scenario is not really
14 | supported).
15 | 
16 > Checked with a build against all affected ABIs.
17 | 
18 | Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148

Did you build the tests too?


https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516/1/nptl/pthread_rwlock_init.c 
File nptl/pthread_rwlock_init.c:

https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516/1/nptl/pthread_rwlock_init.c@51 
PS1, Line 51: 
33 | __pthread_rwlock_init (pthread_rwlock_t *rwlock,
   | ...
46 |   ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__cur_writer,
47 | 				  __PTHREAD_RWLOCK_CUR_WRITER_OFFSET);
48 |   ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__shared,
49 | 				  __PTHREAD_RWLOCK_SHARED_OFFSET);
50 |   ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__flags,
51 > 				  __PTHREAD_RWLOCK_FLAGS_OFFSET);
52 | 
53 |   const struct pthread_rwlockattr *iattr;
54 | 
55 |   iattr = ((const struct pthread_rwlockattr *) attr) ?: &default_rwlockattr;
56 | 

Do we really need to assert on all those implementation details? Or is covering __flags enough? I think from an ABI perspective, only the position of the non-zero bits in __flags matters.

If you want to leave in all the asserts, I'd suggest to single out __flags with a comment.


https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516/1/sysdeps/mips/nptl/pthread-offsets.h 
File sysdeps/mips/nptl/pthread-offsets.h:

https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516/1/sysdeps/mips/nptl/pthread-offsets.h@36 
PS1, Line 36: 
31 | #  define __PTHREAD_RWLOCK_FLAGS_OFFSET         27
32 | # else
33 | #  define __PTHREAD_RWLOCK_SHARED_OFFSET        25
34 | #  define __PTHREAD_RWLOCK_FLAGS_OFFSET         24
35 | # endif
36 > #endif

I wonder if that should be handled with sysdeps overrides instead of conditionals?

I kind of like the conditionals because they better highlight commonalities, though.



-- 
Gerrit-Project: glibc
Gerrit-Branch: master
Gerrit-Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148
Gerrit-Change-Number: 516
Gerrit-PatchSet: 1
Gerrit-Owner: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Florian Weimer <fweimer@redhat.com>
Gerrit-Comment-Date: Thu, 07 Nov 2019 16:08:14 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [review] nptl: Add tests for internal pthread_rwlock_t offsets
  2019-11-07 14:24 [review] nptl: Add tests for internal pthread_rwlock_t offsets Adhemerval Zanella (Code Review)
  2019-11-07 16:08 ` Florian Weimer (Code Review)
@ 2019-11-07 16:55 ` Adhemerval Zanella (Code Review)
  2019-11-07 17:06 ` Adhemerval Zanella (Code Review)
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Adhemerval Zanella (Code Review) @ 2019-11-07 16:55 UTC (permalink / raw)
  To: libc-alpha; +Cc: Florian Weimer

Adhemerval Zanella has posted comments on this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516
......................................................................


Patch Set 1:

> Patch Set 1: Code-Review+1
> 
> (3 comments)
> 
> Still need to run build-many-glibcs.py against this patch.

Yes I ran build-many-glibcs.py, although with a subset that aims to cover all the affected ABIs (aarch64-linux-gnu alpha-linux-gnu armeb-linux-gnueabihf arm-linux-gnueabihf csky-linux-gnuabiv2 hppa-linux-gnu i686-gnu i686-linux-gnu ia64-linux-gnu m68k-linux-gnu m68k-linux-gnu-coldfire microblazeel-linux-gnu microblaze-linux-gnu mips64-linux-gnu mips64-n32-linux-gnu mips-linux-gnu mips-linux-gnu-soft nios2-linux-gnu powerpc64le-linux-gnu powerpc64-linux-gnu powerpc-linux-gnu powerpc-linux-gnu-power4 riscv64-linux-gnu-rv64imafdc-lp64d s390-linux-gnu s390x-linux-gnu sh4eb-linux-gnu sh4-linux-gnu sparc64-linux-gnu sparcv9-linux-gnu x86_64-linux-gnu x86_64-linux-gnu-x32).


-- 
Gerrit-Project: glibc
Gerrit-Branch: master
Gerrit-Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148
Gerrit-Change-Number: 516
Gerrit-PatchSet: 1
Gerrit-Owner: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Florian Weimer <fweimer@redhat.com>
Gerrit-Comment-Date: Thu, 07 Nov 2019 16:55:07 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: No
Gerrit-MessageType: comment

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [review] nptl: Add tests for internal pthread_rwlock_t offsets
  2019-11-07 14:24 [review] nptl: Add tests for internal pthread_rwlock_t offsets Adhemerval Zanella (Code Review)
  2019-11-07 16:08 ` Florian Weimer (Code Review)
  2019-11-07 16:55 ` Adhemerval Zanella (Code Review)
@ 2019-11-07 17:06 ` Adhemerval Zanella (Code Review)
  2019-11-07 22:04 ` Florian Weimer (Code Review)
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Adhemerval Zanella (Code Review) @ 2019-11-07 17:06 UTC (permalink / raw)
  To: libc-alpha; +Cc: Florian Weimer

Adhemerval Zanella has posted comments on this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516
......................................................................


Patch Set 1:

(3 comments)

https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516/1//COMMIT_MSG 
Commit Message:

https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516/1//COMMIT_MSG@16 
PS1, Line 16: 
11 | field layout should be preserved due static initializators, the patch
12 | also adds tests for the futexes that may be used in a shared memory
13 | (although using different libc version in such scenario is not really
14 | supported).
15 | 
16 > Checked with a build against all affected ABIs.
17 | 
18 | Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148

> Did you build the tests too?

Done


https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516/1/nptl/pthread_rwlock_init.c 
File nptl/pthread_rwlock_init.c:

https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516/1/nptl/pthread_rwlock_init.c@51 
PS1, Line 51: 
33 | __pthread_rwlock_init (pthread_rwlock_t *rwlock,
   | ...
46 |   ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__cur_writer,
47 | 				  __PTHREAD_RWLOCK_CUR_WRITER_OFFSET);
48 |   ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__shared,
49 | 				  __PTHREAD_RWLOCK_SHARED_OFFSET);
50 |   ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__flags,
51 > 				  __PTHREAD_RWLOCK_FLAGS_OFFSET);
52 | 
53 |   const struct pthread_rwlockattr *iattr;
54 | 
55 |   iattr = ((const struct pthread_rwlockattr *) attr) ?: &default_rwlockattr;
56 | 

> Do we really need to assert on all those implementation details? Or is covering __flags enough? I th […]

The __flags cover the static initializers, which is what really defines the ABI.  The other members might be used along with a shared memory (PTHREAD_PROCESS_SHARED), but I don't think we support using shared pthread objects across different glibc versions.

I have added all the fields to certify the subsequent code refactoring (that add rwlock-internal.h) do not change the current internal layout.

I will add a comment stating that ABI-wise only __flags should be checked, the other fields are an implementation detail that can be changed over the releases.


https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516/1/sysdeps/mips/nptl/pthread-offsets.h 
File sysdeps/mips/nptl/pthread-offsets.h:

https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516/1/sysdeps/mips/nptl/pthread-offsets.h@36 
PS1, Line 36: 
31 | #  define __PTHREAD_RWLOCK_FLAGS_OFFSET         27
32 | # else
33 | #  define __PTHREAD_RWLOCK_SHARED_OFFSET        25
34 | #  define __PTHREAD_RWLOCK_FLAGS_OFFSET         24
35 | # endif
36 > #endif

> I wonder if that should be handled with sysdeps overrides instead of conditionals? […]

I don't have a strong opinion here.



-- 
Gerrit-Project: glibc
Gerrit-Branch: master
Gerrit-Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148
Gerrit-Change-Number: 516
Gerrit-PatchSet: 1
Gerrit-Owner: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Florian Weimer <fweimer@redhat.com>
Gerrit-Comment-Date: Thu, 07 Nov 2019 17:06:36 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Florian Weimer <fweimer@redhat.com>
Gerrit-MessageType: comment

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [review] nptl: Add tests for internal pthread_rwlock_t offsets
  2019-11-07 14:24 [review] nptl: Add tests for internal pthread_rwlock_t offsets Adhemerval Zanella (Code Review)
                   ` (2 preceding siblings ...)
  2019-11-07 17:06 ` Adhemerval Zanella (Code Review)
@ 2019-11-07 22:04 ` Florian Weimer (Code Review)
  2019-11-08 19:43 ` [review v2] " Adhemerval Zanella (Code Review)
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Florian Weimer (Code Review) @ 2019-11-07 22:04 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha; +Cc: Florian Weimer

Florian Weimer has posted comments on this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516
......................................................................


Patch Set 1: Code-Review+2

My independent testing show that the computed offsets are okay.


-- 
Gerrit-Project: glibc
Gerrit-Branch: master
Gerrit-Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148
Gerrit-Change-Number: 516
Gerrit-PatchSet: 1
Gerrit-Owner: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Florian Weimer <fweimer@redhat.com>
Gerrit-Comment-Date: Thu, 07 Nov 2019 22:04:11 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [review v2] nptl: Add tests for internal pthread_rwlock_t offsets
  2019-11-07 14:24 [review] nptl: Add tests for internal pthread_rwlock_t offsets Adhemerval Zanella (Code Review)
                   ` (3 preceding siblings ...)
  2019-11-07 22:04 ` Florian Weimer (Code Review)
@ 2019-11-08 19:43 ` Adhemerval Zanella (Code Review)
  2019-11-14 14:35 ` Florian Weimer (Code Review)
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Adhemerval Zanella (Code Review) @ 2019-11-08 19:43 UTC (permalink / raw)
  To: Florian Weimer, libc-alpha

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516
......................................................................

nptl: Add tests for internal pthread_rwlock_t offsets

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.

Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148
---
M nptl/pthread_rwlock_init.c
M sysdeps/aarch64/nptl/pthread-offsets.h
M sysdeps/alpha/nptl/pthread-offsets.h
M sysdeps/arm/nptl/pthread-offsets.h
M sysdeps/csky/nptl/pthread-offsets.h
M sysdeps/hppa/nptl/pthread-offsets.h
M sysdeps/i386/nptl/pthread-offsets.h
M sysdeps/ia64/nptl/pthread-offsets.h
M sysdeps/m68k/nptl/pthread-offsets.h
M sysdeps/microblaze/nptl/pthread-offsets.h
M sysdeps/mips/nptl/pthread-offsets.h
M sysdeps/nios2/nptl/pthread-offsets.h
M sysdeps/powerpc/nptl/pthread-offsets.h
M sysdeps/riscv/nptl/pthread-offsets.h
M sysdeps/s390/nptl/pthread-offsets.h
M sysdeps/sh/nptl/pthread-offsets.h
M sysdeps/sparc/nptl/pthread-offsets.h
M sysdeps/x86_64/nptl/pthread-offsets.h
18 files changed, 78 insertions(+), 0 deletions(-)



diff --git a/nptl/pthread_rwlock_init.c b/nptl/pthread_rwlock_init.c
index 04f0d40..8813e32 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,13 @@
 {
   ASSERT_TYPE_SIZE (pthread_rwlock_t, __SIZEOF_PTHREAD_RWLOCK_T);
 
+  /* The __flags is the only field where its offset should be checked to
+     avoid ABI breakage with static initializers.  */
+  ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__flags,
+				  __PTHREAD_RWLOCK_FLAGS_OFFSET);
+  ASSERT_PTHREAD_INTERNAL_MEMBER_SIZE (pthread_rwlock_t, __data.__flags,
+				       int);
+
   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 8208f6f..7fe06e0 100644
--- a/sysdeps/aarch64/nptl/pthread-offsets.h
+++ b/sysdeps/aarch64/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
diff --git a/sysdeps/alpha/nptl/pthread-offsets.h b/sysdeps/alpha/nptl/pthread-offsets.h
index 8208f6f..7fe06e0 100644
--- a/sysdeps/alpha/nptl/pthread-offsets.h
+++ b/sysdeps/alpha/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
diff --git a/sysdeps/arm/nptl/pthread-offsets.h b/sysdeps/arm/nptl/pthread-offsets.h
index e4e775d..e9accba 100644
--- a/sysdeps/arm/nptl/pthread-offsets.h
+++ b/sysdeps/arm/nptl/pthread-offsets.h
@@ -1 +1,7 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  27
+#else
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  24
+#endif
diff --git a/sysdeps/csky/nptl/pthread-offsets.h b/sysdeps/csky/nptl/pthread-offsets.h
index e4e775d..7940d1f 100644
--- a/sysdeps/csky/nptl/pthread-offsets.h
+++ b/sysdeps/csky/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   24
diff --git a/sysdeps/hppa/nptl/pthread-offsets.h b/sysdeps/hppa/nptl/pthread-offsets.h
index e4e775d..1c11eff 100644
--- a/sysdeps/hppa/nptl/pthread-offsets.h
+++ b/sysdeps/hppa/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   51
diff --git a/sysdeps/i386/nptl/pthread-offsets.h b/sysdeps/i386/nptl/pthread-offsets.h
index e4e775d..7940d1f 100644
--- a/sysdeps/i386/nptl/pthread-offsets.h
+++ b/sysdeps/i386/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   24
diff --git a/sysdeps/ia64/nptl/pthread-offsets.h b/sysdeps/ia64/nptl/pthread-offsets.h
index 8208f6f..7fe06e0 100644
--- a/sysdeps/ia64/nptl/pthread-offsets.h
+++ b/sysdeps/ia64/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
diff --git a/sysdeps/m68k/nptl/pthread-offsets.h b/sysdeps/m68k/nptl/pthread-offsets.h
index e4e775d..4d6696a 100644
--- a/sysdeps/m68k/nptl/pthread-offsets.h
+++ b/sysdeps/m68k/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   27
diff --git a/sysdeps/microblaze/nptl/pthread-offsets.h b/sysdeps/microblaze/nptl/pthread-offsets.h
index e4e775d..e9accba 100644
--- a/sysdeps/microblaze/nptl/pthread-offsets.h
+++ b/sysdeps/microblaze/nptl/pthread-offsets.h
@@ -1 +1,7 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  27
+#else
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  24
+#endif
diff --git a/sysdeps/mips/nptl/pthread-offsets.h b/sysdeps/mips/nptl/pthread-offsets.h
index e96d34a..e52b347 100644
--- a/sysdeps/mips/nptl/pthread-offsets.h
+++ b/sysdeps/mips/nptl/pthread-offsets.h
@@ -3,3 +3,13 @@
 #else
 # define __PTHREAD_MUTEX_KIND_OFFSET     12
 #endif
+
+#if _MIPS_SIM == _ABI64
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
+#else
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define __PTHREAD_RWLOCK_FLAGS_OFFSET  27
+# else
+#  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 e4e775d..7940d1f 100644
--- a/sysdeps/nios2/nptl/pthread-offsets.h
+++ b/sysdeps/nios2/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   24
diff --git a/sysdeps/powerpc/nptl/pthread-offsets.h b/sysdeps/powerpc/nptl/pthread-offsets.h
index 25b5bf2..9e21121 100644
--- a/sysdeps/powerpc/nptl/pthread-offsets.h
+++ b/sysdeps/powerpc/nptl/pthread-offsets.h
@@ -5,3 +5,9 @@
 #else
 # define __PTHREAD_MUTEX_KIND_OFFSET     12
 #endif
+
+#if __WORDSIZE == 64
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
+#else
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET   27
+#endif
diff --git a/sysdeps/riscv/nptl/pthread-offsets.h b/sysdeps/riscv/nptl/pthread-offsets.h
index 6fc032f..4f14276 100644
--- a/sysdeps/riscv/nptl/pthread-offsets.h
+++ b/sysdeps/riscv/nptl/pthread-offsets.h
@@ -18,3 +18,5 @@
    <https://www.gnu.org/licenses/>.  */
 
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
diff --git a/sysdeps/s390/nptl/pthread-offsets.h b/sysdeps/s390/nptl/pthread-offsets.h
index 25b5bf2..9e21121 100644
--- a/sysdeps/s390/nptl/pthread-offsets.h
+++ b/sysdeps/s390/nptl/pthread-offsets.h
@@ -5,3 +5,9 @@
 #else
 # define __PTHREAD_MUTEX_KIND_OFFSET     12
 #endif
+
+#if __WORDSIZE == 64
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
+#else
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET   27
+#endif
diff --git a/sysdeps/sh/nptl/pthread-offsets.h b/sysdeps/sh/nptl/pthread-offsets.h
index e4e775d..e9accba 100644
--- a/sysdeps/sh/nptl/pthread-offsets.h
+++ b/sysdeps/sh/nptl/pthread-offsets.h
@@ -1 +1,7 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  27
+#else
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  24
+#endif
diff --git a/sysdeps/sparc/nptl/pthread-offsets.h b/sysdeps/sparc/nptl/pthread-offsets.h
index 25b5bf2..9e21121 100644
--- a/sysdeps/sparc/nptl/pthread-offsets.h
+++ b/sysdeps/sparc/nptl/pthread-offsets.h
@@ -5,3 +5,9 @@
 #else
 # define __PTHREAD_MUTEX_KIND_OFFSET     12
 #endif
+
+#if __WORDSIZE == 64
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
+#else
+# 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 8208f6f..a311da4 100644
--- a/sysdeps/x86_64/nptl/pthread-offsets.h
+++ b/sysdeps/x86_64/nptl/pthread-offsets.h
@@ -1 +1,7 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#ifdef  __ILP32__
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  40
+#else
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  48
+#endif

-- 
Gerrit-Project: glibc
Gerrit-Branch: master
Gerrit-Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148
Gerrit-Change-Number: 516
Gerrit-PatchSet: 2
Gerrit-Owner: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Florian Weimer <fweimer@redhat.com>
Gerrit-MessageType: newpatchset

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [review v2] nptl: Add tests for internal pthread_rwlock_t offsets
  2019-11-07 14:24 [review] nptl: Add tests for internal pthread_rwlock_t offsets Adhemerval Zanella (Code Review)
                   ` (4 preceding siblings ...)
  2019-11-08 19:43 ` [review v2] " Adhemerval Zanella (Code Review)
@ 2019-11-14 14:35 ` Florian Weimer (Code Review)
  2019-11-22 19:25 ` [review v4] " Florian Weimer (Code Review)
  2019-11-26 14:20 ` [pushed] " Sourceware to Gerrit sync (Code Review)
  7 siblings, 0 replies; 9+ messages in thread
From: Florian Weimer (Code Review) @ 2019-11-14 14:35 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha; +Cc: Florian Weimer

Florian Weimer has posted comments on this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516
......................................................................


Patch Set 2:

(2 comments)

I ran this through a full build-many-glibcs.py run, and the results look good.

| --- nptl/pthread_rwlock_init.c
| +++ nptl/pthread_rwlock_init.c
| @@ -37,8 +42,19 @@ __pthread_rwlock_init (pthread_rwlock_t *rwlock,
| +  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);

PS1, Line 51:

Done

| +
|    const struct pthread_rwlockattr *iattr;
|  
|    iattr = ((const struct pthread_rwlockattr *) attr) ?: &default_rwlockattr;
|  
|    memset (rwlock, '\0', sizeof (*rwlock));
|  
|    rwlock->__data.__flags = iattr->lockkind;
|  
| --- sysdeps/mips/nptl/pthread-offsets.h
| +++ sysdeps/mips/nptl/pthread-offsets.h
| @@ -14,0 +27,10 @@ # 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

PS1, Line 36:

Done


-- 
Gerrit-Project: glibc
Gerrit-Branch: master
Gerrit-Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148
Gerrit-Change-Number: 516
Gerrit-PatchSet: 2
Gerrit-Owner: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Florian Weimer <fweimer@redhat.com>
Gerrit-Comment-Date: Thu, 14 Nov 2019 14:35:03 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Florian Weimer <fweimer@redhat.com>
Comment-In-Reply-To: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-MessageType: comment

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [review v4] nptl: Add tests for internal pthread_rwlock_t offsets
  2019-11-07 14:24 [review] nptl: Add tests for internal pthread_rwlock_t offsets Adhemerval Zanella (Code Review)
                   ` (5 preceding siblings ...)
  2019-11-14 14:35 ` Florian Weimer (Code Review)
@ 2019-11-22 19:25 ` Florian Weimer (Code Review)
  2019-11-26 14:20 ` [pushed] " Sourceware to Gerrit sync (Code Review)
  7 siblings, 0 replies; 9+ messages in thread
From: Florian Weimer (Code Review) @ 2019-11-22 19:25 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha; +Cc: Florian Weimer

Florian Weimer has posted comments on this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516
......................................................................


Patch Set 4: Code-Review+2


-- 
Gerrit-Project: glibc
Gerrit-Branch: master
Gerrit-Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148
Gerrit-Change-Number: 516
Gerrit-PatchSet: 4
Gerrit-Owner: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Florian Weimer <fweimer@redhat.com>
Gerrit-Comment-Date: Fri, 22 Nov 2019 19:25:42 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [pushed] nptl: Add tests for internal pthread_rwlock_t offsets
  2019-11-07 14:24 [review] nptl: Add tests for internal pthread_rwlock_t offsets Adhemerval Zanella (Code Review)
                   ` (6 preceding siblings ...)
  2019-11-22 19:25 ` [review v4] " Florian Weimer (Code Review)
@ 2019-11-26 14:20 ` Sourceware to Gerrit sync (Code Review)
  7 siblings, 0 replies; 9+ messages in thread
From: Sourceware to Gerrit sync (Code Review) @ 2019-11-26 14:20 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha; +Cc: Florian Weimer

Sourceware to Gerrit sync has submitted this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/glibc/+/516
......................................................................

nptl: Add tests for internal pthread_rwlock_t offsets

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.

Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148
---
M nptl/pthread_rwlock_init.c
M sysdeps/aarch64/nptl/pthread-offsets.h
M sysdeps/alpha/nptl/pthread-offsets.h
M sysdeps/arm/nptl/pthread-offsets.h
M sysdeps/csky/nptl/pthread-offsets.h
M sysdeps/hppa/nptl/pthread-offsets.h
M sysdeps/i386/nptl/pthread-offsets.h
M sysdeps/ia64/nptl/pthread-offsets.h
M sysdeps/m68k/nptl/pthread-offsets.h
M sysdeps/microblaze/nptl/pthread-offsets.h
M sysdeps/mips/nptl/pthread-offsets.h
M sysdeps/nios2/nptl/pthread-offsets.h
M sysdeps/powerpc/nptl/pthread-offsets.h
M sysdeps/riscv/nptl/pthread-offsets.h
M sysdeps/s390/nptl/pthread-offsets.h
M sysdeps/sh/nptl/pthread-offsets.h
M sysdeps/sparc/nptl/pthread-offsets.h
M sysdeps/x86_64/nptl/pthread-offsets.h
18 files changed, 78 insertions(+), 0 deletions(-)

Approvals:
  Florian Weimer: Looks good to me, approved


diff --git a/nptl/pthread_rwlock_init.c b/nptl/pthread_rwlock_init.c
index 04f0d40..8813e32 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,13 @@
 {
   ASSERT_TYPE_SIZE (pthread_rwlock_t, __SIZEOF_PTHREAD_RWLOCK_T);
 
+  /* The __flags is the only field where its offset should be checked to
+     avoid ABI breakage with static initializers.  */
+  ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_rwlock_t, __data.__flags,
+				  __PTHREAD_RWLOCK_FLAGS_OFFSET);
+  ASSERT_PTHREAD_INTERNAL_MEMBER_SIZE (pthread_rwlock_t, __data.__flags,
+				       int);
+
   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 8208f6f..7fe06e0 100644
--- a/sysdeps/aarch64/nptl/pthread-offsets.h
+++ b/sysdeps/aarch64/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
diff --git a/sysdeps/alpha/nptl/pthread-offsets.h b/sysdeps/alpha/nptl/pthread-offsets.h
index 8208f6f..7fe06e0 100644
--- a/sysdeps/alpha/nptl/pthread-offsets.h
+++ b/sysdeps/alpha/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
diff --git a/sysdeps/arm/nptl/pthread-offsets.h b/sysdeps/arm/nptl/pthread-offsets.h
index e4e775d..e9accba 100644
--- a/sysdeps/arm/nptl/pthread-offsets.h
+++ b/sysdeps/arm/nptl/pthread-offsets.h
@@ -1 +1,7 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  27
+#else
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  24
+#endif
diff --git a/sysdeps/csky/nptl/pthread-offsets.h b/sysdeps/csky/nptl/pthread-offsets.h
index e4e775d..7940d1f 100644
--- a/sysdeps/csky/nptl/pthread-offsets.h
+++ b/sysdeps/csky/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   24
diff --git a/sysdeps/hppa/nptl/pthread-offsets.h b/sysdeps/hppa/nptl/pthread-offsets.h
index e4e775d..1c11eff 100644
--- a/sysdeps/hppa/nptl/pthread-offsets.h
+++ b/sysdeps/hppa/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   51
diff --git a/sysdeps/i386/nptl/pthread-offsets.h b/sysdeps/i386/nptl/pthread-offsets.h
index e4e775d..7940d1f 100644
--- a/sysdeps/i386/nptl/pthread-offsets.h
+++ b/sysdeps/i386/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   24
diff --git a/sysdeps/ia64/nptl/pthread-offsets.h b/sysdeps/ia64/nptl/pthread-offsets.h
index 8208f6f..7fe06e0 100644
--- a/sysdeps/ia64/nptl/pthread-offsets.h
+++ b/sysdeps/ia64/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
diff --git a/sysdeps/m68k/nptl/pthread-offsets.h b/sysdeps/m68k/nptl/pthread-offsets.h
index e4e775d..4d6696a 100644
--- a/sysdeps/m68k/nptl/pthread-offsets.h
+++ b/sysdeps/m68k/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   27
diff --git a/sysdeps/microblaze/nptl/pthread-offsets.h b/sysdeps/microblaze/nptl/pthread-offsets.h
index e4e775d..e9accba 100644
--- a/sysdeps/microblaze/nptl/pthread-offsets.h
+++ b/sysdeps/microblaze/nptl/pthread-offsets.h
@@ -1 +1,7 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  27
+#else
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  24
+#endif
diff --git a/sysdeps/mips/nptl/pthread-offsets.h b/sysdeps/mips/nptl/pthread-offsets.h
index e96d34a..e52b347 100644
--- a/sysdeps/mips/nptl/pthread-offsets.h
+++ b/sysdeps/mips/nptl/pthread-offsets.h
@@ -3,3 +3,13 @@
 #else
 # define __PTHREAD_MUTEX_KIND_OFFSET     12
 #endif
+
+#if _MIPS_SIM == _ABI64
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
+#else
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define __PTHREAD_RWLOCK_FLAGS_OFFSET  27
+# else
+#  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 e4e775d..7940d1f 100644
--- a/sysdeps/nios2/nptl/pthread-offsets.h
+++ b/sysdeps/nios2/nptl/pthread-offsets.h
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   24
diff --git a/sysdeps/powerpc/nptl/pthread-offsets.h b/sysdeps/powerpc/nptl/pthread-offsets.h
index 25b5bf2..9e21121 100644
--- a/sysdeps/powerpc/nptl/pthread-offsets.h
+++ b/sysdeps/powerpc/nptl/pthread-offsets.h
@@ -5,3 +5,9 @@
 #else
 # define __PTHREAD_MUTEX_KIND_OFFSET     12
 #endif
+
+#if __WORDSIZE == 64
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
+#else
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET   27
+#endif
diff --git a/sysdeps/riscv/nptl/pthread-offsets.h b/sysdeps/riscv/nptl/pthread-offsets.h
index 6fc032f..4f14276 100644
--- a/sysdeps/riscv/nptl/pthread-offsets.h
+++ b/sysdeps/riscv/nptl/pthread-offsets.h
@@ -18,3 +18,5 @@
    <https://www.gnu.org/licenses/>.  */
 
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
diff --git a/sysdeps/s390/nptl/pthread-offsets.h b/sysdeps/s390/nptl/pthread-offsets.h
index 25b5bf2..9e21121 100644
--- a/sysdeps/s390/nptl/pthread-offsets.h
+++ b/sysdeps/s390/nptl/pthread-offsets.h
@@ -5,3 +5,9 @@
 #else
 # define __PTHREAD_MUTEX_KIND_OFFSET     12
 #endif
+
+#if __WORDSIZE == 64
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
+#else
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET   27
+#endif
diff --git a/sysdeps/sh/nptl/pthread-offsets.h b/sysdeps/sh/nptl/pthread-offsets.h
index e4e775d..e9accba 100644
--- a/sysdeps/sh/nptl/pthread-offsets.h
+++ b/sysdeps/sh/nptl/pthread-offsets.h
@@ -1 +1,7 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  27
+#else
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  24
+#endif
diff --git a/sysdeps/sparc/nptl/pthread-offsets.h b/sysdeps/sparc/nptl/pthread-offsets.h
index 25b5bf2..9e21121 100644
--- a/sysdeps/sparc/nptl/pthread-offsets.h
+++ b/sysdeps/sparc/nptl/pthread-offsets.h
@@ -5,3 +5,9 @@
 #else
 # define __PTHREAD_MUTEX_KIND_OFFSET     12
 #endif
+
+#if __WORDSIZE == 64
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
+#else
+# 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 8208f6f..a311da4 100644
--- a/sysdeps/x86_64/nptl/pthread-offsets.h
+++ b/sysdeps/x86_64/nptl/pthread-offsets.h
@@ -1 +1,7 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#ifdef  __ILP32__
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  40
+#else
+# define __PTHREAD_RWLOCK_FLAGS_OFFSET  48
+#endif

-- 
Gerrit-Project: glibc
Gerrit-Branch: master
Gerrit-Change-Id: Iccc103d557de13d17e4a3f59a0cad2f4a640c148
Gerrit-Change-Number: 516
Gerrit-PatchSet: 5
Gerrit-Owner: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Gerrit-Reviewer: Florian Weimer <fweimer@redhat.com>
Gerrit-MessageType: merged

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-11-26 14:20 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-07 14:24 [review] nptl: Add tests for internal pthread_rwlock_t offsets Adhemerval Zanella (Code Review)
2019-11-07 16:08 ` Florian Weimer (Code Review)
2019-11-07 16:55 ` Adhemerval Zanella (Code Review)
2019-11-07 17:06 ` Adhemerval Zanella (Code Review)
2019-11-07 22:04 ` Florian Weimer (Code Review)
2019-11-08 19:43 ` [review v2] " Adhemerval Zanella (Code Review)
2019-11-14 14:35 ` Florian Weimer (Code Review)
2019-11-22 19:25 ` [review v4] " Florian Weimer (Code Review)
2019-11-26 14:20 ` [pushed] " Sourceware to Gerrit sync (Code Review)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).