From f4cd7c2274e1d68961dee44bdf6f21d2172245cd Mon Sep 17 00:00:00 2001 From: Matthias Kruk Date: Tue, 19 Nov 2019 15:42:26 +0900 Subject: [PATCH] Add standard C library for use inside the kernel --- kernel/klibc/Makefile | 16 ++++++++++++++++ kernel/klibc/string.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 kernel/klibc/Makefile create mode 100644 kernel/klibc/string.c diff --git a/kernel/klibc/Makefile b/kernel/klibc/Makefile new file mode 100644 index 0000000..6ea855a --- /dev/null +++ b/kernel/klibc/Makefile @@ -0,0 +1,16 @@ +OUTPUT = klibc.a +OBJECTS = string.o +PHONY = clean +INCLUDES = -I../include -I../../include +CFLAGS = -m32 -Wall -nostdlib -nodefaultlibs -nostartfiles -ffreestanding $(INCLUDES) +ASFLAGS = $(CFLAGS) + +all: $(OUTPUT) + +$(OUTPUT): $(OBJECTS) + ar -rc $@ $^ + +clean: + rm -rf $(OUTPUT) $(OBJECTS) + +.PHONY: $(PHONY) diff --git a/kernel/klibc/string.c b/kernel/klibc/string.c new file mode 100644 index 0000000..e3a9224 --- /dev/null +++ b/kernel/klibc/string.c @@ -0,0 +1,38 @@ +#include +#include + +size_t strlen(const char *s) +{ + size_t ret_val; + + for(ret_val = 0; s[ret_val]; ret_val++); + + return(ret_val); +} + +void* memcpy(void *dst, const void *src, size_t n) +{ + u32_t *d; + const u32_t *s; + + d = (u32_t*)dst; + s = (const u32_t*)src; + + while(n > 4) { + *d++ = *s++; + n -= 4; + } + + if(n >= 2) { + *((u16_t*)d) = *((u16_t*)s); + d = (u32_t*)(((void*)d) + 2); + s = (u32_t*)(((void*)s) + 2); + n -= 2; + } + + if(n >= 1) { + *((u8_t*)d) = *((u8_t*)s); + } + + return(dst); +} -- 2.47.3