@@ -38,8 +38,36 @@ static inline void *__memset(void *s, int c, size_t count)
3838 return s ;
3939}
4040
41+ #define __HAVE_ARCH_MEMMOVE
42+ static inline void * __memmove (void * dest , const void * src , size_t count )
43+ {
44+ char * tmp ;
45+ const char * s ;
46+
47+ if (lkl_ops -> memmove )
48+ return lkl_ops -> memmove (dest , src , count );
49+
50+ /* from lib/string.c */
51+
52+ if (dest <= src ) {
53+ tmp = dest ;
54+ s = src ;
55+ while (count -- )
56+ * tmp ++ = * s ++ ;
57+ } else {
58+ tmp = dest ;
59+ tmp += count ;
60+ s = src ;
61+ s += count ;
62+ while (count -- )
63+ * -- tmp = * -- s ;
64+ }
65+ return dest ;
66+ }
67+
4168#define memcpy (dst , src , len ) __memcpy(dst, src, len)
4269#define memset (s , c , n ) __memset(s, c, n)
70+ #define memmove (dst , src , len ) __memmove(dst, src, len)
4371
4472#if defined(CONFIG_KASAN )
4573
@@ -57,8 +85,10 @@ static inline void *__memset(void *s, int c, size_t count)
5785
5886#undef memcpy
5987#undef memset
88+ #undef memmove
6089extern void * memset (void * dst , int c , __kernel_size_t count );
6190extern void * memcpy (void * dst , const void * src , __kernel_size_t count );
91+ extern void * memmove (void * dest , const void * src , size_t count );
6292
6393#endif /* __SANITIZE_ADDRESS__ */
6494
0 commit comments