aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--demo_functionality.c11
-rw-r--r--strings.c15
-rw-r--r--strings.h2
3 files changed, 17 insertions, 11 deletions
diff --git a/demo_functionality.c b/demo_functionality.c
index 051ffd6..7a9139c 100644
--- a/demo_functionality.c
+++ b/demo_functionality.c
@@ -110,17 +110,6 @@ void demo_setup_PL0(void)
puts("copied PL0 code to it's section");
}
-// needed for array initialization in demo_go_unprivileged()
-void *memset(void *s, int c, size_t n)
-{
- char *mem = s;
-
- for (size_t i = 0; i < n; i++)
- mem[i] = c;
-
- return s;
-}
-
void demo_go_unprivileged(void)
{
uint32_t PL0_regs[14] = {0};
diff --git a/strings.c b/strings.c
index 94cb6ac..b518388 100644
--- a/strings.c
+++ b/strings.c
@@ -91,3 +91,18 @@ void memcpy(void *dst, void *src, size_t nbytes)
for (iter *= 4; iter < nbytes; iter++)
((volatile uint8_t*) dst)[iter] = ((uint8_t*) src)[iter];
}
+
+// keep in mind memset is also needed for array initialization, like
+// uint32_t buf[16] = {0};
+// gcc compiles this to memset call
+
+void *memset(void *s, int c, size_t n)
+{
+ volatile char *mem = s;
+
+ for (size_t i = 0; i < n; i++)
+ mem[i] = c;
+
+ return s;
+}
+
diff --git a/strings.h b/strings.h
index 1eb291c..3c49b7e 100644
--- a/strings.h
+++ b/strings.h
@@ -26,4 +26,6 @@ size_t strlen(char string[]);
void memcpy(void *dst, void *src, size_t nbytes);
+void *memset(void *s, int c, size_t n);
+
#endif // STRINGS_H