diff options
author | Ian Moffett <ian@osmora.org> | 2025-06-13 19:05:17 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-06-13 19:13:11 -0400 |
commit | 6d267c90fcf3afad4216d859b1fe24740e0ec6cb (patch) | |
tree | f9e4fc108b8d4b7c9cad36c1b8c04ef8778483e5 /sys | |
parent | 48b7c43ed1bad98200c3bdfed37d2b68ccf531ca (diff) |
kernel/amd64: Return stack top after stack init
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys')
-rw-r--r-- | sys/arch/amd64/amd64/proc_machdep.c | 3 | ||||
-rw-r--r-- | sys/include/sys/proc.h | 2 | ||||
-rw-r--r-- | sys/kern/kern_exec.c | 2 |
3 files changed, 4 insertions, 3 deletions
diff --git a/sys/arch/amd64/amd64/proc_machdep.c b/sys/arch/amd64/amd64/proc_machdep.c index 407adb1..aa8847a 100644 --- a/sys/arch/amd64/amd64/proc_machdep.c +++ b/sys/arch/amd64/amd64/proc_machdep.c @@ -40,7 +40,7 @@ #include <vm/map.h> #include <string.h> -void +uintptr_t md_td_stackinit(struct proc *td, void *stack_top, struct exec_prog *prog) { uintptr_t *sp = stack_top; @@ -97,6 +97,7 @@ md_td_stackinit(struct proc *td, void *stack_top, struct exec_prog *prog) STACK_PUSH(sp, argc); tfp = &td->tf; tfp->rsp = (uintptr_t)sp - VM_HIGHER_HALF; + return tfp->rsp; } void diff --git a/sys/include/sys/proc.h b/sys/include/sys/proc.h index 2f1470a..241d990 100644 --- a/sys/include/sys/proc.h +++ b/sys/include/sys/proc.h @@ -95,7 +95,7 @@ int md_spawn(struct proc *p, struct proc *parent, uintptr_t ip); scret_t sys_spawn(struct syscall_args *scargs); pid_t spawn(struct proc *cur, void(*func)(void), void *p, int flags, struct proc **newprocp); -void md_td_stackinit(struct proc *td, void *stack_top, struct exec_prog *prog); +uintptr_t md_td_stackinit(struct proc *td, void *stack_top, struct exec_prog *prog); __dead void md_td_kick(struct proc *td); int fork1(struct proc *cur, int flags, void(*ip)(void), struct proc **newprocp); diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index b760912..2a53b8a 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -101,7 +101,7 @@ execve(struct proc *td, const struct execve_args *args) stack_top = td->stack_base + (PROC_STACK_SIZE - 1); /* Setup registers, signals and stack */ - md_td_stackinit(td, (void *)(stack_top + VM_HIGHER_HALF), &prog); + stack_top = md_td_stackinit(td, (void *)(stack_top + VM_HIGHER_HALF), &prog); setregs(td, &prog, stack_top); signals_init(td); |