From 3a0fbbe6c75c06f1a38b5ef7e3bc8c4b47ccd4b0 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Thu, 24 Apr 2025 13:42:14 -0400 Subject: user.c for loading userspace elfs into memory --- kernel/include/comus/limits.h | 3 +++ kernel/include/comus/procs.h | 6 ++++++ kernel/include/comus/user.h | 25 +++++++++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 kernel/include/comus/user.h (limited to 'kernel/include') diff --git a/kernel/include/comus/limits.h b/kernel/include/comus/limits.h index 675df47..cadfc93 100644 --- a/kernel/include/comus/limits.h +++ b/kernel/include/comus/limits.h @@ -22,6 +22,9 @@ #define N_FILE_NAME 256 #define N_DISKS 8 +/// elf limits +#define N_ELF_SEGMENTS 16 + /// length of terminal buffer #define TERM_MAX_WIDTH 1920 #define TERM_MAX_HEIGHT 1080 diff --git a/kernel/include/comus/procs.h b/kernel/include/comus/procs.h index d92bc5d..d105867 100644 --- a/kernel/include/comus/procs.h +++ b/kernel/include/comus/procs.h @@ -13,6 +13,7 @@ #include #include #include +#include #define PCB_REG(pcb, x) ((pcb)->regs->x) #define PCB_RET(pcb) ((pcb)->regs->rax) @@ -56,6 +57,11 @@ struct pcb { size_t priority; size_t ticks; + // elf metadata + Elf64_Ehdr elf_header; + Elf64_Phdr elf_segments[N_ELF_SEGMENTS]; + Elf64_Half n_elf_segments; + // queue linkage struct pcb *next; // next PDB in queue diff --git a/kernel/include/comus/user.h b/kernel/include/comus/user.h new file mode 100644 index 0000000..29c978c --- /dev/null +++ b/kernel/include/comus/user.h @@ -0,0 +1,25 @@ +/** + * @file user.h + * + * @author Freya Murphy + * + * Userland functions + */ + +#ifndef USER_H_ +#define USER_H_ + +#include +#include + +/** + * Load a user elf program from a file into a pcb + */ +int user_load(struct pcb *pcb, struct disk *disk); + +/** + * Clean up all loaded userland data from a pcb + */ +void user_cleanup(struct pcb *pcb); + +#endif /* user.h */ -- cgit v1.2.3-freya