aboutsummaryrefslogtreecommitdiff
path: root/sys/include
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2024-06-30 23:51:40 -0400
committerIan Moffett <ian@osmora.org>2024-07-01 00:00:24 -0400
commita0540658f66feb32c1abe71d9d7589b854e9aaa5 (patch)
tree82242425494d54f8a1e68dddac4bc8d5a80e90c5 /sys/include
parent582ed742216fd87bb3f4103d795dca19e3357ff4 (diff)
kernel/amd64: proc: Add stack init func for exec
Add stack initialization code for exec functions. This new code initializes values on the stack, including argc, argv, and the auxiliary vector. Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys/include')
-rw-r--r--sys/include/sys/exec.h16
-rw-r--r--sys/include/sys/proc.h5
2 files changed, 21 insertions, 0 deletions
diff --git a/sys/include/sys/exec.h b/sys/include/sys/exec.h
index 4910ff2..73eae01 100644
--- a/sys/include/sys/exec.h
+++ b/sys/include/sys/exec.h
@@ -34,7 +34,23 @@
#if defined(_KERNEL)
+/* Danger: Do not change these !! */
+#define AT_NULL 0
+#define AT_ENTRY 1
+#define AT_PHDR 2
+#define AT_PHENT 3
+#define AT_PHNUM 4
+#define AT_EXECPATH 5
+#define AT_SECURE 6
+#define AT_RANDOM 7
+#define AT_EXECFN 8
+#define AT_PAGESIZE 9
+
#define MAX_PHDRS 32
+#define STACK_PUSH(PTR, VAL) *(--(PTR)) = VAL
+#define AUXVAL(PTR, TAG, VAL) \
+ STACK_PUSH(PTR, VAL); \
+ STACK_PUSH(PTR, TAG);
struct exec_range {
uintptr_t start;
diff --git a/sys/include/sys/proc.h b/sys/include/sys/proc.h
index 5303072..0c3cd33 100644
--- a/sys/include/sys/proc.h
+++ b/sys/include/sys/proc.h
@@ -43,6 +43,8 @@
#define PROC_STACK_PAGES 8
#define PROC_STACK_SIZE (PROC_STACK_PAGES * DEFAULT_PAGESIZE)
+struct exec_prog;
+
struct proc {
pid_t pid;
struct trapframe tf;
@@ -57,6 +59,9 @@ struct proc {
struct proc *this_td(void);
int md_fork(struct proc *p, struct proc *parent, uintptr_t ip);
+
+void md_td_stackinit(struct proc *td, void *stack_top, struct exec_prog *prog);
+
int fork1(struct proc *cur, int flags, void(*ip)(void), struct proc **newprocp);
int exit1(struct proc *td);