https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89177
Bug ID: 89177 Summary: unaligned memory access in libphobos Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: other Assignee: unassigned at gcc dot gnu.org Reporter: bernd.edlinger at hotmail dot de Target Milestone: --- While bootstrapping gcc on an ARMv7 target, I observe many kernel messages as follows, when running the testsuite: Alignment trap: unittest_static (23723) PC=0x00e280e4 Instr=0xe893000e Address=0x7e8100b5 FSR 0x011 disassembly of armv7l-unknown-linux-gnueabihf/libphobos/src/unittest_static e28080: e51b30d8 ldr r3, [fp, #-216] ; 0xffffff28 e28084: e51b2008 ldr r2, [fp, #-8] e28088: e1520003 cmp r2, r3 e2808c: 2a00001b bcs e28100 <_D3std6digest10murmurhash28__T11MurmurHash3Vki128Vki32Z11MurmurHash33putMFNaNbNiNfMAxhXv+0x468> e28090: e51b20d4 ldr r2, [fp, #-212] ; 0xffffff2c e28094: e51b30d8 ldr r3, [fp, #-216] ; 0xffffff28 e28098: e51b1008 ldr r1, [fp, #-8] e2809c: e1510003 cmp r1, r3 e280a0: 3a000008 bcc e280c8 <_D3std6digest10murmurhash28__T11MurmurHash3Vki128Vki32Z11MurmurHash33putMFNaNbNiNfMAxhXv+0x430> e280a4: e59f21b4 ldr r2, [pc, #436] ; e28260 <_D3std6digest10murmurhash28__T11MurmurHash3Vki128Vki32Z11MurmurHash33putMFNaNbNiNfMAxhXv+0x5c8> e280a8: e08f2002 add r2, pc, r2 e280ac: e24b3048 sub r3, fp, #72 ; 0x48 e280b0: e8920003 ldm r2, {r0, r1} e280b4: e8830003 stm r3, {r0, r1} e280b8: e3002207 movw r2, #519 ; 0x207 e280bc: e24b3048 sub r3, fp, #72 ; 0x48 e280c0: e8930003 ldm r3, {r0, r1} e280c4: eb4cef27 bl 2163d68 <_d_arraybounds> e280c8: e51b3008 ldr r3, [fp, #-8] e280cc: e1a03203 lsl r3, r3, #4 e280d0: e0823003 add r3, r2, r3 e280d4: e50b3018 str r3, [fp, #-24] ; 0xffffffe8 e280d8: e51b3018 ldr r3, [fp, #-24] ; 0xffffffe8 e280dc: e593200c ldr r2, [r3, #12] e280e0: e58d2000 str r2, [sp] e280e4: e893000e ldm r3, {r1, r2, r3} e280e8: e51b00e0 ldr r0, [fp, #-224] ; 0xffffff20 e280ec: ebfffa47 bl e26a10 <_D3std6digest10murmurhash28__T11MurmurHash3Vki128Vki32Z11MurmurHash310putElementMFNaNbNiNfG4kZv> e280f0: e51b3008 ldr r3, [fp, #-8] e280f4: e2833001 add r3, r3, #1 e280f8: e50b3008 str r3, [fp, #-8] e280fc: eaffffdf b e28080 <_D3std6digest10murmurhash28__T11MurmurHash3Vki128Vki32Z11MurmurHash33putMFNaNbNiNfMAxhXv+0x3e8> ldm is not able to use unaligned memory address in r3, the kernel trap emuates the ldm and complains afterwards. The debug info points to this which looks like invalid, casting unaligned data to 4-byte aligned Element: (gdb) b *0x00e280e4 Breakpoint 1 at 0xe280e4: file ../../../../gcc-9-20190127/libphobos/src/std/digest/murmurhash.d, line 521. const numElements = data.length / Element.sizeof; const remainderStart = numElements * Element.sizeof; foreach (ref const Element block; cast(const(Element[]))(data[0 .. remainderStart])) { putElement(block); }