This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[review v2] nptl: Add tests for internal pthread_rwlock_t offsets
- From: "Adhemerval Zanella (Code Review)" <gerrit at gnutoolchain-gerrit dot osci dot io>
- To: Florian Weimer <fweimer at redhat dot com>, libc-alpha at sourceware dot org
- Date: Fri, 8 Nov 2019 14:43:52 -0500
- Subject: [review v2] nptl: Add tests for internal pthread_rwlock_t offsets
- Auto-submitted: auto-generated
- References: <gerrit.1573136666000.Iccc103d557de13d17e4a3f59a0cad2f4a640c148@gnutoolchain-gerrit.osci.io>
- Reply-to: adhemerval dot zanella at linaro dot org, fweimer at redhat dot com, libc-alpha at sourceware dot org
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