about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-11-04 13:36:05 +0000
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2019-11-26 13:53:36 +0000
commit48dbce60cfdd328b671aaa9ee0c54ded3246ece9 (patch)
tree0541fb9a339fede5f26ce664b19558e27c89ab96
parent71d260c1077ce7ab1530809fc826756bdcd032b0 (diff)
downloadglibc-48dbce60cfdd328b671aaa9ee0c54ded3246ece9.tar.gz
glibc-48dbce60cfdd328b671aaa9ee0c54ded3246ece9.tar.xz
glibc-48dbce60cfdd328b671aaa9ee0c54ded3246ece9.zip
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
-rw-r--r--nptl/pthread_rwlock_init.c8
-rw-r--r--sysdeps/aarch64/nptl/pthread-offsets.h2
-rw-r--r--sysdeps/alpha/nptl/pthread-offsets.h2
-rw-r--r--sysdeps/arm/nptl/pthread-offsets.h6
-rw-r--r--sysdeps/csky/nptl/pthread-offsets.h2
-rw-r--r--sysdeps/hppa/nptl/pthread-offsets.h2
-rw-r--r--sysdeps/i386/nptl/pthread-offsets.h2
-rw-r--r--sysdeps/ia64/nptl/pthread-offsets.h2
-rw-r--r--sysdeps/m68k/nptl/pthread-offsets.h2
-rw-r--r--sysdeps/microblaze/nptl/pthread-offsets.h6
-rw-r--r--sysdeps/mips/nptl/pthread-offsets.h10
-rw-r--r--sysdeps/nios2/nptl/pthread-offsets.h2
-rw-r--r--sysdeps/powerpc/nptl/pthread-offsets.h6
-rw-r--r--sysdeps/riscv/nptl/pthread-offsets.h2
-rw-r--r--sysdeps/s390/nptl/pthread-offsets.h6
-rw-r--r--sysdeps/sh/nptl/pthread-offsets.h6
-rw-r--r--sysdeps/sparc/nptl/pthread-offsets.h6
-rw-r--r--sysdeps/x86_64/nptl/pthread-offsets.h6
18 files changed, 78 insertions, 0 deletions
diff --git a/nptl/pthread_rwlock_init.c b/nptl/pthread_rwlock_init.c
index 04f0d40ed8..8813e32383 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 @@ __pthread_rwlock_init (pthread_rwlock_t *rwlock,
 {
   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 8208f6f177..7fe06e0e25 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 8208f6f177..7fe06e0e25 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 e4e775d7ed..e9accba31c 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 e4e775d7ed..7940d1fd88 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 e4e775d7ed..1c11eff10b 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 e4e775d7ed..7940d1fd88 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 8208f6f177..7fe06e0e25 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 e4e775d7ed..4d6696ae56 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 e4e775d7ed..e9accba31c 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 e96d34afd7..e52b347531 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 e4e775d7ed..7940d1fd88 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 25b5bf2cbd..9e2112120b 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 6fc032fdc2..4f14276f9c 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 25b5bf2cbd..9e2112120b 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 e4e775d7ed..e9accba31c 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 25b5bf2cbd..9e2112120b 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 8208f6f177..a311da40c6 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