From 8509784d8000d6791a205626e81b03b3f9bf856b Mon Sep 17 00:00:00 2001 From: Anish Athalye Date: Tue, 8 Oct 2019 21:18:54 -0400 Subject: Add implementations of memcmp and memcpy to ulib This is necessary because gcc may generate calls to memcmp, memset, memcpy, and memmove when compiling with -nostdlib. --- user/ulib.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'user/ulib.c') diff --git a/user/ulib.c b/user/ulib.c index ddda0f5..8bfba5d 100644 --- a/user/ulib.c +++ b/user/ulib.c @@ -107,3 +107,23 @@ memmove(void *vdst, const void *vsrc, int n) *dst++ = *src++; return vdst; } + +int +memcmp(const void *s1, const void *s2, uint n) +{ + const char *p1 = s1, *p2 = s2; + while (n-- > 0) { + if (*p1 != *p2) { + return *p1 - *p2; + } + p1++; + p2++; + } + return 0; +} + +void * +memcpy(void *dst, const void *src, uint n) +{ + return memmove(dst, src, n); +} -- cgit v1.2.3 From f2df0fa5471c9951ff9a12bea51efbe22afb196e Mon Sep 17 00:00:00 2001 From: Anish Athalye Date: Tue, 8 Oct 2019 21:24:03 -0400 Subject: Fix ulib's memmove to handle overlap when src 0) - *dst++ = *src++; + if (src > dst) { + while(n-- > 0) + *dst++ = *src++; + } else { + dst += n; + src += n; + while(n-- > 0) + *--dst = *--src; + } return vdst; } -- cgit v1.2.3