aboutsummaryrefslogtreecommitdiff
path: root/src/kern/stdlibrepl.c
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2021-10-26 00:10:06 -0600
committerJosh Rahm <joshuarahm@gmail.com>2021-10-26 00:10:06 -0600
commitf9b12f748b557994b958115c04fd1591b322248e (patch)
tree7d80680edadf5b0018944966af64f8773bfa8f1a /src/kern/stdlibrepl.c
parentdbbe83bd8882fe18e26f6305a1f425145bfea8db (diff)
parent90eb3a0b79bfef67c70dc545b49c48928eea05f4 (diff)
downloadstm32l4-f9b12f748b557994b958115c04fd1591b322248e.tar.gz
stm32l4-f9b12f748b557994b958115c04fd1591b322248e.tar.bz2
stm32l4-f9b12f748b557994b958115c04fd1591b322248e.zip
Merge branch 'christmas' into HEAD
Diffstat (limited to 'src/kern/stdlibrepl.c')
-rw-r--r--src/kern/stdlibrepl.c36
1 files changed, 33 insertions, 3 deletions
diff --git a/src/kern/stdlibrepl.c b/src/kern/stdlibrepl.c
index 588191b..676b820 100644
--- a/src/kern/stdlibrepl.c
+++ b/src/kern/stdlibrepl.c
@@ -1,4 +1,5 @@
#include "arch.h"
+#include "kern/panic.h"
/*
* Replacement for common stdlib functions that don't exist
* on the ARM bare-metal compilation environment.
@@ -15,14 +16,43 @@ size_t strlen(char* ch)
#ifdef ARCH_STM32L4
-void memcpy(void* dest, void* src, size_t size)
+void* memcpy(void* dest, const void* src, size_t size)
{
uint8_t* dest_ = dest;
- uint8_t* src_ = src;
+ const uint8_t* src_ = src;
- while(size --) {
+ while (size--) {
*(dest_++) = *(src_++);
}
+
+ return dest;
+}
+
+int memcmp(const void* s1_, const void* s2_, size_t size)
+{
+ const uint8_t* s1 = s1_;
+ const uint8_t* s2 = s2_;
+
+ while (size--) {
+ if (*s1 != *s2) {
+ if (*s1 > *s2) {
+ return 1;
+ } else {
+ return -1;
+ }
+ }
+
+ ++s1;
+ ++s2;
+ }
+
+ return 0;
+}
+
+void __assert_func(
+ const char* file, int line, const char* func, const char* failedexpr)
+{
+ panic("Assertion failed: %s:%d in %s at %s\n", file, line, func, failedexpr);
}
#endif