summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2007-02-26 02:03:48 +0000
committercognet <cognet@FreeBSD.org>2007-02-26 02:03:48 +0000
commit14a40fa6219d15c1907c6c3d97ea65ca6f6c77da (patch)
treebcdbd67e9e813d26fb963b97de7a7c78217b203d
parent271ce5854460a9894cb8c86e2850044b8c5bd432 (diff)
downloadFreeBSD-src-14a40fa6219d15c1907c6c3d97ea65ca6f6c77da.zip
FreeBSD-src-14a40fa6219d15c1907c6c3d97ea65ca6f6c77da.tar.gz
Erm we can't change the value of arm_memcpy if we're running from flash.
Instead, make memcpy() check if we're running from flash, and avoid using arm_memcpy if we're doing so.
-rw-r--r--sys/arm/arm/locore.S5
-rw-r--r--sys/arm/arm/support.S23
2 files changed, 23 insertions, 5 deletions
diff --git a/sys/arm/arm/locore.S b/sys/arm/arm/locore.S
index 1fad8d1..0a0280c 100644
--- a/sys/arm/arm/locore.S
+++ b/sys/arm/arm/locore.S
@@ -95,11 +95,6 @@ do_copy:
sub r0, r0, r9
add r0, r0, r8
mov r4, r0
- /* Make sure _arm_memcpy is NULL */
- ldr r3, .L_arm_memcpy
- ldr r3, [r3]
- mov r5, #0
- str r5, [r3]
bl memcpy
ldr r0, Lram_offset
add pc, r4, r0
diff --git a/sys/arm/arm/support.S b/sys/arm/arm/support.S
index 44d80f4..c2602bd 100644
--- a/sys/arm/arm/support.S
+++ b/sys/arm/arm/support.S
@@ -871,6 +871,18 @@ ENTRY(memmove)
#if !defined(__XSCALE__)
ENTRY(memcpy)
/* save leaf functions having to store this away */
+ /* Do not check arm_memcpy if we're running from flash */
+#ifdef FLASHADDR
+#if FLASHADDR > PHYSADDR
+ ldr r3, =FLASHADDR
+ cmp r3, pc
+ bls .Lnormal
+#else
+ ldr r3, =FLASHADDR
+ cmp r3, pc
+ bhi .Lnormal
+#endif
+#endif
ldr r3, .L_arm_memcpy
ldr r3, [r3]
cmp r3, #0
@@ -1096,6 +1108,17 @@ ENTRY(memcpy)
pld [r1]
cmp r2, #0x0c
ble .Lmemcpy_short /* <= 12 bytes */
+#ifdef FLASHADDR
+#if FLASHADDR > PHYSADDR
+ ldr r3, =FLASHADDR
+ cmp r3, pc
+ bls .Lnormal
+#else
+ ldr r3, =FLASHADDR
+ cmp r3, pc
+ bhi .Lnormal
+#endif
+#endif
ldr r3, .L_arm_memcpy
ldr r3, [r3]
cmp r3, #0
OpenPOWER on IntegriCloud