diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | apps/init/arch/x86_64/paging.c | 8 | ||||
-rw-r--r-- | apps/init/main.c | 13 | ||||
-rw-r--r-- | config.mk | 5 | ||||
-rwxr-xr-x | initrd/files/bin/init | bin | 20784 -> 20800 bytes | |||
-rw-r--r-- | lib/libc-jove/Makefile | 15 | ||||
-rw-r--r-- | lib/libc/Makefile (renamed from lib/libc-headless/Makefile) | 2 | ||||
-rw-r--r-- | lib/libc/ctype/toupper.c (renamed from lib/libc-headless/ctype/toupper.c) | 0 | ||||
-rw-r--r-- | lib/libc/include/assert.h | 16 | ||||
-rw-r--r-- | lib/libc/include/ctype.h (renamed from lib/libc-headless/include/ctype.h) | 0 | ||||
-rw-r--r-- | lib/libc/include/errno.h (renamed from lib/libc-headless/include/errno.h) | 0 | ||||
-rw-r--r-- | lib/libc/include/stdint.h (renamed from lib/libc-headless/include/stdint.h) | 0 | ||||
-rw-r--r-- | lib/libc/include/stdio.h (renamed from lib/libc-headless/include/stdio.h) | 0 | ||||
-rw-r--r-- | lib/libc/include/stdlib.h (renamed from lib/libc-headless/include/stdlib.h) | 4 | ||||
-rw-r--r-- | lib/libc/include/string.h (renamed from lib/libc-headless/include/string.h) | 0 | ||||
-rw-r--r-- | lib/libc/include/sys/types.h (renamed from lib/libc-headless/include/sys/types.h) | 0 | ||||
-rw-r--r-- | lib/libc/include/time.h (renamed from lib/libc-headless/include/time.h) | 0 | ||||
-rw-r--r-- | lib/libc/include/unistd.h (renamed from lib/libc-headless/include/unistd.h) | 0 | ||||
-rw-r--r-- | lib/libc/stdio/sprintf.c (renamed from lib/libc-headless/stdio/sprintf.c) | 0 | ||||
-rw-r--r-- | lib/libc/stdlib/malloc.c | 9 | ||||
-rw-r--r-- | lib/libc/string/memcpy.c (renamed from lib/libc-headless/string/memcpy.c) | 0 | ||||
-rw-r--r-- | lib/libc/string/memset.c (renamed from lib/libc-headless/string/memset.c) | 0 | ||||
-rw-r--r-- | lib/libjove/Makefile | 4 | ||||
-rw-r--r-- | lib/libjove/arch/x86_64/libjove.c | 14 | ||||
-rw-r--r-- | lib/libjove/heap/heap.c (renamed from lib/libc-jove/stdlib/heap.c) | 5 | ||||
-rw-r--r-- | lib/libjove/heap/heap.h (renamed from lib/libc-jove/stdlib/heap.h) | 2 | ||||
-rw-r--r-- | lib/libjove/include/arch/x86_64/jove.h | 6 | ||||
-rw-r--r-- | lib/libjove/libjove.c | 34 |
28 files changed, 104 insertions, 35 deletions
@@ -34,7 +34,7 @@ $(SYSROOTDIR)/lib/%.a : $(SYSROOTDIR) FORCE .PHONY: $(SYSROOTDIR)/usr/include $(SYSROOTDIR)/usr/include: rm -rf $(SYSROOTDIR)/usr/include - cp -r $(LIBDIR)/libc-headless/include $(SYSROOTDIR)/usr/include + cp -r $(LIBDIR)/libc/include $(SYSROOTDIR)/usr/include cp -r $(KERNELDIR)/include/ $(SYSROOTDIR)/usr/include/kernel cp -r $(LIBDIR)/libjove/include $(SYSROOTDIR)/usr/include/jove diff --git a/apps/init/arch/x86_64/paging.c b/apps/init/arch/x86_64/paging.c index 36fe950..1423bec 100644 --- a/apps/init/arch/x86_64/paging.c +++ b/apps/init/arch/x86_64/paging.c @@ -5,12 +5,10 @@ #include <jove/arch/x86_64/pager.h> #include <stdbool.h> +extern void __libjove_pager_init(uint8_t); + void pager_setup(void) { - _jove_alloc_pagemap_inplace(&__jove_pagemap, &__rootdir, INIT_OBJECT_PAGEMAP); - - size_t lastfree = jove_objdir_lastmemb(&__rootdir) + 1; - __jove_work_obj.membi = lastfree; - __jove_work_obj.parent = &__rootdir; + __libjove_pager_init(INIT_OBJECT_PAGEMAP); } diff --git a/apps/init/main.c b/apps/init/main.c index 6deb12c..b802bf4 100644 --- a/apps/init/main.c +++ b/apps/init/main.c @@ -14,18 +14,19 @@ spin_fail(void) for(;;); } -extern void __libc_heap_init(uintptr_t); +extern void __libjove_init(uint8_t, void*); +extern void __libjove_init_untypeddir(uint8_t); +extern void __libjove_heap_init(uintptr_t); void main(void *message_ptr) { - __jove_syscall_obj = INIT_OBJECT_MESSAGE; - __jove_syscall_ptr = message_ptr; - _jove_alloc_objdir_inplace(&__jove_untyped_directory, &__rootdir, INIT_OBJECT_UNTYPED_DIR); + __libjove_init(INIT_OBJECT_MESSAGE, message_ptr); + __libjove_init_untypeddir(INIT_OBJECT_UNTYPED_DIR); + pager_setup(); + __libjove_heap_init((uintptr_t)message_ptr + KO_MESSAGE_BYTES); jove_kprintf("Hello, Userland!\n"); - pager_setup(); - __libc_heap_init((uintptr_t)message_ptr + KO_MESSAGE_BYTES); for(;;); } @@ -17,9 +17,8 @@ TARGET_BOOTLOADER = limine APPS := $(INITRDDIR)/files/bin/init -STATICLIBS := $(SYSROOTDIR)/lib/libc-jove.a \ - $(SYSROOTDIR)/lib/libjove.a \ - $(SYSROOTDIR)/lib/libc-headless.a \ +STATICLIBS := $(SYSROOTDIR)/lib/libjove.a \ + $(SYSROOTDIR)/lib/libc.a CC := $(TOOLSDIR)/bin/$(TARGET_TRIPLET)-gcc LD := $(TOOLSDIR)/bin/$(TARGET_TRIPLET)-ld diff --git a/initrd/files/bin/init b/initrd/files/bin/init Binary files differindex 575c604..40e3105 100755 --- a/initrd/files/bin/init +++ b/initrd/files/bin/init diff --git a/lib/libc-jove/Makefile b/lib/libc-jove/Makefile deleted file mode 100644 index a084ca6..0000000 --- a/lib/libc-jove/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -include $(CONFIG) - -CDIRS := stdio ctype string stdlib - -CFILES += $(foreach dir,$(CDIRS),$(wildcard $(dir)/*.c)) - -OFILES := $(patsubst %.c,%.o,$(CFILES)) - -CFLAGS := -ffreestanding -nostdlib - -all: ${OFILES} - ar rcs $(OUT)/libc-jove.a $(OFILES) - -%.o:%.c - $(CC) $(CFLAGS) -c $< -o $@ diff --git a/lib/libc-headless/Makefile b/lib/libc/Makefile index 59de6c8..8163b2e 100644 --- a/lib/libc-headless/Makefile +++ b/lib/libc/Makefile @@ -9,7 +9,7 @@ OFILES := $(patsubst %.c,%.o,$(CFILES)) CFLAGS := -ffreestanding -nostdlib all: ${OFILES} - ar rcs $(OUT)/libc-headless.a $(OFILES) + ar rcs $(OUT)/libc.a $(OFILES) %.o:%.c $(CC) $(CFLAGS) -c $< -o $@ diff --git a/lib/libc-headless/ctype/toupper.c b/lib/libc/ctype/toupper.c index fe1e1e2..fe1e1e2 100644 --- a/lib/libc-headless/ctype/toupper.c +++ b/lib/libc/ctype/toupper.c diff --git a/lib/libc/include/assert.h b/lib/libc/include/assert.h new file mode 100644 index 0000000..4b8fbf8 --- /dev/null +++ b/lib/libc/include/assert.h @@ -0,0 +1,16 @@ +#ifndef _ASSERT_H +#define _ASSERT_H 1 + +#ifdef NDEBUG +#define assert(ignore)((void)0) +#else +#include <stdio.h> +#define assert(condition) \ + if(!(condition)) { \ + fprintf(stderr, "%s:%s:%s: Assertion '%s' failed!\n", \ + __FILE__, __LINE__, __FUNCTION__, #condition); \ + abort(); \ + } +#endif + +#endif diff --git a/lib/libc-headless/include/ctype.h b/lib/libc/include/ctype.h index 9dfcc3b..9dfcc3b 100644 --- a/lib/libc-headless/include/ctype.h +++ b/lib/libc/include/ctype.h diff --git a/lib/libc-headless/include/errno.h b/lib/libc/include/errno.h index e69de29..e69de29 100644 --- a/lib/libc-headless/include/errno.h +++ b/lib/libc/include/errno.h diff --git a/lib/libc-headless/include/stdint.h b/lib/libc/include/stdint.h index 165a201..165a201 100644 --- a/lib/libc-headless/include/stdint.h +++ b/lib/libc/include/stdint.h diff --git a/lib/libc-headless/include/stdio.h b/lib/libc/include/stdio.h index cd29004..cd29004 100644 --- a/lib/libc-headless/include/stdio.h +++ b/lib/libc/include/stdio.h diff --git a/lib/libc-headless/include/stdlib.h b/lib/libc/include/stdlib.h index f29cce7..9bb4bb1 100644 --- a/lib/libc-headless/include/stdlib.h +++ b/lib/libc/include/stdlib.h @@ -8,6 +8,10 @@ int atexit(void (*callback)(void)); int atoi(const char*); +void *(*__libc_malloc)(size_t); +void (*__libc_free)(void*); +void *(*__libc_calloc)(size_t, size_t); + void free(void *ptr); void *malloc(size_t size); void *calloc(size_t nmemb, size_t size); diff --git a/lib/libc-headless/include/string.h b/lib/libc/include/string.h index d55bc37..d55bc37 100644 --- a/lib/libc-headless/include/string.h +++ b/lib/libc/include/string.h diff --git a/lib/libc-headless/include/sys/types.h b/lib/libc/include/sys/types.h index 058c38a..058c38a 100644 --- a/lib/libc-headless/include/sys/types.h +++ b/lib/libc/include/sys/types.h diff --git a/lib/libc-headless/include/time.h b/lib/libc/include/time.h index c73ee97..c73ee97 100644 --- a/lib/libc-headless/include/time.h +++ b/lib/libc/include/time.h diff --git a/lib/libc-headless/include/unistd.h b/lib/libc/include/unistd.h index 4e14be9..4e14be9 100644 --- a/lib/libc-headless/include/unistd.h +++ b/lib/libc/include/unistd.h diff --git a/lib/libc-headless/stdio/sprintf.c b/lib/libc/stdio/sprintf.c index dd78572..dd78572 100644 --- a/lib/libc-headless/stdio/sprintf.c +++ b/lib/libc/stdio/sprintf.c diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c new file mode 100644 index 0000000..69a03bc --- /dev/null +++ b/lib/libc/stdlib/malloc.c @@ -0,0 +1,9 @@ +#include <stdlib.h> +#include <assert.h> + +void* +malloc(size_t size) +{ + assert(__libc_malloc); + return __libc_malloc(size); +} diff --git a/lib/libc-headless/string/memcpy.c b/lib/libc/string/memcpy.c index f71444d..f71444d 100644 --- a/lib/libc-headless/string/memcpy.c +++ b/lib/libc/string/memcpy.c diff --git a/lib/libc-headless/string/memset.c b/lib/libc/string/memset.c index f79a4b4..f79a4b4 100644 --- a/lib/libc-headless/string/memset.c +++ b/lib/libc/string/memset.c diff --git a/lib/libjove/Makefile b/lib/libjove/Makefile index b82de22..9633c85 100644 --- a/lib/libjove/Makefile +++ b/lib/libjove/Makefile @@ -1,6 +1,6 @@ include $(CONFIG) -CDIRS := syscall object pager +CDIRS := syscall object pager heap CFILES := $(wildcard *.c) CFILES += $(foreach dir,$(CDIRS),$(wildcard $(dir)/*.c)) @@ -9,7 +9,7 @@ CFILES += $(foreach dir,$(CDIRS),$(wildcard arch/$(TARGET_MACHINE)/$(dir)/*.c)) OFILES := $(patsubst %.c,%.o,$(CFILES)) -CFLAGS := -ffreestanding -nostdlib -Iinclude -g +CFLAGS := -Iinclude -Wall -Wextra all: ${OFILES} ar rcs $(OUT)/libjove.a $(OFILES) diff --git a/lib/libjove/arch/x86_64/libjove.c b/lib/libjove/arch/x86_64/libjove.c new file mode 100644 index 0000000..0abc6b6 --- /dev/null +++ b/lib/libjove/arch/x86_64/libjove.c @@ -0,0 +1,14 @@ +#include "jove.h" +#include "arch/x86_64/pager.h" + +void +__libjove_arch_init(void) +{ + +} + +void +__libjove_pager_init(uint8_t pml_obji) +{ + _jove_alloc_pagemap_inplace(&__jove_pagemap, &__rootdir, pml_obji); +} diff --git a/lib/libc-jove/stdlib/heap.c b/lib/libjove/heap/heap.c index 034278c..ab313ae 100644 --- a/lib/libc-jove/stdlib/heap.c +++ b/lib/libjove/heap/heap.c @@ -132,8 +132,11 @@ start_merge_loop: { } void -__libc_heap_init(uintptr_t program_end) +__libjove_heap_init(uintptr_t program_end) { __heap_start = __heap_end = program_end; freelist_tail = heap_newbin(__heap_start, LIBC_HEAP_INIT_SIZE, NULL); + + __libc_malloc = heap_alloc; + __libc_free = heap_free; } diff --git a/lib/libc-jove/stdlib/heap.h b/lib/libjove/heap/heap.h index 9628444..8a02655 100644 --- a/lib/libc-jove/stdlib/heap.h +++ b/lib/libjove/heap/heap.h @@ -14,6 +14,6 @@ typedef struct heap_bin { char data[]; } heap_bin_t; -void __libc_heap_init(uintptr_t program_end); +void __libjove_heap_init(uintptr_t program_end); #endif diff --git a/lib/libjove/include/arch/x86_64/jove.h b/lib/libjove/include/arch/x86_64/jove.h new file mode 100644 index 0000000..36303f4 --- /dev/null +++ b/lib/libjove/include/arch/x86_64/jove.h @@ -0,0 +1,6 @@ +#ifndef _JOVE_x86_64_JOVE_H +#define _JOVE_x86_64_JOVE_H 1 + + + +#endif diff --git a/lib/libjove/libjove.c b/lib/libjove/libjove.c index 6b40a54..ef5d7e6 100644 --- a/lib/libjove/libjove.c +++ b/lib/libjove/libjove.c @@ -1,6 +1,7 @@ #include "include/jove.h" #include "include/object-untyped.h" #include "error.h" +#include "heap/heap.h" uintmax_t __jove_syscall_obj = 0; void *__jove_syscall_ptr = 0; @@ -15,3 +16,36 @@ uintptr_t __program_end; void *(*_jove_alloc)(size_t) = NULL; void (*_jove_free)(void*) = NULL; void *(*_jove_realloc)(void*, size_t) = NULL; + +extern void __libjove_arch_init(void); + +void +__libjove_init(uint8_t syscall_obj, void *syscall_ptr) +{ + __rootdir = (KernelObjectDirectory) { + .typed = { + .type = KO_OBJECT_DIRECTORY, + .membi = 0, + .parent = NULL + }, + .firstfree = -1, + .lastmemb = -1 + }; + + __jove_syscall_obj = syscall_obj; + __jove_syscall_ptr = syscall_ptr; + + __jove_work_obj = (KernelObjectTyped) { + .membi = jove_objdir_lastmemb(&__rootdir), + .parent = &__rootdir, + .type = KO_NONE + }; + + __libjove_arch_init(); +} + +void +__libjove_init_untypeddir(uint8_t diri) +{ + _jove_alloc_objdir_inplace(&__jove_untyped_directory, &__rootdir, diri); +} |