From 42a2bdaecaee627247689b3f4ff2828fe3c8dc97 Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Thu, 11 Sep 2025 14:37:04 -0400 Subject: load init from ELF executable --- include/arch/x86_64/init.h | 12 ++++++++++++ include/arch/x86_64/tcb.h | 10 ++++++++-- include/device/processor.h | 6 +++--- include/elf.h | 6 +++--- include/init.h | 3 --- include/memory.h | 2 -- include/tcb.h | 2 ++ 7 files changed, 28 insertions(+), 13 deletions(-) create mode 100644 include/arch/x86_64/init.h (limited to 'include') diff --git a/include/arch/x86_64/init.h b/include/arch/x86_64/init.h new file mode 100644 index 0000000..d8fdf2c --- /dev/null +++ b/include/arch/x86_64/init.h @@ -0,0 +1,12 @@ +#ifndef _JOVE_x86_64_INIT_H +#define _JOVE_x86_64_INIT_H 1 + +#include + +uintptr_t init_alloc_pageframe(); +void init_map_pageframe(uintptr_t pptr, uintptr_t vptr, uint8_t pflags); + +__attribute__((noreturn)) +void usermode(void *ip, void *sp); + +#endif diff --git a/include/arch/x86_64/tcb.h b/include/arch/x86_64/tcb.h index 33da4fa..ae93bdf 100644 --- a/include/arch/x86_64/tcb.h +++ b/include/arch/x86_64/tcb.h @@ -2,17 +2,23 @@ #define _JOVE_x86_64_TCB_H 1 #include +#include + +#define KERNEL_STACK_MINSIZE 0x1000 typedef struct jove_ThreadControlBlock { - void *stack; + size_t size; + struct jove_ThreadControlBlock *tcb_next, *sched_next; + uint8_t priority; + uintptr_t sp, ksp; void *pml4; void *mailbox; /* PML caching for faster calls?*/ - uint8_t kstack[KERNEL_STACKBYTES]; + uint8_t kstack[]; } tcb_t; #endif diff --git a/include/device/processor.h b/include/device/processor.h index 33deed4..e0ec16c 100644 --- a/include/device/processor.h +++ b/include/device/processor.h @@ -1,9 +1,7 @@ #ifndef _JOVE_DEVICE_PROCESSOR_H #define _JOVE_DEVICE_PROCESSOR_H 1 -#if defined(__x86_64__) -#include "arch/x86_64/processor.h" -#endif +#include "object.h" /**@FUNC Initialize the bootstrap processor.*/ void bsp_setup(void); @@ -19,4 +17,6 @@ void processor_setup(void* processor); * @RET pointer to current processor.*/ void *processor_current(void); +objdir_t *processor_get_objdir(void *processor); + #endif diff --git a/include/elf.h b/include/elf.h index 05e3e83..acd0aea 100644 --- a/include/elf.h +++ b/include/elf.h @@ -89,9 +89,9 @@ typedef struct { #define PT_NULL 0 #define PT_LOAD 1 -#define PF_X 1 -#define PF_W 2 -#define PF_R 4 +#define PF_X 0x1 +#define PF_W 0x2 +#define PF_R 0x4 typedef struct { diff --git a/include/init.h b/include/init.h index 2174785..fc1361d 100644 --- a/include/init.h +++ b/include/init.h @@ -17,9 +17,6 @@ enum { #include "object.h" extern objdir_t _initDirectory; -uintptr_t init_alloc_pageframe(); -void init_map_pageframe(uintptr_t pptr, uintptr_t vptr, uint8_t pflags); - void init_load(void); #endif diff --git a/include/memory.h b/include/memory.h index 901060c..3e97bcf 100644 --- a/include/memory.h +++ b/include/memory.h @@ -7,8 +7,6 @@ typedef uintptr_t physptr_t; typedef uintptr_t virtptr_t; -#define KERNEL_STACK_SIZE 0x1000 - void mapping_setup_init(void); void mapping_setup(objdir_entry_t *mapping); diff --git a/include/tcb.h b/include/tcb.h index c28a860..511f69e 100644 --- a/include/tcb.h +++ b/include/tcb.h @@ -4,6 +4,8 @@ #include #include +struct jove_ThreadControlBlock; +void tcb_init(void *task_main); #endif -- cgit v1.2.1