mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
nptl: Add tests for internal pthread_mutex_t offsets
This patch adds a new build test to check for internal fields offsets for user visible internal field. Although currently the only field which is statically initialized to a non zero value is pthread_mutex_t.__data.__kind value, the tests also check the offset of __kind, __spins, __elision (if supported), and __list internal member. A internal header (pthread-offset.h) is added to each major ABI with the reference value. Checked on x86_64-linux-gnu and with a build check for all affected ABIs (aarch64-linux-gnu, alpha-linux-gnu, arm-linux-gnueabihf, hppa-linux-gnu, i686-linux-gnu, ia64-linux-gnu, m68k-linux-gnu, microblaze-linux-gnu, mips64-linux-gnu, mips64-n32-linux-gnu, mips-linux-gnu, powerpc64le-linux-gnu, powerpc-linux-gnu, s390-linux-gnu, s390x-linux-gnu, sh4-linux-gnu, sparc64-linux-gnu, sparcv9-linux-gnu, tilegx-linux-gnu, tilegx-linux-gnu-x32, tilepro-linux-gnu, x86_64-linux-gnu, and x86_64-linux-x32). * nptl/pthreadP.h (ASSERT_PTHREAD_STRING, ASSERT_PTHREAD_INTERNAL_OFFSET): New macro. * nptl/pthread_mutex_init.c (__pthread_mutex_init): Add build time checks for internal pthread_mutex_t offsets. * sysdeps/aarch64/nptl/pthread-offsets.h (__PTHREAD_MUTEX_NUSERS_OFFSET, __PTHREAD_MUTEX_KIND_OFFSET, __PTHREAD_MUTEX_SPINS_OFFSET, __PTHREAD_MUTEX_ELISION_OFFSET, __PTHREAD_MUTEX_LIST_OFFSET): New macro. * sysdeps/alpha/nptl/pthread-offsets.h: Likewise. * sysdeps/arm/nptl/pthread-offsets.h: Likewise. * sysdeps/hppa/nptl/pthread-offsets.h: Likewise. * sysdeps/i386/nptl/pthread-offsets.h: Likewise. * sysdeps/ia64/nptl/pthread-offsets.h: Likewise. * sysdeps/m68k/nptl/pthread-offsets.h: Likewise. * sysdeps/microblaze/nptl/pthread-offsets.h: Likewise. * sysdeps/mips/nptl/pthread-offsets.h: Likewise. * sysdeps/nios2/nptl/pthread-offsets.h: Likewise. * sysdeps/powerpc/nptl/pthread-offsets.h: Likewise. * sysdeps/s390/nptl/pthread-offsets.h: Likewise. * sysdeps/sh/nptl/pthread-offsets.h: Likewise. * sysdeps/sparc/nptl/pthread-offsets.h: Likewise. * sysdeps/tile/nptl/pthread-offsets.h: Likewise. * sysdeps/x86_64/nptl/pthread-offsets.h: Likewise. Signed-off-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
b7fc95f8c8
commit
dff91cd45e
26
ChangeLog
26
ChangeLog
@ -1,3 +1,29 @@
|
||||
2017-11-07 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
|
||||
* nptl/pthreadP.h (ASSERT_PTHREAD_STRING,
|
||||
ASSERT_PTHREAD_INTERNAL_OFFSET): New macro.
|
||||
* nptl/pthread_mutex_init.c (__pthread_mutex_init): Add build time
|
||||
checks for internal pthread_mutex_t offsets.
|
||||
* sysdeps/aarch64/nptl/pthread-offsets.h
|
||||
(__PTHREAD_MUTEX_NUSERS_OFFSET, __PTHREAD_MUTEX_KIND_OFFSET,
|
||||
__PTHREAD_MUTEX_SPINS_OFFSET, __PTHREAD_MUTEX_ELISION_OFFSET,
|
||||
__PTHREAD_MUTEX_LIST_OFFSET): New macro.
|
||||
* sysdeps/alpha/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/arm/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/hppa/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/i386/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/ia64/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/m68k/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/microblaze/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/mips/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/nios2/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/powerpc/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/s390/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/sh/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/sparc/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/tile/nptl/pthread-offsets.h: Likewise.
|
||||
* sysdeps/x86_64/nptl/pthread-offsets.h: Likewise.
|
||||
|
||||
2017-11-07 Florian Weimer <fweimer@redhat.com>
|
||||
|
||||
* bits/mman-linux.h: Move ...
|
||||
|
@ -639,4 +639,10 @@ check_stacksize_attr (size_t st)
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
#define ASSERT_PTHREAD_STRING(x) __STRING (x)
|
||||
#define ASSERT_PTHREAD_INTERNAL_OFFSET(type, member, offset) \
|
||||
_Static_assert (offsetof (type, member) == offset, \
|
||||
"offset of " #member " field of " #type " != " \
|
||||
ASSERT_PTHREAD_STRING (offset))
|
||||
|
||||
#endif /* pthreadP.h */
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include <kernel-features.h>
|
||||
#include "pthreadP.h"
|
||||
#include <atomic.h>
|
||||
#include <pthread-offsets.h>
|
||||
|
||||
#include <stap-probe.h>
|
||||
|
||||
@ -58,6 +59,18 @@ __pthread_mutex_init (pthread_mutex_t *mutex,
|
||||
const struct pthread_mutexattr *imutexattr;
|
||||
|
||||
assert (sizeof (pthread_mutex_t) <= __SIZEOF_PTHREAD_MUTEX_T);
|
||||
ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_mutex_t, __data.__nusers,
|
||||
__PTHREAD_MUTEX_NUSERS_OFFSET);
|
||||
ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_mutex_t, __data.__kind,
|
||||
__PTHREAD_MUTEX_KIND_OFFSET);
|
||||
ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_mutex_t, __data.__spins,
|
||||
__PTHREAD_MUTEX_SPINS_OFFSET);
|
||||
#if __PTHREAD_MUTEX_LOCK_ELISION
|
||||
ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_mutex_t, __data.__elision,
|
||||
__PTHREAD_MUTEX_ELISION_OFFSET);
|
||||
#endif
|
||||
ASSERT_PTHREAD_INTERNAL_OFFSET (pthread_mutex_t, __data.__list,
|
||||
__PTHREAD_MUTEX_LIST_OFFSET);
|
||||
|
||||
imutexattr = ((const struct pthread_mutexattr *) mutexattr
|
||||
?: &default_mutexattr);
|
||||
|
5
sysdeps/aarch64/nptl/pthread-offsets.h
Normal file
5
sysdeps/aarch64/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,5 @@
|
||||
#define __PTHREAD_MUTEX_NUSERS_OFFSET 12
|
||||
#define __PTHREAD_MUTEX_KIND_OFFSET 16
|
||||
#define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
#define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
#define __PTHREAD_MUTEX_LIST_OFFSET 24
|
5
sysdeps/alpha/nptl/pthread-offsets.h
Normal file
5
sysdeps/alpha/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,5 @@
|
||||
#define __PTHREAD_MUTEX_NUSERS_OFFSET 12
|
||||
#define __PTHREAD_MUTEX_KIND_OFFSET 16
|
||||
#define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
#define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
#define __PTHREAD_MUTEX_LIST_OFFSET 24
|
5
sysdeps/arm/nptl/pthread-offsets.h
Normal file
5
sysdeps/arm/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,5 @@
|
||||
#define __PTHREAD_MUTEX_NUSERS_OFFSET 16
|
||||
#define __PTHREAD_MUTEX_KIND_OFFSET 12
|
||||
#define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
#define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
#define __PTHREAD_MUTEX_LIST_OFFSET 20
|
5
sysdeps/hppa/nptl/pthread-offsets.h
Normal file
5
sysdeps/hppa/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,5 @@
|
||||
#define __PTHREAD_MUTEX_NUSERS_OFFSET 32
|
||||
#define __PTHREAD_MUTEX_KIND_OFFSET 12
|
||||
#define __PTHREAD_MUTEX_SPINS_OFFSET 36
|
||||
#define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
#define __PTHREAD_MUTEX_LIST_OFFSET 36
|
5
sysdeps/i386/nptl/pthread-offsets.h
Normal file
5
sysdeps/i386/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,5 @@
|
||||
#define __PTHREAD_MUTEX_NUSERS_OFFSET 16
|
||||
#define __PTHREAD_MUTEX_KIND_OFFSET 12
|
||||
#define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
#define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
#define __PTHREAD_MUTEX_LIST_OFFSET 20
|
5
sysdeps/ia64/nptl/pthread-offsets.h
Normal file
5
sysdeps/ia64/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,5 @@
|
||||
#define __PTHREAD_MUTEX_NUSERS_OFFSET 12
|
||||
#define __PTHREAD_MUTEX_KIND_OFFSET 16
|
||||
#define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
#define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
#define __PTHREAD_MUTEX_LIST_OFFSET 24
|
5
sysdeps/m68k/nptl/pthread-offsets.h
Normal file
5
sysdeps/m68k/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,5 @@
|
||||
#define __PTHREAD_MUTEX_NUSERS_OFFSET 16
|
||||
#define __PTHREAD_MUTEX_KIND_OFFSET 12
|
||||
#define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
#define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
#define __PTHREAD_MUTEX_LIST_OFFSET 20
|
5
sysdeps/microblaze/nptl/pthread-offsets.h
Normal file
5
sysdeps/microblaze/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,5 @@
|
||||
#define __PTHREAD_MUTEX_NUSERS_OFFSET 16
|
||||
#define __PTHREAD_MUTEX_KIND_OFFSET 12
|
||||
#define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
#define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
#define __PTHREAD_MUTEX_LIST_OFFSET 20
|
13
sysdeps/mips/nptl/pthread-offsets.h
Normal file
13
sysdeps/mips/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,13 @@
|
||||
#if _MIPS_SIM == _ABI64
|
||||
# define __PTHREAD_MUTEX_NUSERS_OFFSET 12
|
||||
# define __PTHREAD_MUTEX_KIND_OFFSET 16
|
||||
# define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
# define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
# define __PTHREAD_MUTEX_LIST_OFFSET 24
|
||||
#else
|
||||
# define __PTHREAD_MUTEX_NUSERS_OFFSET 16
|
||||
# define __PTHREAD_MUTEX_KIND_OFFSET 12
|
||||
# define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
# define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
# define __PTHREAD_MUTEX_LIST_OFFSET 20
|
||||
#endif
|
5
sysdeps/nios2/nptl/pthread-offsets.h
Normal file
5
sysdeps/nios2/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,5 @@
|
||||
#define __PTHREAD_MUTEX_NUSERS_OFFSET 16
|
||||
#define __PTHREAD_MUTEX_KIND_OFFSET 12
|
||||
#define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
#define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
#define __PTHREAD_MUTEX_LIST_OFFSET 20
|
15
sysdeps/powerpc/nptl/pthread-offsets.h
Normal file
15
sysdeps/powerpc/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,15 @@
|
||||
#include <bits/wordsize.h>
|
||||
|
||||
#if __WORDSIZE == 64
|
||||
# define __PTHREAD_MUTEX_NUSERS_OFFSET 12
|
||||
# define __PTHREAD_MUTEX_KIND_OFFSET 16
|
||||
# define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
# define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
# define __PTHREAD_MUTEX_LIST_OFFSET 24
|
||||
#else
|
||||
# define __PTHREAD_MUTEX_NUSERS_OFFSET 16
|
||||
# define __PTHREAD_MUTEX_KIND_OFFSET 12
|
||||
# define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
# define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
# define __PTHREAD_MUTEX_LIST_OFFSET 20
|
||||
#endif
|
15
sysdeps/s390/nptl/pthread-offsets.h
Normal file
15
sysdeps/s390/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,15 @@
|
||||
#include <bits/wordsize.h>
|
||||
|
||||
#if __WORDSIZE == 64
|
||||
# define __PTHREAD_MUTEX_NUSERS_OFFSET 12
|
||||
# define __PTHREAD_MUTEX_KIND_OFFSET 16
|
||||
# define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
# define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
# define __PTHREAD_MUTEX_LIST_OFFSET 24
|
||||
#else
|
||||
# define __PTHREAD_MUTEX_NUSERS_OFFSET 16
|
||||
# define __PTHREAD_MUTEX_KIND_OFFSET 12
|
||||
# define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
# define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
# define __PTHREAD_MUTEX_LIST_OFFSET 20
|
||||
#endif
|
5
sysdeps/sh/nptl/pthread-offsets.h
Normal file
5
sysdeps/sh/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,5 @@
|
||||
#define __PTHREAD_MUTEX_NUSERS_OFFSET 16
|
||||
#define __PTHREAD_MUTEX_KIND_OFFSET 12
|
||||
#define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
#define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
#define __PTHREAD_MUTEX_LIST_OFFSET 20
|
15
sysdeps/sparc/nptl/pthread-offsets.h
Normal file
15
sysdeps/sparc/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,15 @@
|
||||
#include <bits/wordsize.h>
|
||||
|
||||
#if __WORDSIZE == 64
|
||||
# define __PTHREAD_MUTEX_NUSERS_OFFSET 12
|
||||
# define __PTHREAD_MUTEX_KIND_OFFSET 16
|
||||
# define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
# define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
# define __PTHREAD_MUTEX_LIST_OFFSET 24
|
||||
#else
|
||||
# define __PTHREAD_MUTEX_NUSERS_OFFSET 16
|
||||
# define __PTHREAD_MUTEX_KIND_OFFSET 12
|
||||
# define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
# define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
# define __PTHREAD_MUTEX_LIST_OFFSET 20
|
||||
#endif
|
15
sysdeps/tile/nptl/pthread-offsets.h
Normal file
15
sysdeps/tile/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,15 @@
|
||||
#include <bits/wordsize.h>
|
||||
|
||||
#if __WORDSIZE == 64
|
||||
# define __PTHREAD_MUTEX_NUSERS_OFFSET 12
|
||||
# define __PTHREAD_MUTEX_KIND_OFFSET 16
|
||||
# define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
# define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
# define __PTHREAD_MUTEX_LIST_OFFSET 24
|
||||
#else
|
||||
# define __PTHREAD_MUTEX_NUSERS_OFFSET 16
|
||||
# define __PTHREAD_MUTEX_KIND_OFFSET 12
|
||||
# define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
# define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
# define __PTHREAD_MUTEX_LIST_OFFSET 20
|
||||
#endif
|
5
sysdeps/x86_64/nptl/pthread-offsets.h
Normal file
5
sysdeps/x86_64/nptl/pthread-offsets.h
Normal file
@ -0,0 +1,5 @@
|
||||
#define __PTHREAD_MUTEX_NUSERS_OFFSET 12
|
||||
#define __PTHREAD_MUTEX_KIND_OFFSET 16
|
||||
#define __PTHREAD_MUTEX_SPINS_OFFSET 20
|
||||
#define __PTHREAD_MUTEX_ELISION_OFFSET 22
|
||||
#define __PTHREAD_MUTEX_LIST_OFFSET 24
|
Loading…
Reference in New Issue
Block a user