Nucleus
Barry Kernel threads + threads share address space 6217f0d (3 years, 1 month ago)
diff --git a/task/task.c b/task/task.c
index 539026a..c1e744e 100644
--- a/task/task.c
+++ b/task/task.c
@@ -21,7 +21,7 @@ static void task_delete(Object *);
/* Task object type */
ObjectType taskType = {
.name = "TASK",
- .size = sizeof(Task),
+ .size = KERNEL_STACK_SIZE, //sizeof(Task),
.new = task_new,
.delete = task_delete,
};
@@ -47,8 +47,6 @@ task_delete(Object *obj)
Task *task = (void *) obj;
if (task->executable)
put(task->executable);
- if (task->stack)
- put(task->stack);
if (task->target)
put(task->target);
if (task->wait)
@@ -63,44 +61,11 @@ task_delete(Object *obj)
put(task->signals);
}
-/* Move the stack */
-static void
-move_stack(uintptr_t top, size_t size)
-{
- size_t offset;
- uintptr_t oldStack, oldBase;
- uintptr_t newStack, newBase;
- top -= sizeof(uintptr_t);
- asm volatile("mov %%esp, %0" : "=r" (oldStack));
- asm volatile("mov %%ebp, %0" : "=r" (oldBase));
- offset = top - (uintptr_t) stackTop;
- newStack = oldStack + offset;
- newBase = oldBase + offset;
-
- memcpy((void *) newStack, (void *) oldStack, (size_t) stackTop - oldStack);
-
- /* Update pointers on the stack */
- uintptr_t i, tmp;
- for (i = top; i > top - size; i -= sizeof(uintptr_t)) {
- tmp = *(uintptr_t *) i;
- if (tmp > oldStack && tmp < (uintptr_t) stackTop) {
- tmp += offset;
- *(uintptr_t *) i = tmp;
- }
- }
-
- asm volatile("mov %0, %%esp" :: "r" (newStack));
- asm volatile("mov %0, %%ebp" :: "r" (newBase));
-}
-
/* Initialise tasking */
void
init_tasking(void)
{
- move_stack(0xF0800000, 0x2000);
-
current = new(&taskType);
- asm volatile("mov %%cr3, %0" : "=r" (current->pageDir));
current->state = RUNNING;
/* File System namespace */
@@ -115,6 +80,7 @@ init_tasking(void)
cpu->scheduler->tasks = 1;
register_interrupt(0, timer_handler);
register_exception(128, syscall_handler);
+ set_kernel_stack((uintptr_t) current + KERNEL_STACK_SIZE);
}
/* Get the current task's PID */