diff options
author | Ian Moffett <ian@osmora.org> | 2024-06-30 23:51:40 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2024-07-01 00:00:24 -0400 |
commit | a0540658f66feb32c1abe71d9d7589b854e9aaa5 (patch) | |
tree | 82242425494d54f8a1e68dddac4bc8d5a80e90c5 /sys/include | |
parent | 582ed742216fd87bb3f4103d795dca19e3357ff4 (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.h | 16 | ||||
-rw-r--r-- | sys/include/sys/proc.h | 5 |
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); |