One of the tests relying on sem_t's layout gets the wrong value for versions of
glibc newer than 2.21 on platforms that don't have 64-bit atomics (e.g. ARM).
This commit fixes the test to work with:
- versions of glibc >= 2.21 on platforms with 64-bit atomics: unchanged
- versions of glibc >= 2.21 on platforms without 64-bit atomics: the semaphore
value is shifted by SEM_VALUE_SHIFT (which is set to 1 in glibc's internal
headers)
- versions of glibc < 2.21: unchanged
See the glibc 2.23 sources:
- sysdeps/nptl/internaltypes.h (struct new_sem for glibc >= 2.21 and struct old_sem for glibc < 2.21)
- nptl/sem_getvalue.c
This was uncovered on one of the new buildbots that we are trying to move to
production (ARM with glibc 2.23). I have tested on x86_64 with glibc 2.21 and
2.17, AArch64 with glibc 2.21 and ARM with glibc 2.19 and 2.23.