Message ID | 1508446807-21704-1-git-send-email-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | [1/3] nptl: Add tests for internal pthread_mutex_t offsets | expand |
On Thu, Oct 19, 2017 at 2:00 PM, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > This patch adds a new build test to check for internal fields > offsets uses on pthread_mutex_t static initialization macros > (PTHREAD_MUTEX_INITIALIZER, PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, > PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, and > PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP). > > Currently the only field which is statically initialized to a > non zero value is pthread_mutex_t.__data.__kind value, however > the test also check the offset of __kind, __spins, __elision (if > support), 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/Makefile (tests-internal): Add tst-offsets. > * nptl/tst-offsets.c: New file. > * sysdeps/aarch64/nptl/pthread-offsets.h: Likewise. > * 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. > --- > ChangeLog | 21 ++++++++++++ > nptl/Makefile | 2 +- > nptl/tst-offsets.c | 54 +++++++++++++++++++++++++++++++ > sysdeps/aarch64/nptl/pthread-offsets.h | 5 +++ > sysdeps/alpha/nptl/pthread-offsets.h | 5 +++ > sysdeps/arm/nptl/pthread-offsets.h | 5 +++ > sysdeps/hppa/nptl/pthread-offsets.h | 5 +++ > sysdeps/i386/nptl/pthread-offsets.h | 5 +++ > sysdeps/ia64/nptl/pthread-offsets.h | 5 +++ > sysdeps/m68k/nptl/pthread-offsets.h | 5 +++ > sysdeps/microblaze/nptl/pthread-offsets.h | 5 +++ > sysdeps/mips/nptl/pthread-offsets.h | 13 ++++++++ > sysdeps/nios2/nptl/pthread-offsets.h | 5 +++ > sysdeps/powerpc/nptl/pthread-offsets.h | 15 +++++++++ > sysdeps/s390/nptl/pthread-offsets.h | 15 +++++++++ > sysdeps/sh/nptl/pthread-offsets.h | 5 +++ > sysdeps/sparc/nptl/pthread-offsets.h | 15 +++++++++ > sysdeps/tile/nptl/pthread-offsets.h | 15 +++++++++ > sysdeps/x86_64/nptl/pthread-offsets.h | 5 +++ > 19 files changed, 204 insertions(+), 1 deletion(-) > create mode 100644 nptl/tst-offsets.c > create mode 100644 sysdeps/aarch64/nptl/pthread-offsets.h > create mode 100644 sysdeps/alpha/nptl/pthread-offsets.h > create mode 100644 sysdeps/arm/nptl/pthread-offsets.h > create mode 100644 sysdeps/hppa/nptl/pthread-offsets.h > create mode 100644 sysdeps/i386/nptl/pthread-offsets.h > create mode 100644 sysdeps/ia64/nptl/pthread-offsets.h > create mode 100644 sysdeps/m68k/nptl/pthread-offsets.h > create mode 100644 sysdeps/microblaze/nptl/pthread-offsets.h > create mode 100644 sysdeps/mips/nptl/pthread-offsets.h > create mode 100644 sysdeps/nios2/nptl/pthread-offsets.h > create mode 100644 sysdeps/powerpc/nptl/pthread-offsets.h > create mode 100644 sysdeps/s390/nptl/pthread-offsets.h > create mode 100644 sysdeps/sh/nptl/pthread-offsets.h > create mode 100644 sysdeps/sparc/nptl/pthread-offsets.h > create mode 100644 sysdeps/tile/nptl/pthread-offsets.h > create mode 100644 sysdeps/x86_64/nptl/pthread-offsets.h > > diff --git a/nptl/Makefile b/nptl/Makefile > index d819349..7492b06 100644 > --- a/nptl/Makefile > +++ b/nptl/Makefile > @@ -304,7 +304,7 @@ tests = tst-attr1 tst-attr2 tst-attr3 tst-default-attr \ > tst-thread_local1 tst-mutex-errorcheck tst-robust10 \ > tst-robust-fork tst-create-detached tst-memstream > > -tests-internal := tst-typesizes \ > +tests-internal := tst-typesizes tst-offsets \ > tst-rwlock19 tst-rwlock20 \ > tst-sem11 tst-sem12 tst-sem13 \ > tst-barrier5 tst-signal7 tst-mutex8 tst-mutex8-static \ > diff --git a/nptl/tst-offsets.c b/nptl/tst-offsets.c > new file mode 100644 > index 0000000..0df1155 > --- /dev/null > +++ b/nptl/tst-offsets.c > @@ -0,0 +1,54 @@ > +/* Check pthread internal offsets. > + Copyright (C) 2017 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <http://www.gnu.org/licenses/>. */ > + > +#include <stdio.h> > +#include <pthreadP.h> > +#include <semaphore.h> > + > +#include <pthread-offsets.h> > + > +#define STR_HELPER(x) #x > +#define STR(x) STR_HELPER(x) > + > +static int > +do_test (void) > +{ > +#define TEST_OFFSET(type, member, offset) \ > + _Static_assert (offsetof (type, member) == offset, \ > + "offset of " #member " field of " #type " != " \ > + STR (offset)) > + > + /* Check if internal fields in pthread_mutex_t used by static initializers > + have the expected offset. */ > + TEST_OFFSET (pthread_mutex_t, __data.__nusers, > + __PTHREAD_MUTEX_NUSERS_OFFSET); > + TEST_OFFSET (pthread_mutex_t, __data.__kind, > + __PTHREAD_MUTEX_KIND_OFFSET); > + TEST_OFFSET (pthread_mutex_t, __data.__spins, > + __PTHREAD_MUTEX_SPINS_OFFSET); > +#if __PTHREAD_MUTEX_LOCK_ELISION > + TEST_OFFSET (pthread_mutex_t, __data.__elision, > + __PTHREAD_MUTEX_ELISION_OFFSET); > +#endif > + TEST_OFFSET (pthread_mutex_t, __data.__list, > + __PTHREAD_MUTEX_LIST_OFFSET); > + > + return 0; > +} > + > +#include <support/test-driver.c> > diff --git a/sysdeps/aarch64/nptl/pthread-offsets.h b/sysdeps/aarch64/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..16c6b0d > --- /dev/null > +++ b/sysdeps/aarch64/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/alpha/nptl/pthread-offsets.h b/sysdeps/alpha/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..16c6b0d > --- /dev/null > +++ b/sysdeps/alpha/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/arm/nptl/pthread-offsets.h b/sysdeps/arm/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..9617354 > --- /dev/null > +++ b/sysdeps/arm/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/hppa/nptl/pthread-offsets.h b/sysdeps/hppa/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..8ae01b9 > --- /dev/null > +++ b/sysdeps/hppa/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/i386/nptl/pthread-offsets.h b/sysdeps/i386/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..9617354 > --- /dev/null > +++ b/sysdeps/i386/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/ia64/nptl/pthread-offsets.h b/sysdeps/ia64/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..16c6b0d > --- /dev/null > +++ b/sysdeps/ia64/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/m68k/nptl/pthread-offsets.h b/sysdeps/m68k/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..9617354 > --- /dev/null > +++ b/sysdeps/m68k/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/microblaze/nptl/pthread-offsets.h b/sysdeps/microblaze/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..9617354 > --- /dev/null > +++ b/sysdeps/microblaze/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/mips/nptl/pthread-offsets.h b/sysdeps/mips/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..0ac3eda > --- /dev/null > +++ b/sysdeps/mips/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/nios2/nptl/pthread-offsets.h b/sysdeps/nios2/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..9617354 > --- /dev/null > +++ b/sysdeps/nios2/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/powerpc/nptl/pthread-offsets.h b/sysdeps/powerpc/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..bdda1f1 > --- /dev/null > +++ b/sysdeps/powerpc/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/s390/nptl/pthread-offsets.h b/sysdeps/s390/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..bdda1f1 > --- /dev/null > +++ b/sysdeps/s390/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/sh/nptl/pthread-offsets.h b/sysdeps/sh/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..9617354 > --- /dev/null > +++ b/sysdeps/sh/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/sparc/nptl/pthread-offsets.h b/sysdeps/sparc/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..bdda1f1 > --- /dev/null > +++ b/sysdeps/sparc/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/tile/nptl/pthread-offsets.h b/sysdeps/tile/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..bdda1f1 > --- /dev/null > +++ b/sysdeps/tile/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/x86_64/nptl/pthread-offsets.h b/sysdeps/x86_64/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..16c6b0d > --- /dev/null > +++ b/sysdeps/x86_64/nptl/pthread-offsets.h > @@ -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 > -- These are wrong for x32. You need to add #if __WORDSIZE == 64 ... -- H.J.
On 19/10/2017 19:12, H.J. Lu wrote: > On Thu, Oct 19, 2017 at 2:00 PM, Adhemerval Zanella >> diff --git a/sysdeps/x86_64/nptl/pthread-offsets.h b/sysdeps/x86_64/nptl/pthread-offsets.h >> new file mode 100644 >> index 0000000..16c6b0d >> --- /dev/null >> +++ b/sysdeps/x86_64/nptl/pthread-offsets.h >> @@ -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 >> -- > > These are wrong for x32. You need to add > > #if __WORDSIZE == 64 > ... Right, I used the values which are the one expected to avoid ABI breakage. This indeed will break x32 tests build, but the idea is to have at 1/3 and 3/3 patch pushed together (which I should have made explicit in patch submission). If you prefer I can add the __WORDSIZE != 64 value for master and remove it on patch 3/3 or reorganize the patch set to put 3/3 before so 1/3 patch won't break the tests build.
On Thu, Oct 19, 2017 at 2:54 PM, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > > > On 19/10/2017 19:12, H.J. Lu wrote: >> On Thu, Oct 19, 2017 at 2:00 PM, Adhemerval Zanella >>> diff --git a/sysdeps/x86_64/nptl/pthread-offsets.h b/sysdeps/x86_64/nptl/pthread-offsets.h >>> new file mode 100644 >>> index 0000000..16c6b0d >>> --- /dev/null >>> +++ b/sysdeps/x86_64/nptl/pthread-offsets.h >>> @@ -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 >>> -- >> >> These are wrong for x32. You need to add >> >> #if __WORDSIZE == 64 >> ... > > Right, I used the values which are the one expected to avoid > ABI breakage. This indeed will break x32 tests build, but the > idea is to have at 1/3 and 3/3 patch pushed together (which > I should have made explicit in patch submission). No. 1/3 should be backported to 2.26/2.25 branches unchanged. > If you prefer I can add the __WORDSIZE != 64 value for master > and remove it on patch 3/3 or reorganize the patch set to put > 3/3 before so 1/3 patch won't break the tests build. -- H.J.
On 19/10/2017 20:39, H.J. Lu wrote: > On Thu, Oct 19, 2017 at 2:54 PM, Adhemerval Zanella > <adhemerval.zanella@linaro.org> wrote: >> >> >> On 19/10/2017 19:12, H.J. Lu wrote: >>> On Thu, Oct 19, 2017 at 2:00 PM, Adhemerval Zanella >>>> diff --git a/sysdeps/x86_64/nptl/pthread-offsets.h b/sysdeps/x86_64/nptl/pthread-offsets.h >>>> new file mode 100644 >>>> index 0000000..16c6b0d >>>> --- /dev/null >>>> +++ b/sysdeps/x86_64/nptl/pthread-offsets.h >>>> @@ -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 >>>> -- >>> >>> These are wrong for x32. You need to add >>> >>> #if __WORDSIZE == 64 >>> ... >> >> Right, I used the values which are the one expected to avoid >> ABI breakage. This indeed will break x32 tests build, but the >> idea is to have at 1/3 and 3/3 patch pushed together (which >> I should have made explicit in patch submission). > > No. 1/3 should be backported to 2.26/2.25 branches unchanged. So your suggestion is to have __WORDSIZE == 64 with the wrong values and get them right on the subsequent patch?
On Fri, Oct 20, 2017 at 6:17 AM, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > > > On 19/10/2017 20:39, H.J. Lu wrote: >> On Thu, Oct 19, 2017 at 2:54 PM, Adhemerval Zanella >> <adhemerval.zanella@linaro.org> wrote: >>> >>> >>> On 19/10/2017 19:12, H.J. Lu wrote: >>>> On Thu, Oct 19, 2017 at 2:00 PM, Adhemerval Zanella >>>>> diff --git a/sysdeps/x86_64/nptl/pthread-offsets.h b/sysdeps/x86_64/nptl/pthread-offsets.h >>>>> new file mode 100644 >>>>> index 0000000..16c6b0d >>>>> --- /dev/null >>>>> +++ b/sysdeps/x86_64/nptl/pthread-offsets.h >>>>> @@ -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 >>>>> -- >>>> >>>> These are wrong for x32. You need to add >>>> >>>> #if __WORDSIZE == 64 >>>> ... >>> >>> Right, I used the values which are the one expected to avoid >>> ABI breakage. This indeed will break x32 tests build, but the >>> idea is to have at 1/3 and 3/3 patch pushed together (which >>> I should have made explicit in patch submission). >> >> No. 1/3 should be backported to 2.26/2.25 branches unchanged. > > So your suggestion is to have __WORDSIZE == 64 with the wrong > values and get them right on the subsequent patch? The 1/3 patch should have the CORRECT offsets for x32, which should pass on 2.25 branch and fail on 2.26/2.27 until the 3/3 patch is applied. -- H.J.
On 20/10/2017 11:57, H.J. Lu wrote: > On Fri, Oct 20, 2017 at 6:17 AM, Adhemerval Zanella > <adhemerval.zanella@linaro.org> wrote: >> >> >> On 19/10/2017 20:39, H.J. Lu wrote: >>> On Thu, Oct 19, 2017 at 2:54 PM, Adhemerval Zanella >>> <adhemerval.zanella@linaro.org> wrote: >>>> >>>> >>>> On 19/10/2017 19:12, H.J. Lu wrote: >>>>> On Thu, Oct 19, 2017 at 2:00 PM, Adhemerval Zanella >>>>>> diff --git a/sysdeps/x86_64/nptl/pthread-offsets.h b/sysdeps/x86_64/nptl/pthread-offsets.h >>>>>> new file mode 100644 >>>>>> index 0000000..16c6b0d >>>>>> --- /dev/null >>>>>> +++ b/sysdeps/x86_64/nptl/pthread-offsets.h >>>>>> @@ -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 >>>>>> -- >>>>> >>>>> These are wrong for x32. You need to add >>>>> >>>>> #if __WORDSIZE == 64 >>>>> ... >>>> >>>> Right, I used the values which are the one expected to avoid >>>> ABI breakage. This indeed will break x32 tests build, but the >>>> idea is to have at 1/3 and 3/3 patch pushed together (which >>>> I should have made explicit in patch submission). >>> >>> No. 1/3 should be backported to 2.26/2.25 branches unchanged. >> >> So your suggestion is to have __WORDSIZE == 64 with the wrong >> values and get them right on the subsequent patch? > > The 1/3 patch should have the CORRECT offsets for x32, which > should pass on 2.25 branch and fail on 2.26/2.27 until the 3/3 patch > is applied. I am not following then because I cherry pick the patch on 2.25 branch it is works as is for x32. And it also fails as expected on 2.26 with make nptl/tests.
On Fri, Oct 20, 2017 at 7:08 AM, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > > > On 20/10/2017 11:57, H.J. Lu wrote: >> On Fri, Oct 20, 2017 at 6:17 AM, Adhemerval Zanella >> <adhemerval.zanella@linaro.org> wrote: >>> >>> >>> On 19/10/2017 20:39, H.J. Lu wrote: >>>> On Thu, Oct 19, 2017 at 2:54 PM, Adhemerval Zanella >>>> <adhemerval.zanella@linaro.org> wrote: >>>>> >>>>> >>>>> On 19/10/2017 19:12, H.J. Lu wrote: >>>>>> On Thu, Oct 19, 2017 at 2:00 PM, Adhemerval Zanella >>>>>>> diff --git a/sysdeps/x86_64/nptl/pthread-offsets.h b/sysdeps/x86_64/nptl/pthread-offsets.h >>>>>>> new file mode 100644 >>>>>>> index 0000000..16c6b0d >>>>>>> --- /dev/null >>>>>>> +++ b/sysdeps/x86_64/nptl/pthread-offsets.h >>>>>>> @@ -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 >>>>>>> -- >>>>>> >>>>>> These are wrong for x32. You need to add >>>>>> >>>>>> #if __WORDSIZE == 64 >>>>>> ... >>>>> >>>>> Right, I used the values which are the one expected to avoid >>>>> ABI breakage. This indeed will break x32 tests build, but the >>>>> idea is to have at 1/3 and 3/3 patch pushed together (which >>>>> I should have made explicit in patch submission). >>>> >>>> No. 1/3 should be backported to 2.26/2.25 branches unchanged. >>> >>> So your suggestion is to have __WORDSIZE == 64 with the wrong >>> values and get them right on the subsequent patch? >> >> The 1/3 patch should have the CORRECT offsets for x32, which >> should pass on 2.25 branch and fail on 2.26/2.27 until the 3/3 patch >> is applied. > > I am not following then because I cherry pick the patch on 2.25 branch > it is works as is for x32. And it also fails as expected on 2.26 with > make nptl/tests. This doesn't sound right. Can I try your git branch? -- H.J.
On 20/10/2017 12:43, H.J. Lu wrote: > On Fri, Oct 20, 2017 at 7:08 AM, Adhemerval Zanella > <adhemerval.zanella@linaro.org> wrote: >> >> >> On 20/10/2017 11:57, H.J. Lu wrote: >>> On Fri, Oct 20, 2017 at 6:17 AM, Adhemerval Zanella >>> <adhemerval.zanella@linaro.org> wrote: >>>> >>>> >>>> On 19/10/2017 20:39, H.J. Lu wrote: >>>>> On Thu, Oct 19, 2017 at 2:54 PM, Adhemerval Zanella >>>>> <adhemerval.zanella@linaro.org> wrote: >>>>>> >>>>>> >>>>>> On 19/10/2017 19:12, H.J. Lu wrote: >>>>>>> On Thu, Oct 19, 2017 at 2:00 PM, Adhemerval Zanella >>>>>>>> diff --git a/sysdeps/x86_64/nptl/pthread-offsets.h b/sysdeps/x86_64/nptl/pthread-offsets.h >>>>>>>> new file mode 100644 >>>>>>>> index 0000000..16c6b0d >>>>>>>> --- /dev/null >>>>>>>> +++ b/sysdeps/x86_64/nptl/pthread-offsets.h >>>>>>>> @@ -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 >>>>>>>> -- >>>>>>> >>>>>>> These are wrong for x32. You need to add >>>>>>> >>>>>>> #if __WORDSIZE == 64 >>>>>>> ... >>>>>> >>>>>> Right, I used the values which are the one expected to avoid >>>>>> ABI breakage. This indeed will break x32 tests build, but the >>>>>> idea is to have at 1/3 and 3/3 patch pushed together (which >>>>>> I should have made explicit in patch submission). >>>>> >>>>> No. 1/3 should be backported to 2.26/2.25 branches unchanged. >>>> >>>> So your suggestion is to have __WORDSIZE == 64 with the wrong >>>> values and get them right on the subsequent patch? >>> >>> The 1/3 patch should have the CORRECT offsets for x32, which >>> should pass on 2.25 branch and fail on 2.26/2.27 until the 3/3 patch >>> is applied. >> >> I am not following then because I cherry pick the patch on 2.25 branch >> it is works as is for x32. And it also fails as expected on 2.26 with >> make nptl/tests. > > This doesn't sound right. Can I try your git branch? > I pushed both a release/2.25/master [1] and a release/2.26/master [2] with my test 1/3 patch applied on top of it. The only change for 2.25 was to use #ifdef insteaf of #if to check for __elision existence (since it is not defined on all architectures). For 2.25 I saw no issue while on 2.26 I see: tst-offsets.c: In function ‘do_test’: tst-offsets.c:32:3: error: static assertion failed: "offset of __data.__nusers field of pthread_mutex_t != 12" _Static_assert (offsetof (type, member) == offset, \ ^ tst-offsets.c:38:3: note: in expansion of macro ‘TEST_OFFSET’ TEST_OFFSET (pthread_mutex_t, __data.__nusers, ^~~~~~~~~~~ tst-offsets.c:32:3: error: static assertion failed: "offset of __data.__kind field of pthread_mutex_t != 16" _Static_assert (offsetof (type, member) == offset, \ ^ tst-offsets.c:40:3: note: in expansion of macro ‘TEST_OFFSET’ TEST_OFFSET (pthread_mutex_t, __data.__kind, ^~~~~~~~~~~ tst-offsets.c:32:3: error: static assertion failed: "offset of __data.__list field of pthread_mutex_t != 24" _Static_assert (offsetof (type, member) == offset, \ ^ tst-offsets.c:48:3: note: in expansion of macro ‘TEST_OFFSET’ TEST_OFFSET (pthread_mutex_t, __data.__list, ^~~~~~~~~~~ [1] https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/azanella/bz22298-2.25 [2] https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/azanella/bz22298-2.26
On Fri, Oct 20, 2017 at 9:41 AM, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > > > On 20/10/2017 12:43, H.J. Lu wrote: >> On Fri, Oct 20, 2017 at 7:08 AM, Adhemerval Zanella >> <adhemerval.zanella@linaro.org> wrote: >>> >>> >>> On 20/10/2017 11:57, H.J. Lu wrote: >>>> On Fri, Oct 20, 2017 at 6:17 AM, Adhemerval Zanella >>>> <adhemerval.zanella@linaro.org> wrote: >>>>> >>>>> >>>>> On 19/10/2017 20:39, H.J. Lu wrote: >>>>>> On Thu, Oct 19, 2017 at 2:54 PM, Adhemerval Zanella >>>>>> <adhemerval.zanella@linaro.org> wrote: >>>>>>> >>>>>>> >>>>>>> On 19/10/2017 19:12, H.J. Lu wrote: >>>>>>>> On Thu, Oct 19, 2017 at 2:00 PM, Adhemerval Zanella >>>>>>>>> diff --git a/sysdeps/x86_64/nptl/pthread-offsets.h b/sysdeps/x86_64/nptl/pthread-offsets.h >>>>>>>>> new file mode 100644 >>>>>>>>> index 0000000..16c6b0d >>>>>>>>> --- /dev/null >>>>>>>>> +++ b/sysdeps/x86_64/nptl/pthread-offsets.h >>>>>>>>> @@ -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 >>>>>>>>> -- >>>>>>>> >>>>>>>> These are wrong for x32. You need to add >>>>>>>> >>>>>>>> #if __WORDSIZE == 64 >>>>>>>> ... >>>>>>> >>>>>>> Right, I used the values which are the one expected to avoid >>>>>>> ABI breakage. This indeed will break x32 tests build, but the >>>>>>> idea is to have at 1/3 and 3/3 patch pushed together (which >>>>>>> I should have made explicit in patch submission). >>>>>> >>>>>> No. 1/3 should be backported to 2.26/2.25 branches unchanged. >>>>> >>>>> So your suggestion is to have __WORDSIZE == 64 with the wrong >>>>> values and get them right on the subsequent patch? >>>> >>>> The 1/3 patch should have the CORRECT offsets for x32, which >>>> should pass on 2.25 branch and fail on 2.26/2.27 until the 3/3 patch >>>> is applied. >>> >>> I am not following then because I cherry pick the patch on 2.25 branch >>> it is works as is for x32. And it also fails as expected on 2.26 with >>> make nptl/tests. >> >> This doesn't sound right. Can I try your git branch? >> > > I pushed both a release/2.25/master [1] and a release/2.26/master [2] with > my test 1/3 patch applied on top of it. The only change for 2.25 was to > use #ifdef insteaf of #if to check for __elision existence (since it is > not defined on all architectures). > > For 2.25 I saw no issue while on 2.26 I see: > > tst-offsets.c: In function ‘do_test’: > tst-offsets.c:32:3: error: static assertion failed: "offset of __data.__nusers field of pthread_mutex_t != 12" > _Static_assert (offsetof (type, member) == offset, \ > ^ > tst-offsets.c:38:3: note: in expansion of macro ‘TEST_OFFSET’ > TEST_OFFSET (pthread_mutex_t, __data.__nusers, > ^~~~~~~~~~~ > tst-offsets.c:32:3: error: static assertion failed: "offset of __data.__kind field of pthread_mutex_t != 16" > _Static_assert (offsetof (type, member) == offset, \ > ^ > tst-offsets.c:40:3: note: in expansion of macro ‘TEST_OFFSET’ > TEST_OFFSET (pthread_mutex_t, __data.__kind, > ^~~~~~~~~~~ > tst-offsets.c:32:3: error: static assertion failed: "offset of __data.__list field of pthread_mutex_t != 24" > _Static_assert (offsetof (type, member) == offset, \ > ^ > tst-offsets.c:48:3: note: in expansion of macro ‘TEST_OFFSET’ > TEST_OFFSET (pthread_mutex_t, __data.__list, > ^~~~~~~~~~~ > > [1] https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/azanella/bz22298-2.25 > [2] https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/azanella/bz22298-2.26 You are right. By pure luck, x32 and x86-64 have the same offsets in struct __pthread_mutex_s. Your 1/3 patch is correct for x32. Sorry for the confusion. Thanks. -- H.J.
On Thu, Oct 19, 2017 at 2:00 PM, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > This patch adds a new build test to check for internal fields > offsets uses on pthread_mutex_t static initialization macros > (PTHREAD_MUTEX_INITIALIZER, PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, > PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, and > PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP). > > Currently the only field which is statically initialized to a > non zero value is pthread_mutex_t.__data.__kind value, however > the test also check the offset of __kind, __spins, __elision (if > support), 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/Makefile (tests-internal): Add tst-offsets. > * nptl/tst-offsets.c: New file. > * sysdeps/aarch64/nptl/pthread-offsets.h: Likewise. > * 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. > --- > ChangeLog | 21 ++++++++++++ > nptl/Makefile | 2 +- > nptl/tst-offsets.c | 54 +++++++++++++++++++++++++++++++ > sysdeps/aarch64/nptl/pthread-offsets.h | 5 +++ > sysdeps/alpha/nptl/pthread-offsets.h | 5 +++ > sysdeps/arm/nptl/pthread-offsets.h | 5 +++ > sysdeps/hppa/nptl/pthread-offsets.h | 5 +++ > sysdeps/i386/nptl/pthread-offsets.h | 5 +++ > sysdeps/ia64/nptl/pthread-offsets.h | 5 +++ > sysdeps/m68k/nptl/pthread-offsets.h | 5 +++ > sysdeps/microblaze/nptl/pthread-offsets.h | 5 +++ > sysdeps/mips/nptl/pthread-offsets.h | 13 ++++++++ > sysdeps/nios2/nptl/pthread-offsets.h | 5 +++ > sysdeps/powerpc/nptl/pthread-offsets.h | 15 +++++++++ > sysdeps/s390/nptl/pthread-offsets.h | 15 +++++++++ > sysdeps/sh/nptl/pthread-offsets.h | 5 +++ > sysdeps/sparc/nptl/pthread-offsets.h | 15 +++++++++ > sysdeps/tile/nptl/pthread-offsets.h | 15 +++++++++ > sysdeps/x86_64/nptl/pthread-offsets.h | 5 +++ > 19 files changed, 204 insertions(+), 1 deletion(-) > create mode 100644 nptl/tst-offsets.c > create mode 100644 sysdeps/aarch64/nptl/pthread-offsets.h > create mode 100644 sysdeps/alpha/nptl/pthread-offsets.h > create mode 100644 sysdeps/arm/nptl/pthread-offsets.h > create mode 100644 sysdeps/hppa/nptl/pthread-offsets.h > create mode 100644 sysdeps/i386/nptl/pthread-offsets.h > create mode 100644 sysdeps/ia64/nptl/pthread-offsets.h > create mode 100644 sysdeps/m68k/nptl/pthread-offsets.h > create mode 100644 sysdeps/microblaze/nptl/pthread-offsets.h > create mode 100644 sysdeps/mips/nptl/pthread-offsets.h > create mode 100644 sysdeps/nios2/nptl/pthread-offsets.h > create mode 100644 sysdeps/powerpc/nptl/pthread-offsets.h > create mode 100644 sysdeps/s390/nptl/pthread-offsets.h > create mode 100644 sysdeps/sh/nptl/pthread-offsets.h > create mode 100644 sysdeps/sparc/nptl/pthread-offsets.h > create mode 100644 sysdeps/tile/nptl/pthread-offsets.h > create mode 100644 sysdeps/x86_64/nptl/pthread-offsets.h > > diff --git a/nptl/Makefile b/nptl/Makefile > index d819349..7492b06 100644 > --- a/nptl/Makefile > +++ b/nptl/Makefile > @@ -304,7 +304,7 @@ tests = tst-attr1 tst-attr2 tst-attr3 tst-default-attr \ > tst-thread_local1 tst-mutex-errorcheck tst-robust10 \ > tst-robust-fork tst-create-detached tst-memstream > > -tests-internal := tst-typesizes \ > +tests-internal := tst-typesizes tst-offsets \ > tst-rwlock19 tst-rwlock20 \ > tst-sem11 tst-sem12 tst-sem13 \ > tst-barrier5 tst-signal7 tst-mutex8 tst-mutex8-static \ > diff --git a/nptl/tst-offsets.c b/nptl/tst-offsets.c > new file mode 100644 > index 0000000..0df1155 > --- /dev/null > +++ b/nptl/tst-offsets.c > @@ -0,0 +1,54 @@ > +/* Check pthread internal offsets. > + Copyright (C) 2017 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <http://www.gnu.org/licenses/>. */ > + > +#include <stdio.h> > +#include <pthreadP.h> > +#include <semaphore.h> > + > +#include <pthread-offsets.h> > + > +#define STR_HELPER(x) #x > +#define STR(x) STR_HELPER(x) > + > +static int > +do_test (void) > +{ > +#define TEST_OFFSET(type, member, offset) \ > + _Static_assert (offsetof (type, member) == offset, \ > + "offset of " #member " field of " #type " != " \ > + STR (offset)) > + > + /* Check if internal fields in pthread_mutex_t used by static initializers > + have the expected offset. */ > + TEST_OFFSET (pthread_mutex_t, __data.__nusers, > + __PTHREAD_MUTEX_NUSERS_OFFSET); > + TEST_OFFSET (pthread_mutex_t, __data.__kind, > + __PTHREAD_MUTEX_KIND_OFFSET); > + TEST_OFFSET (pthread_mutex_t, __data.__spins, > + __PTHREAD_MUTEX_SPINS_OFFSET); > +#if __PTHREAD_MUTEX_LOCK_ELISION > + TEST_OFFSET (pthread_mutex_t, __data.__elision, > + __PTHREAD_MUTEX_ELISION_OFFSET); > +#endif > + TEST_OFFSET (pthread_mutex_t, __data.__list, > + __PTHREAD_MUTEX_LIST_OFFSET); > + > + return 0; > +} > + > +#include <support/test-driver.c> > diff --git a/sysdeps/aarch64/nptl/pthread-offsets.h b/sysdeps/aarch64/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..16c6b0d > --- /dev/null > +++ b/sysdeps/aarch64/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/alpha/nptl/pthread-offsets.h b/sysdeps/alpha/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..16c6b0d > --- /dev/null > +++ b/sysdeps/alpha/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/arm/nptl/pthread-offsets.h b/sysdeps/arm/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..9617354 > --- /dev/null > +++ b/sysdeps/arm/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/hppa/nptl/pthread-offsets.h b/sysdeps/hppa/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..8ae01b9 > --- /dev/null > +++ b/sysdeps/hppa/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/i386/nptl/pthread-offsets.h b/sysdeps/i386/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..9617354 > --- /dev/null > +++ b/sysdeps/i386/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/ia64/nptl/pthread-offsets.h b/sysdeps/ia64/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..16c6b0d > --- /dev/null > +++ b/sysdeps/ia64/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/m68k/nptl/pthread-offsets.h b/sysdeps/m68k/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..9617354 > --- /dev/null > +++ b/sysdeps/m68k/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/microblaze/nptl/pthread-offsets.h b/sysdeps/microblaze/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..9617354 > --- /dev/null > +++ b/sysdeps/microblaze/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/mips/nptl/pthread-offsets.h b/sysdeps/mips/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..0ac3eda > --- /dev/null > +++ b/sysdeps/mips/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/nios2/nptl/pthread-offsets.h b/sysdeps/nios2/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..9617354 > --- /dev/null > +++ b/sysdeps/nios2/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/powerpc/nptl/pthread-offsets.h b/sysdeps/powerpc/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..bdda1f1 > --- /dev/null > +++ b/sysdeps/powerpc/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/s390/nptl/pthread-offsets.h b/sysdeps/s390/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..bdda1f1 > --- /dev/null > +++ b/sysdeps/s390/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/sh/nptl/pthread-offsets.h b/sysdeps/sh/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..9617354 > --- /dev/null > +++ b/sysdeps/sh/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/sparc/nptl/pthread-offsets.h b/sysdeps/sparc/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..bdda1f1 > --- /dev/null > +++ b/sysdeps/sparc/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/tile/nptl/pthread-offsets.h b/sysdeps/tile/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..bdda1f1 > --- /dev/null > +++ b/sysdeps/tile/nptl/pthread-offsets.h > @@ -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 > diff --git a/sysdeps/x86_64/nptl/pthread-offsets.h b/sysdeps/x86_64/nptl/pthread-offsets.h > new file mode 100644 > index 0000000..16c6b0d > --- /dev/null > +++ b/sysdeps/x86_64/nptl/pthread-offsets.h > @@ -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 > -- > 2.7.4 > LGTM. Thanks. -- H.J.
diff --git a/nptl/Makefile b/nptl/Makefile index d819349..7492b06 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -304,7 +304,7 @@ tests = tst-attr1 tst-attr2 tst-attr3 tst-default-attr \ tst-thread_local1 tst-mutex-errorcheck tst-robust10 \ tst-robust-fork tst-create-detached tst-memstream -tests-internal := tst-typesizes \ +tests-internal := tst-typesizes tst-offsets \ tst-rwlock19 tst-rwlock20 \ tst-sem11 tst-sem12 tst-sem13 \ tst-barrier5 tst-signal7 tst-mutex8 tst-mutex8-static \ diff --git a/nptl/tst-offsets.c b/nptl/tst-offsets.c new file mode 100644 index 0000000..0df1155 --- /dev/null +++ b/nptl/tst-offsets.c @@ -0,0 +1,54 @@ +/* Check pthread internal offsets. + Copyright (C) 2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <pthreadP.h> +#include <semaphore.h> + +#include <pthread-offsets.h> + +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) + +static int +do_test (void) +{ +#define TEST_OFFSET(type, member, offset) \ + _Static_assert (offsetof (type, member) == offset, \ + "offset of " #member " field of " #type " != " \ + STR (offset)) + + /* Check if internal fields in pthread_mutex_t used by static initializers + have the expected offset. */ + TEST_OFFSET (pthread_mutex_t, __data.__nusers, + __PTHREAD_MUTEX_NUSERS_OFFSET); + TEST_OFFSET (pthread_mutex_t, __data.__kind, + __PTHREAD_MUTEX_KIND_OFFSET); + TEST_OFFSET (pthread_mutex_t, __data.__spins, + __PTHREAD_MUTEX_SPINS_OFFSET); +#if __PTHREAD_MUTEX_LOCK_ELISION + TEST_OFFSET (pthread_mutex_t, __data.__elision, + __PTHREAD_MUTEX_ELISION_OFFSET); +#endif + TEST_OFFSET (pthread_mutex_t, __data.__list, + __PTHREAD_MUTEX_LIST_OFFSET); + + return 0; +} + +#include <support/test-driver.c> diff --git a/sysdeps/aarch64/nptl/pthread-offsets.h b/sysdeps/aarch64/nptl/pthread-offsets.h new file mode 100644 index 0000000..16c6b0d --- /dev/null +++ b/sysdeps/aarch64/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/alpha/nptl/pthread-offsets.h b/sysdeps/alpha/nptl/pthread-offsets.h new file mode 100644 index 0000000..16c6b0d --- /dev/null +++ b/sysdeps/alpha/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/arm/nptl/pthread-offsets.h b/sysdeps/arm/nptl/pthread-offsets.h new file mode 100644 index 0000000..9617354 --- /dev/null +++ b/sysdeps/arm/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/hppa/nptl/pthread-offsets.h b/sysdeps/hppa/nptl/pthread-offsets.h new file mode 100644 index 0000000..8ae01b9 --- /dev/null +++ b/sysdeps/hppa/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/i386/nptl/pthread-offsets.h b/sysdeps/i386/nptl/pthread-offsets.h new file mode 100644 index 0000000..9617354 --- /dev/null +++ b/sysdeps/i386/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/ia64/nptl/pthread-offsets.h b/sysdeps/ia64/nptl/pthread-offsets.h new file mode 100644 index 0000000..16c6b0d --- /dev/null +++ b/sysdeps/ia64/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/m68k/nptl/pthread-offsets.h b/sysdeps/m68k/nptl/pthread-offsets.h new file mode 100644 index 0000000..9617354 --- /dev/null +++ b/sysdeps/m68k/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/microblaze/nptl/pthread-offsets.h b/sysdeps/microblaze/nptl/pthread-offsets.h new file mode 100644 index 0000000..9617354 --- /dev/null +++ b/sysdeps/microblaze/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/mips/nptl/pthread-offsets.h b/sysdeps/mips/nptl/pthread-offsets.h new file mode 100644 index 0000000..0ac3eda --- /dev/null +++ b/sysdeps/mips/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/nios2/nptl/pthread-offsets.h b/sysdeps/nios2/nptl/pthread-offsets.h new file mode 100644 index 0000000..9617354 --- /dev/null +++ b/sysdeps/nios2/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/powerpc/nptl/pthread-offsets.h b/sysdeps/powerpc/nptl/pthread-offsets.h new file mode 100644 index 0000000..bdda1f1 --- /dev/null +++ b/sysdeps/powerpc/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/s390/nptl/pthread-offsets.h b/sysdeps/s390/nptl/pthread-offsets.h new file mode 100644 index 0000000..bdda1f1 --- /dev/null +++ b/sysdeps/s390/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/sh/nptl/pthread-offsets.h b/sysdeps/sh/nptl/pthread-offsets.h new file mode 100644 index 0000000..9617354 --- /dev/null +++ b/sysdeps/sh/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/sparc/nptl/pthread-offsets.h b/sysdeps/sparc/nptl/pthread-offsets.h new file mode 100644 index 0000000..bdda1f1 --- /dev/null +++ b/sysdeps/sparc/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/tile/nptl/pthread-offsets.h b/sysdeps/tile/nptl/pthread-offsets.h new file mode 100644 index 0000000..bdda1f1 --- /dev/null +++ b/sysdeps/tile/nptl/pthread-offsets.h @@ -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 diff --git a/sysdeps/x86_64/nptl/pthread-offsets.h b/sysdeps/x86_64/nptl/pthread-offsets.h new file mode 100644 index 0000000..16c6b0d --- /dev/null +++ b/sysdeps/x86_64/nptl/pthread-offsets.h @@ -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