From 69686a2c915b65553cb051c7cde82f938f60882e Mon Sep 17 00:00:00 2001 From: Starnakin Date: Wed, 29 Jan 2025 12:41:57 +0100 Subject: [PATCH] fix: fork: set child espat the right postion --- src/multitasking/fork.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/multitasking/fork.c b/src/multitasking/fork.c index de36709..f871d34 100644 --- a/src/multitasking/fork.c +++ b/src/multitasking/fork.c @@ -1,6 +1,7 @@ #include "interrupts.h" #include "string.h" #include "task.h" +#include "types.h" u16 fork(void) { @@ -11,6 +12,9 @@ u16 fork(void) child->daddy = current_task; current_task->child = child; memcpy(child->esp0, current_task->esp0, STACK_SIZE); + u32 *daddy_esp = 0; + asm("movl %%esp, %0" : "=m"(daddy_esp)); + child->esp = child->esp0 + (daddy_esp - current_task->esp0); toris(); return current_task == child ? 0 : child->uid; }