summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorAlbert ARIBAUD <albert.u.boot@aribaud.net>2017-02-27 20:19:07 +0100
committerTom Rini <trini@konsulko.com>2017-03-01 21:28:31 -0500
commit6b4e9426834580810790ecfa924979d61c5c1987 (patch)
tree79d6c5fa93e5dc7af0f6371c34c9bb21e314dd82 /arch
parentee6fb217cbf3e81cd2c5f1a13f989cf59016781f (diff)
downloadu-boot-imx-6b4e9426834580810790ecfa924979d61c5c1987.zip
u-boot-imx-6b4e9426834580810790ecfa924979d61c5c1987.tar.gz
u-boot-imx-6b4e9426834580810790ecfa924979d61c5c1987.tar.bz2
armv5te: make 'ret lr' produce iinterworking 'bx lr'
Current ARM assembler helper for the 'return to caller' pseudo-instruction turns 'ret lr' into 'mov pc, lr' for ARMv5TE. This causes the core to remain in its current ARM state even when the routine doing the 'ret' was called from Thumb-1 state, triggering an undefined instruction exception. This causes early run-time failures in all boards compiled using the Thumb-1 instruction set (for instance the Open-RD family). ARMv5TE supports 'bx lr' which properly implements interworking and thus correctly returns to Thumb-1 state from ARM state. This change makes 'ret lr' turn into 'bx lr' for ARMv5TE. Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/include/asm/assembler.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h
index ae1e42f..c56daf2 100644
--- a/arch/arm/include/asm/assembler.h
+++ b/arch/arm/include/asm/assembler.h
@@ -59,7 +59,7 @@
.irp c,,eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,hs,lo
.macro ret\c, reg
-#if defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__)
+#if defined(__ARM_ARCH_5E__)
mov\c pc, \reg
#else
.ifeqs "\reg", "lr"