X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/2bcb7a074fa1b63e5954092bdcb8752915d3e9e6..7c7b5f05d39b7739d990f71256a2267ec67a6913:/lunaix-os/kernel/exe/exec.c diff --git a/lunaix-os/kernel/exe/exec.c b/lunaix-os/kernel/exe/exec.c index 3c4e253..7afd0e1 100644 --- a/lunaix-os/kernel/exe/exec.c +++ b/lunaix-os/kernel/exe/exec.c @@ -1,4 +1,3 @@ -#include #include #include #include @@ -11,6 +10,9 @@ #include #include +#include +#include + #include void @@ -93,7 +95,7 @@ exec_load(struct exec_container* container, struct v_file* executable) if (container->vms_mnt == VMS_SELF) { // we are loading executable into current addr space - ptr_t ustack = USTACK_TOP; + ptr_t ustack = USR_STACK_END; size_t argv_len = 0, envp_len = 0; ptr_t argv_ptr = 0, envp_ptr = 0; @@ -220,9 +222,12 @@ __DEFINE_LXSYSCALL3(int, // we will jump to new entry point (_u_start) upon syscall's // return so execve 'will not return' from the perspective of it's invoker - volatile struct exec_param* execp = __current->intr_ctx.execp; - execp->esp = container.stack_top; - execp->eip = container.exe.entry; + eret_target(__current) = container.exe.entry; + eret_stack(__current) = container.stack_top; + + // these become meaningless once execved! + __current->ustack_top = 0; + proc_clear_signal(__current); done: // set return value