Recent gcc generates code with unaligned access when architecture supports it. Setting A bit unconditionally causes data-aborts on such code rendering barebox unusable. Signed-off-by: Enrico Scholz <enrico.scholz@xxxxxxxxxxxxxxxxx> --- arch/arm/cpu/start.c | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletions(-) diff --git a/arch/arm/cpu/start.c b/arch/arm/cpu/start.c index 5e09300..ff68783 100644 --- a/arch/arm/cpu/start.c +++ b/arch/arm/cpu/start.c @@ -84,7 +84,16 @@ void __naked __bare_init reset(void) /* disable MMU stuff and caches */ r = get_cr(); r &= ~(CR_M | CR_C | CR_B | CR_S | CR_R | CR_V); - r |= CR_A | CR_I; + r |= CR_I; + + if (!(r & CR_U)) + /* catch unaligned access on architectures which do not + * support unaligned access */ + r |= CR_A; + else + r &= ~CR_A; + + #ifdef __ARMEB__ r |= CR_B; #endif -- 1.7.7.4 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox