Scheduler: clear user tasks' registers

This commit is contained in:
apio 2022-10-12 17:12:06 +02:00
parent 136c0b3ae9
commit 25a460e3c6

View File

@ -91,6 +91,7 @@ void Scheduler::add_user_task(void* task)
{ {
Task* new_task = new Task; Task* new_task = new Task;
ASSERT(new_task); ASSERT(new_task);
memset(&new_task->regs, 0, sizeof(Context));
new_task->user_task = true; new_task->user_task = true;
new_task->id = free_tid++; new_task->id = free_tid++;
new_task->regs.rip = (uint64_t)task; new_task->regs.rip = (uint64_t)task;
@ -120,6 +121,7 @@ void Scheduler::load_user_task(const char* filename)
kinfoln("Loading user task: %s", filename); kinfoln("Loading user task: %s", filename);
Task* new_task = new Task; Task* new_task = new Task;
ASSERT(new_task); ASSERT(new_task);
memset(&new_task->regs, 0, sizeof(Context));
new_task->id = free_tid++; new_task->id = free_tid++;
ELFImage* image = ELFLoader::load_elf_from_filesystem(filename); ELFImage* image = ELFLoader::load_elf_from_filesystem(filename);
if (!image) if (!image)
@ -154,6 +156,7 @@ void Scheduler::load_user_task(const char* filename)
void Scheduler::reset_task(Task* task, ELFImage* new_image) void Scheduler::reset_task(Task* task, ELFImage* new_image)
{ {
memset(&task->regs, 0, sizeof(Context));
task->state = task->Running; task->state = task->Running;
task->regs.rip = new_image->entry; task->regs.rip = new_image->entry;
task->image = new_image; task->image = new_image;