summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnish Athalye <[email protected]>2019-10-08 21:18:54 -0400
committerAnish Athalye <[email protected]>2019-10-08 21:18:54 -0400
commit8509784d8000d6791a205626e81b03b3f9bf856b (patch)
tree913f2b02614954284d94a645746a19224fc3200d
parenta52d296814d869f16ced4fb68246223b4a64fa38 (diff)
downloadxv6-labs-8509784d8000d6791a205626e81b03b3f9bf856b.tar.gz
xv6-labs-8509784d8000d6791a205626e81b03b3f9bf856b.tar.bz2
xv6-labs-8509784d8000d6791a205626e81b03b3f9bf856b.zip
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);