Commit f230e80b authored by Greg Ungerer's avatar Greg Ungerer

m68k: fix memcpy to unmatched/unaligned source and dest on 68000

The original 68000 processors cannot copy 16bit or larger quantities from
odd addresses. All newer members of the 68k family (including ColdFire)
can do this.

In the current memcpy implementation after trying to align the destination
address to a 16bit boundary if we end up with an odd source address we go
off and try to copy multi-byte quantities from it. This will trap on the
68000.

The only solution if we end with an odd source address is to byte wise
copy the whole memcpy region. We only need to do this if we are supporting
original 68000 processors.
Signed-off-by: default avatarGreg Ungerer <gerg@uclinux.org>
parent 899e3ee4
...@@ -22,6 +22,15 @@ void *memcpy(void *to, const void *from, size_t n) ...@@ -22,6 +22,15 @@ void *memcpy(void *to, const void *from, size_t n)
from = cfrom; from = cfrom;
n--; n--;
} }
#if defined(CONFIG_M68000)
if ((long)from & 1) {
char *cto = to;
const char *cfrom = from;
for (; n; n--)
*cto++ = *cfrom++;
return xto;
}
#endif
if (n > 2 && (long)to & 2) { if (n > 2 && (long)to & 2) {
short *sto = to; short *sto = to;
const short *sfrom = from; const short *sfrom = from;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment