From ad388c894a91753f66708dde37349c99cb0c10fb Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Mon, 11 Aug 2025 03:26:25 -0400 Subject: kernel: proc: Add proc_init() routine This commit moves a lot of initialization logic within spawn() into the proc_init() function. The logic of spawning a process from an executable should not have mixed with the logic of initializing a process. Signed-off-by: Ian Moffett --- sys/kern/kern_proc.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'sys/kern/kern_proc.c') diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index 87dcc74..cc26fa1 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -29,8 +29,10 @@ #include #include +#include #include #include +#include #include #include #include @@ -100,6 +102,32 @@ proc_coredump(struct proc *td, uintptr_t fault_addr) fd_close(fd); } +int +proc_init(struct proc *td, struct proc *parent) +{ + struct mmap_lgdr *mlgdr; + + mlgdr = dynalloc(sizeof(*mlgdr)); + if (mlgdr == NULL) { + return -ENOMEM; + } + + /* Add to parent leafq */ + TAILQ_INSERT_TAIL(&parent->leafq, td, leaf_link); + atomic_inc_int(&parent->nleaves); + td->parent = parent; + td->exit_status = -1; + td->cred = parent->cred; + + /* Initialize the mmap ledger */ + mlgdr->nbytes = 0; + RBT_INIT(lgdr_entries, &mlgdr->hd); + td->mlgdr = mlgdr; + td->flags |= PROC_WAITED; + signals_init(td); + return 0; +} + scret_t sys_getpid(struct syscall_args *scargs) { -- cgit v1.2.3