diff options
author | Jon Santmyer <jon@jonsantmyer.com> | 2025-08-28 16:20:17 -0400 |
---|---|---|
committer | Jon Santmyer <jon@jonsantmyer.com> | 2025-08-28 16:20:17 -0400 |
commit | c92305221770bb1316d026c200d569ca4e930e42 (patch) | |
tree | bf3e496991e74bd6f2415cf156a7226729f0058b /lib | |
parent | 69f2ee15025ccedaae0308c50b7d0d400b854c5b (diff) | |
download | jove-os-c92305221770bb1316d026c200d569ca4e930e42.tar.gz jove-os-c92305221770bb1316d026c200d569ca4e930e42.tar.bz2 jove-os-c92305221770bb1316d026c200d569ca4e930e42.zip |
merge libc files, new init methods for libjove
Diffstat (limited to 'lib')
-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 |
23 files changed, 91 insertions, 20 deletions
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); +} |