Bug#1029568: xsimd: tests fail on armhf: Cannot access memory, store location is not properly aligned

Drew Parsons dparsons at debian.org
Tue Jan 24 16:46:21 GMT 2023


Source: xsimd
Version: 10.0.0-1
Severity: normal
Control: forwarded -1 https://github.com/xtensor-stack/xsimd/issues/889

The build of xsimd 10.0.0-1 fails on armhf due to test failure:

test_xsimd: ./include/xsimd/types/xsimd_batch.hpp:567: void xsimd::batch<T, A>::store_aligned(U*) const [with U = unsigned char; T = unsigned char; A = xsimd::neon]: Assertion `((reinterpret_cast<uintptr_t>(mem) % A::alignment()) == 0) && "store location is not properly aligned"' failed.

A gdb backtrace shows that xsimd::neon is involved:

Reading symbols from ./test_xsimd...
(gdb) run
Starting program: /home/xsimd/xsimd-10.0.0/obj-arm-linux-gnueabihf/test/test_xsimd 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
[doctest] doctest version is "2.4.9"
[doctest] run with "--help" for options
test_xsimd: ./include/xsimd/types/xsimd_batch.hpp:567: void xsimd::batch<T, A>::store_aligned(U*) const [with U = unsigned char; T = unsigned char; A = xsimd::neon]: Assertion `((reinterpret_cast<uintptr_t>(mem) % A::alignment()) == 0) && "store location is not properly aligned"' failed.

Program received signal SIGABRT, Aborted.
__libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:47
47	../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S: No such file or directory.
(gdb) bt
#0  __libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:47
#1  0xf7cce42c in __pthread_kill_implementation (threadid=4160618528, signo=signo at entry=6, no_tid=no_tid at entry=0) at pthread_kill.c:43
#2  0xf7cce470 in __pthread_kill_internal (signo=6, threadid=<optimized out>) at pthread_kill.c:78
#3  0xf7c9d322 in __GI_raise (sig=sig at entry=6) at ../sysdeps/posix/raise.c:26
#4  0xf7c8e0ac in __GI_abort () at abort.c:79
#5  0xf7c98850 in __assert_fail_base (fmt=0x20 <error: Cannot access memory at address 0x20>, assertion=0x122e7dc "((reinterpret_cast<uintptr_t>(mem) % A::alignment()) == 0) && \"store location is not properly aligned\"", assertion at entry=0xfffeed60 "", 
    file=file at entry=0x20 <error: Cannot access memory at address 0x20>, line=line at entry=567, function=0x122e76c "void xsimd::batch<T, A>::store_aligned(U*) const [with U = unsigned char; T = unsigned char; A = xsimd::neon]", function at entry=0xf7fe0020 "") at assert.c:92
#6  0xf7c988ce in __GI___assert_fail (assertion=0xfffeed60 "", file=0x20 <error: Cannot access memory at address 0x20>, line=567, function=0xf7fe0020 "") at assert.c:101
#7  0x00eb4c86 in xsimd::batch<unsigned char, xsimd::neon>::store_aligned<unsigned char> (mem=0xfffeee68 "`b@\001\060\357\376\377\250\356\376\377\267\356\376\377$b@\001\307\356\376\377\001\001\001\001\001\001\001\001 a?\001\001\001\001\001 a?\001\001\062<F", this=<optimized out>)
    at ./include/xsimd/types/xsimd_batch.hpp:567
#8  0x00f2c8b0 in xsimd::batch<unsigned char, xsimd::neon>::store_aligned<unsigned char> (mem=<optimized out>, this=<optimized out>) at ./test/test_batch.cpp:707
#9  xsimd::kernel::swizzle<xsimd::neon, unsigned char, unsigned char, (unsigned char)8, (unsigned char)9, (unsigned char)10, (unsigned char)11, (unsigned char)12, (unsigned char)13, (unsigned char)14, (unsigned char)15, (unsigned char)0, (unsigned char)1, (unsigned char)0, (unsigned char)1, (unsigned char)0, (unsigned char)1, (unsigned char)0, (unsigned char)1> (self=...) at ./include/xsimd/types/../arch/./xsimd_neon.hpp:2602
#10 xsimd::swizzle<unsigned char, xsimd::neon, unsigned char, (unsigned char)8, (unsigned char)9, (unsigned char)10, (unsigned char)11, (unsigned char)12, (unsigned char)13, (unsigned char)14, (unsigned char)15, (unsigned char)0, (unsigned char)1, (unsigned char)0, (unsigned char)1, (unsigned char)0, (unsigned char)1, (unsigned char)0, (unsigned char)1> (mask=..., x=...) at ./include/xsimd/types/xsimd_api.hpp:2048
#11 xsimd::kernel::detail::reduce<xsimd::kernel::reduce_max<xsimd::neon, unsigned char>(xsimd::batch<unsigned char, xsimd::neon> const&, xsimd::generic const&)::{lambda(xsimd::batch<unsigned char, xsimd::neon> const&, xsimd::batch<unsigned char, xsimd::neon> const&)#1}, xsimd::neon, unsigned char, 16u>(xsimd::kernel::reduce_max<xsimd::neon, unsigned char>(xsimd::batch<unsigned char, xsimd::neon> const&, xsimd::generic const&)::{lambda(xsimd::batch<unsigned char, xsimd::neon> const&, xsimd::batch<unsigned char, xsimd::neon> const&)#1}, xsimd::batch<unsigned char, xsimd::neon> const&, std::integral_constant<unsigned int, 16u>) (op=..., self=...) at ./include/xsimd/types/../arch/././generic/xsimd_generic_math.hpp:2000
#12 xsimd::kernel::reduce_max<xsimd::neon, unsigned char> (self=...) at ./include/xsimd/types/../arch/././generic/xsimd_generic_math.hpp:2009
#13 xsimd::reduce_max<unsigned char, xsimd::neon> (x=...) at ./include/xsimd/types/xsimd_api.hpp:905
#14 batch_test<xsimd::batch<unsigned char, xsimd::neon> >::test_horizontal_operations (this=this at entry=0xfffef050) at ./test/test_batch.cpp:708
#15 0x00eb8888 in DOCTEST_ANON_TMP_623<xsimd::batch<unsigned char> > () at ./test/test_batch.cpp:881
#16 0x00e1c036 in doctest::Context::run (this=this at entry=0xfffef3f0) at /usr/include/doctest/doctest.h:6930
#17 0x00e07bf6 in main (argc=<optimized out>, argv=<optimized out>) at /usr/include/doctest/doctest.h:7008


It might be best to treat armhf as a non-supported arch
(i.e. don't run build-time tests, perhaps not debian/tests either)
at least until upstream resolves
https://github.com/xtensor-stack/xsimd/issues/889

That said, it might now be possible to treat armel as a supported
arch. Diagnosing the armhf problem on the Debian porterbox
amdahl.debian.org, the sigabrt is reproducible on an armhf chroot. But
testing also in a armel chroot, the tests pass.

xsimd is supposed to have fixed scalar tests on "non-supported"
architectures, e.g. https://github.com/xtensor-stack/xsimd/pull/785
So possibly that is what passed on armel. If that is
the case then it might be safe to run xsimd tests on all arches
(meaning that scalar tests would be run on non-supported arches).

But in any case it looks like we should skip armhf tests for the time
being.



More information about the debian-science-maintainers mailing list