summaryrefslogtreecommitdiff
path: root/kernel/include
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-04-24 13:42:14 -0400
committerFreya Murphy <freya@freyacat.org>2025-04-24 13:42:14 -0400
commit3a0fbbe6c75c06f1a38b5ef7e3bc8c4b47ccd4b0 (patch)
tree7888d97acd86e600a4a774455e8217e8de18ea61 /kernel/include
parentfmt (diff)
downloadcomus-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.h3
-rw-r--r--kernel/include/comus/procs.h6
-rw-r--r--kernel/include/comus/user.h25
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 */