How to print test log in case of failures?

James Clarke jrtc27 at debian.org
Mon Jan 22 18:10:15 UTC 2018


On 22 Jan 2018, at 11:34, Gianfranco Costamagna <locutusofborg at debian.org> wrote:
> Hello, I'm trying to sort out an armhf alignment issue
> that happens with haskell-th-utilities in Ubuntu
> (but I'm pretty sure this isn't an Ubuntu-specific issue, reason
> for Ubuntu to fail is probably because stuff is run on top of an arm64
> kernel).
> 
> Test suite logged to: dist-ghc/test/th-utilities-0.2.0.1-test.log
> 0 of 1 test suites (0 of 1 test cases) passed.
> /usr/share/cdbs/1/class/hlibrary.mk:154: recipe for target 'check-ghc-stamp' failed
> make: *** [check-ghc-stamp] Error 1
> 
> this is what is printed.
> 
> Now, how can we print that file in case of failures?
> I tried an override_dh_auto_test but it seems to be a cdbs packaging, and I don't know
> if haskell helpers have some "hooks" to intercept failures
> (it would be even better to patch the build system to automatically print the content
> of the testsuite log in case of failures BTW)
> 
> If you are interested, this is the log
> https://launchpad.net/ubuntu/+source/haskell-th-utilities/0.2.0.1-1build1/+build/13678151
> 
> Any help is appreciated :)
> 
> (I'm ccing James, since he knows a lot on this aligment/topic :) )

It's reproducible on amdahl in the sid_armhf-dchroot chroot. The log file
doesn't have any more information:

> Test suite test: RUNNING...
> Test suite test: FAIL
> Test suite logged to: dist-ghc/test/th-utilities-0.2.0.1-test.log

However, running the same command as the build but with --verbose, i.e.
debian/hlibrary.setup test --builddir=dist-ghc --show-details=direct --verbose,
shows that dist-ghc/build/test/test is being run. Running this gives a Bus
error, and under gdb:

> Program received signal SIGBUS, Bus error.                                                                                        
> 0x00010b8c in cqDA_info$def ()
> (gdb) bt
> #0  0x00010b8c in cqDA_info$def ()
> #1  0xf742324c in ?? ()
> Backtrace stopped: previous frame identical to this frame (corrupt stack?)
> (gdb) disas
> Dump of assembler code for function cqDA_info$def:
>    0x00010b84 <+0>:     ldrd    r0, [r7, #3]
>    0x00010b88 <+4>:     ldr     r7, [r5, #4]
> => 0x00010b8c <+8>:     strd    r0, [r7, #5]
>    0x00010b90 <+12>:    movw    r7, #39312      ; 0x9990
>    0x00010b94 <+16>:    ldr     r0, [r5, #12]!
>    0x00010b98 <+20>:    movt    r7, #189        ; 0xbd
>    0x00010b9c <+24>:    add     r7, r7, #1
>    0x00010ba0 <+28>:    bx      r0
> End of assembler dump.
> (gdb) p/x $r7
> $1 = 0xf742324c

So, yeah, $r7+0x5 doesn't look very aligned to me, and although Armv7 (and v8)
support unaligned accesses, they only guarantee to do so for up to 32-bit
values (or at least, that's what GCC assumes on Armv7), but STRD is a 64-bit
store. Looking at the local .o files, cqDA_info$def is coming from
dist-ghc/build/test/test-tmp/TH/Derive/StorableSpec.o, i.e.
test/TH/Derive/StorableSpec.hs, but given all the peek/poke/castPtr operations
are in src/TH/Derive/Storable.hs, I assume it's really something that's been
inlined. That whole file looks like a major source of unaligned accesses, at a
glance, and likely needs some attention to support a potential lack of 64-bit
(and, in general, any) unaligned accesses.

Regards,
James




More information about the Pkg-haskell-maintainers mailing list