diff options
author | Ian Moffett <ian@osmora.org> | 2025-08-11 03:26:25 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-08-11 03:26:25 -0400 |
commit | ad388c894a91753f66708dde37349c99cb0c10fb (patch) | |
tree | 19306d39bebffb743d0da3e04a2e84b225def250 /sys/kern/kern_proc.c | |
parent | 14a80e0ea46b9c2a30b55ee82aeb02e674fff3ae (diff) |
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 <ian@osmora.org>
Diffstat (limited to 'sys/kern/kern_proc.c')
-rw-r--r-- | sys/kern/kern_proc.c | 28 |
1 files changed, 28 insertions, 0 deletions
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 <sys/types.h> #include <sys/proc.h> +#include <sys/errno.h> #include <sys/cdefs.h> #include <sys/vnode.h> +#include <sys/tree.h> #include <sys/syscall.h> #include <sys/filedesc.h> #include <sys/fcntl.h> @@ -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) { |