Recently I tracked down a target crash problem in an ARM EABI
configuration running on a Cortex-A9 board to an unaligned access fault.
The startup code provided by the customer for this board doesn't
enable the MMU, and unaligned access support requires the MMU to be
enabled per
http://infocenter.arm.com/help/topic/com.arm.doc.faqs/ka13671.html
The GCC manual presently says "By default unaligned access is disabled
for all pre-ARMv6 and all ARMv6-M architectures, and enabled for all
other architectures." I think it would be safer for GCC to default to
-maligned-access only in configurations that are known also to enable
the MMU, e.g. GNU/Linux. Code being built for bare-metal ARM EABI
targets typically includes low-level startup code and boot loaders that
run before the MMU is enabled, and likewise I don't think RTEMS,
uCLinux, etc imply MMU support, either.
We could tell all ARM EABI users to build with -mno-unaligned-access,
but if multilibs for (say) -march=armv7-a are being provided then those
must also be built with the "safe" setting to avoid crashes in e.g. the
Newlib memcpy implementation. I think it would be more user-friendly
just to change the default.
ARM maintainers, WDYT? I will work up and test a patch if there is
agreement that this is a reasonable thing to do.
-Sandra