When an architecture defines __HAVE_ARCH_MEMMOVE then the generic non optimized memmove is not compiled in. It is needed on ARM64 as a fallback in certain cases though, so make it available as __default_memmove just like done with __default_memcpy already. Reviewed-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> --- lib/string.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/string.c b/lib/string.c index 374f326143..98dd3cffdd 100644 --- a/lib/string.c +++ b/lib/string.c @@ -666,7 +666,6 @@ void *mempcpy(void *dest, const void *src, size_t count) } EXPORT_SYMBOL(mempcpy); -#ifndef __HAVE_ARCH_MEMMOVE /** * memmove - Copy one area of memory to another * @dest: Where to copy to @@ -675,7 +674,7 @@ EXPORT_SYMBOL(mempcpy); * * Unlike memcpy(), memmove() copes with overlapping areas. */ -void * memmove(void * dest,const void *src,size_t count) +void *__default_memmove(void * dest,const void *src,size_t count) { char *tmp, *s; @@ -694,6 +693,13 @@ void * memmove(void * dest,const void *src,size_t count) return dest; } +EXPORT_SYMBOL(__default_memmove); + +#ifndef __HAVE_ARCH_MEMMOVE +void *memmove(void * dest, const void *src, size_t count) + __alias(__default_memmove); +void *__memmove(void * dest, const void *src, size_t count) + __alias(__default_memmove); #endif EXPORT_SYMBOL(memmove); -- 2.39.5