[U-Boot] ARMv7 and unaligned access issues

Hi Albert (and everyone else),
For background, we've discussed the problem of ARM and unaligned access before at: http://comments.gmane.org/gmane.comp.boot-loaders.u-boot/132780
Now, to try and summarize things: (1): All ARMv7 hardware must support unaligned access, if set. (2): All gcc 4.7 (and gcc 4.6 from Linaro) default to saying this access will be enabled / supported. (3): In some cases these gcc versions will store string constants unaligned. For example, char mac[16] = "ethaddr" in common/fdt_support.c::fdt_fixup_ethernet (at least one more example exists today, fs/ubifs/super.c::ubifs_mount). This is a valid C construct.
Now, how do we want to handle this? We can do: (a): Tell gcc to use -mno-unaligned-access (b): Set the correct bit to allow unaligned access on ARMv7 (c): Case-by-case fixup of code.
Option 'a' is what we did for v2012.07 with an immediate revert and plan to "fix" things for the next release. Option 'b' is what started the above mentioned thread. Option 'c' seems to be the path forward based on reverting 'a'.
However, this seems very problematic as we're disallowing valid C code and we have to be sure that we don't introduce further breakage later. In my read of the original thread it doesn't seem like this was the intended consequence of saying we'll fix up the code. I would suggest we follow the kernel's lead here and go back and do option b.
participants (1)
-
Tom Rini