ARM: 6006/1: ARM: Use the correct NOP size in memmove for Thumb-2 kernel builds
When compiling the kernel to Thumb-2, using a 16-bit NOP in the memmove() implementation causes the preceding ADD PC instruction to branch incorrectly in the middle of a 32-bit LDR or STR instruction. The memmove() code is now similar to the memcpy() template. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
committed by
Russell King
parent
782a0fd167
commit
fd522a8dec
@@ -74,7 +74,7 @@ ENTRY(memmove)
|
|||||||
rsb ip, ip, #32
|
rsb ip, ip, #32
|
||||||
addne pc, pc, ip @ C is always clear here
|
addne pc, pc, ip @ C is always clear here
|
||||||
b 7f
|
b 7f
|
||||||
6: nop
|
6: W(nop)
|
||||||
W(ldr) r3, [r1, #-4]!
|
W(ldr) r3, [r1, #-4]!
|
||||||
W(ldr) r4, [r1, #-4]!
|
W(ldr) r4, [r1, #-4]!
|
||||||
W(ldr) r5, [r1, #-4]!
|
W(ldr) r5, [r1, #-4]!
|
||||||
@@ -85,7 +85,7 @@ ENTRY(memmove)
|
|||||||
|
|
||||||
add pc, pc, ip
|
add pc, pc, ip
|
||||||
nop
|
nop
|
||||||
nop
|
W(nop)
|
||||||
W(str) r3, [r0, #-4]!
|
W(str) r3, [r0, #-4]!
|
||||||
W(str) r4, [r0, #-4]!
|
W(str) r4, [r0, #-4]!
|
||||||
W(str) r5, [r0, #-4]!
|
W(str) r5, [r0, #-4]!
|
||||||
|
Reference in New Issue
Block a user