summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2025-08-28 16:20:17 -0400
committerJon Santmyer <jon@jonsantmyer.com>2025-08-28 16:20:17 -0400
commitc92305221770bb1316d026c200d569ca4e930e42 (patch)
treebf3e496991e74bd6f2415cf156a7226729f0058b /lib
parent69f2ee15025ccedaae0308c50b7d0d400b854c5b (diff)
downloadjove-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/Makefile15
-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.h16
-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.c9
-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/Makefile4
-rw-r--r--lib/libjove/arch/x86_64/libjove.c14
-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.h6
-rw-r--r--lib/libjove/libjove.c34
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);
+}