diff options
author | Ian Moffett <ian@osmora.org> | 2025-09-17 21:20:29 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-09-17 21:27:49 -0400 |
commit | 79822e485edb7b447ab8cb17fdc0f572b598d829 (patch) | |
tree | ee142dcadb3488b7e64766d933826520a11ed43d /src/sys/os/os_proc.c | |
parent | 8e268df60bde6b5548b849cc9b83a224a74b3e43 (diff) |
kern/amd64: Implement syscall domains and windows
A syscall domain in the L5 kernel is a fixed list of "syscall windows",
each syscall window represents a specific platform and/or syscall model.
A platform latch within each domain determines which window / platform
should be visible. Since syscall domains are per-process, these changes
are local to their respective processes.
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'src/sys/os/os_proc.c')
-rw-r--r-- | src/sys/os/os_proc.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/sys/os/os_proc.c b/src/sys/os/os_proc.c index 6880dda..329a3ea 100644 --- a/src/sys/os/os_proc.c +++ b/src/sys/os/os_proc.c @@ -41,13 +41,32 @@ static pid_t next_pid = 0; int proc_init(struct proc *procp, int flags) { + struct syscall_domain *scdp; + struct syscall_win *winp; int error; if (procp == NULL) { return -EINVAL; } + /* Put the process in a known state */ + scdp = &procp->scdom; memset(procp, 0, sizeof(*procp)); + + /* + * Initialize each platform latch + */ + for (platch_t p = 0; p < __SC_PLATCH_MAX; ++p) { + winp = &scdp->slots[p]; + switch (p) { + case SC_PLATCH_UNIX: + winp->p = 1; + winp->sctab = &g_unix_sctab[0]; + winp->nimpl = UNIX_SCTAB_LEN; + break; + } + } + procp->pid = atomic_inc_int(&next_pid); error = md_proc_init(procp, flags); return error; |