diff options
author | Freya Murphy <freya@freyacat.org> | 2025-04-24 13:42:14 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-04-24 13:42:14 -0400 |
commit | 3a0fbbe6c75c06f1a38b5ef7e3bc8c4b47ccd4b0 (patch) | |
tree | 7888d97acd86e600a4a774455e8217e8de18ea61 /kernel/include | |
parent | fmt (diff) | |
download | comus-3a0fbbe6c75c06f1a38b5ef7e3bc8c4b47ccd4b0.tar.gz comus-3a0fbbe6c75c06f1a38b5ef7e3bc8c4b47ccd4b0.tar.bz2 comus-3a0fbbe6c75c06f1a38b5ef7e3bc8c4b47ccd4b0.zip |
user.c for loading userspace elfs into memoryuser
Diffstat (limited to 'kernel/include')
-rw-r--r-- | kernel/include/comus/limits.h | 3 | ||||
-rw-r--r-- | kernel/include/comus/procs.h | 6 | ||||
-rw-r--r-- | kernel/include/comus/user.h | 25 |
3 files changed, 34 insertions, 0 deletions
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 <comus/limits.h> #include <comus/memory.h> #include <lib.h> +#include <elf.h> #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 <freya@freyacat.org> + * + * Userland functions + */ + +#ifndef USER_H_ +#define USER_H_ + +#include <comus/procs.h> +#include <comus/fs.h> + +/** + * 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 */ |