Starting with 2.21, glibc can use one of 2 layouts for semaphores:
architectures that don't HAVE_64B_ATOMIC use an uint32_t field
with semaphore value, then a private field, then a waiting thread
count field - this is the layout currently assumed by the test.
However, HAVE_64B_ATOMIC arches use a fused uint64_t field that
contains the value in low bits and waiting thread count in high bits,
followed by a private field.
This resulted in taking private field from the wrong offset on 64-bit
atomic platforms (the test still passed, but didn't actually test
the private field). On big-endian platforms, this resulted in a fail,
since the first 4 bytes overlay the thread count field, and not
the value field.
Found while porting ASan to s390x.