Source: cpl
Version: 7.0-3
Severity: normal
Tags: upstream
Hi,
I noticed this on Ubuntu, where we build armhf packages on arm64
machines which trigger a SIGBUS on unaligned access.
The test cpl_basic_image-test fails:
> root@ethical-kitten:~/cpl-7.0# ./libtool --mode=execute gdb
> cplcore/tests/cpl_image_basic-test
> [...]
> Reading symbols from
> /root/cpl-7.0/cplcore/tests/.libs/lt-cpl_image_basic-test...done.
> (gdb) run
> Starting program: /root/cpl-7.0/cplcore/tests/.libs/lt-cpl_image_basic-test
> Cannot parse expression `.L954 4@r4'.
> warning: Probes-based dynamic linker interface failed.
> Reverting to original interface.
>
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
>
> Program received signal SIGBUS, Bus error.
> cpl_mask_count_window (self=self@entry=0x35338, llx=<optimized out>,
> lly=lly@entry=1, urx=urx@entry=17, ury=15) at cpl_mask.c:1139
> 1139 const size_t countz = *(const size_t*)(pi + i)
> (gdb) bt
> #0 cpl_mask_count_window (self=self@entry=0x35338, llx=<optimized out>,
> lly=lly@entry=1, urx=urx@entry=17, ury=15) at cpl_mask.c:1139
> #1 0xf772397e in cpl_mask_count (in=in@entry=0x35338) at cpl_mask.c:1087
> #2 0x0001e198 in cpl_image_bitwise_test (nx=<optimized out>, ny=<optimized
> out>) at cpl_image_basic-test.c:2100
> #3 0x0001234e in main () at cpl_image_basic-test.c:145
This is the code
> for (; i < (urx & ~CPL_MASK_PAD2); i+= CPL_MASK_WORD2) {
> const size_t countz = *(const size_t*)(pi + i)
> + *(const size_t*)(pi + i + CPL_MASK_WORD);
I guess this access or the preceeding loop
> /* FIXME: Should really ensure byte-wise iteration to word-boundary */
> for (; i < llx - 1 + CPL_MASK_PAD2WORD2(llx - 1); i++) {
needs to become aligned, but it's a bit complicated for me to understand
as someone new to the codebase.
Any ideas? Or could you help & forward upstream please?
Thanks,
--
Iain Lane [ [email protected] ]
Debian Developer [ [email protected] ]
Ubuntu Developer [ [email protected] ]