--- /dev/null
+--- a/arch/mips/boot/compressed/string.c
++++ b/arch/mips/boot/compressed/string.c
+@@ -26,3 +26,19 @@ void *memset(void *s, int c, size_t n)
+ ss[i] = c;
+ return s;
+ }
++
++void *memmove(void *__dest, __const void *__src, size_t count)
++{
++ unsigned char *d = __dest;
++ const unsigned char *s = __src;
++
++ if (__dest == __src)
++ return __dest;
++
++ if (__dest < __src)
++ return memcpy(__dest, __src, count);
++
++ while (count--)
++ d[count] = s[count];
++ return __dest;
++}
--- /dev/null
+--- a/arch/mips/boot/compressed/string.c
++++ b/arch/mips/boot/compressed/string.c
+@@ -26,3 +26,19 @@ void *memset(void *s, int c, size_t n)
+ ss[i] = c;
+ return s;
+ }
++
++void *memmove(void *__dest, __const void *__src, size_t count)
++{
++ unsigned char *d = __dest;
++ const unsigned char *s = __src;
++
++ if (__dest == __src)
++ return __dest;
++
++ if (__dest < __src)
++ return memcpy(__dest, __src, count);
++
++ while (count--)
++ d[count] = s[count];
++ return __dest;
++}