]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
nptl: Add tests for internal pthread_rwlock_t offsets
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 4 Nov 2019 13:36:05 +0000 (13:36 +0000)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 26 Nov 2019 13:53:36 +0000 (13:53 +0000)
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

18 files changed:
nptl/pthread_rwlock_init.c
sysdeps/aarch64/nptl/pthread-offsets.h
sysdeps/alpha/nptl/pthread-offsets.h
sysdeps/arm/nptl/pthread-offsets.h
sysdeps/csky/nptl/pthread-offsets.h
sysdeps/hppa/nptl/pthread-offsets.h
sysdeps/i386/nptl/pthread-offsets.h
sysdeps/ia64/nptl/pthread-offsets.h
sysdeps/m68k/nptl/pthread-offsets.h
sysdeps/microblaze/nptl/pthread-offsets.h
sysdeps/mips/nptl/pthread-offsets.h
sysdeps/nios2/nptl/pthread-offsets.h
sysdeps/powerpc/nptl/pthread-offsets.h
sysdeps/riscv/nptl/pthread-offsets.h
sysdeps/s390/nptl/pthread-offsets.h
sysdeps/sh/nptl/pthread-offsets.h
sysdeps/sparc/nptl/pthread-offsets.h
sysdeps/x86_64/nptl/pthread-offsets.h

index 04f0d40ed8919c1705758aefca8d3b1910a1d194..8813e323830c4547089b06c13b17e4ae1dfba61a 100644 (file)
@@ -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;
index 8208f6f177a00d7727765293617f7655ba0fbf9f..7fe06e0e25ea73f4fff1ecf46c1b9909b934ca5a 100644 (file)
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
index 8208f6f177a00d7727765293617f7655ba0fbf9f..7fe06e0e25ea73f4fff1ecf46c1b9909b934ca5a 100644 (file)
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
index e4e775d7ed2838ffca5f7da21b2bb95912e25f6a..e9accba31cabdd04612773bc40edb248f56f6f04 100644 (file)
@@ -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
index e4e775d7ed2838ffca5f7da21b2bb95912e25f6a..7940d1fd8871e5a6ca9b756b59a90f8e9d8dca22 100644 (file)
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   24
index e4e775d7ed2838ffca5f7da21b2bb95912e25f6a..1c11eff10b7b96e0e827ac23fae4064720431181 100644 (file)
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   51
index e4e775d7ed2838ffca5f7da21b2bb95912e25f6a..7940d1fd8871e5a6ca9b756b59a90f8e9d8dca22 100644 (file)
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   24
index 8208f6f177a00d7727765293617f7655ba0fbf9f..7fe06e0e25ea73f4fff1ecf46c1b9909b934ca5a 100644 (file)
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
index e4e775d7ed2838ffca5f7da21b2bb95912e25f6a..4d6696ae56a484812d3004e3ce1899c1c7a4a962 100644 (file)
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   27
index e4e775d7ed2838ffca5f7da21b2bb95912e25f6a..e9accba31cabdd04612773bc40edb248f56f6f04 100644 (file)
@@ -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
index e96d34afd7001a9e582f4b541696b265bb92267e..e52b347531ae2bc1e817ce42ec6dd3316d912077 100644 (file)
@@ -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
index e4e775d7ed2838ffca5f7da21b2bb95912e25f6a..7940d1fd8871e5a6ca9b756b59a90f8e9d8dca22 100644 (file)
@@ -1 +1,3 @@
 #define __PTHREAD_MUTEX_KIND_OFFSET     12
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   24
index 25b5bf2cbd4bc80625115c669ae9bcd7c3a27417..9e2112120b6b9affae93814f48a090463c3aeddb 100644 (file)
@@ -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
index 6fc032fdc20e0b3d54ef3f7473326d05216cbc40..4f14276f9c4b84c9596c14bf8a9c5c7b22005ed6 100644 (file)
@@ -18,3 +18,5 @@
    <https://www.gnu.org/licenses/>.  */
 
 #define __PTHREAD_MUTEX_KIND_OFFSET     16
+
+#define __PTHREAD_RWLOCK_FLAGS_OFFSET   48
index 25b5bf2cbd4bc80625115c669ae9bcd7c3a27417..9e2112120b6b9affae93814f48a090463c3aeddb 100644 (file)
@@ -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
index e4e775d7ed2838ffca5f7da21b2bb95912e25f6a..e9accba31cabdd04612773bc40edb248f56f6f04 100644 (file)
@@ -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
index 25b5bf2cbd4bc80625115c669ae9bcd7c3a27417..9e2112120b6b9affae93814f48a090463c3aeddb 100644 (file)
@@ -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
index 8208f6f177a00d7727765293617f7655ba0fbf9f..a311da40c6b16687357bbae222e9da8b85c5d986 100644 (file)
@@ -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