summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnish Athalye2019-10-08 21:18:54 -0400
committerAnish Athalye2019-10-08 21:18:54 -0400
commit8509784d8000d6791a205626e81b03b3f9bf856b (patch)
tree913f2b02614954284d94a645746a19224fc3200d
parenta52d296814d869f16ced4fb68246223b4a64fa38 (diff)
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.
-rw-r--r--user/ulib.c20
-rw-r--r--user/user.h2
2 files changed, 22 insertions, 0 deletions
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);
+}
diff --git a/user/user.h b/user/user.h
index 03af731..b71ecda 100644
--- a/user/user.h
+++ b/user/user.h
@@ -38,3 +38,5 @@ void* memset(void*, int, uint);
void* malloc(uint);
void free(void*);
int atoi(const char*);
+int memcmp(const void *, const void *, uint);
+void *memcpy(void *, const void *, uint);