
Hi,
On Thu, 2017-07-13 at 01:43 +0100, Måns Rullgård wrote:
Maxime Ripard maxime.ripard@free-electrons.com writes:
Hi,
I recently got a gcc 7.1 based toolchain, and it seems like it generates unaligned code, specifically in the net_set_ip_header function in my case.
Whenever some packet is sent, this data abort is triggered:
=> setenv ipaddr 10.42.0.1; ping 10.42.0.254 using musb-hdrc, OUT ep1out IN ep1in STATUS ep2in MAC de:ad:be:ef:00:01 HOST MAC de:ad:be:af:00:00 RNDIS ready musb-hdrc: peripheral reset irq lost! high speed config #2: 2 mA, Ethernet Gadget, using RNDIS USB RNDIS network up! Using usb_ether device data abort pc : [<7ff9db10>] lr : [<7ff9f00c>] reloc pc : [<4a043b10>] lr : [<4a04500c>] sp : 7bf37cc8 ip : 00000000 fp : 7ff6236c r10: 7ffed2b8 r9 : 7bf39ee8 r8 : 7ffed2b8 r7 : 00000001 r6 : 00000000 r5 : 0000002a r4 : 7ffed30e r3 : 14000045 r2 : 01002a0a r1 : fe002a0a r0 : 7ffed30e Flags: nZCv IRQs off FIQs off Mode SVC_32 Resetting CPU ...
I'm running into the same issue using a Buildroot GCC 7 toolchain.
[snip]
What hardware did this happen on? If it was on ARMv5, adding the packed attribute is probably the correct fix. If it was ARMv6 or later, something else is broken as well.
FWIW, the board I'm using is ARMv5 (an i.MX28).
Jörg Krause