diff options
author | cognet <cognet@FreeBSD.org> | 2007-02-26 02:03:48 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2007-02-26 02:03:48 +0000 |
commit | 14a40fa6219d15c1907c6c3d97ea65ca6f6c77da (patch) | |
tree | bcdbd67e9e813d26fb963b97de7a7c78217b203d | |
parent | 271ce5854460a9894cb8c86e2850044b8c5bd432 (diff) | |
download | FreeBSD-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.S | 5 | ||||
-rw-r--r-- | sys/arm/arm/support.S | 23 |
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 |