]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Update all arm code that manipulates the PSR registers to use modern syntax.
authorian <ian@FreeBSD.org>
Sun, 2 Feb 2014 00:48:15 +0000 (00:48 +0000)
committerian <ian@FreeBSD.org>
Sun, 2 Feb 2014 00:48:15 +0000 (00:48 +0000)
commit734d68c62464e8dd39078271c026027f204ed144
treed2d882fb3da5505bc3b87888e43c11065d6c3dad
parent336383e796fb53dd2e812fe72ff6e12721816bb9
Update all arm code that manipulates the PSR registers to use modern syntax.

It turns out the version of gas we're using interprets the old '_all' mask
as 'fc' instead of 'fsxc'.  That is, "all" doesn't really mean "all".

This was the cause of the "wrong-endian register restore" bug that's
been causing problems with some cortex-a9 chips.  The 'endian' bit in the
spsr register would never get changed (it falls into the 'x' mask group)
and the first return-from-exception would fail if the chip had powered on
with garbage in the spsr register that included the big-endian bit.  It's
unknown why this affected only certain cortex-a9 chips.
12 files changed:
sys/arm/arm/cpufunc_asm_arm8.S
sys/arm/arm/cpufunc_asm_sa1.S
sys/arm/arm/cpufunc_asm_sa11x0.S
sys/arm/arm/cpufunc_asm_xscale.S
sys/arm/arm/cpufunc_asm_xscale_c3.S
sys/arm/arm/exception.S
sys/arm/arm/fiq_subr.S
sys/arm/arm/locore.S
sys/arm/arm/setcpsr.S
sys/arm/arm/setstack.s
sys/arm/include/asmacros.h
sys/arm/include/atomic.h