diff --git a/kernel/include/interrupts/Context.h b/kernel/include/interrupts/Context.h index e54b2b34..ac0beb83 100644 --- a/kernel/include/interrupts/Context.h +++ b/kernel/include/interrupts/Context.h @@ -4,7 +4,6 @@ struct Context { uint64_t cr2; - uint64_t ds; uint64_t r15, r14, r13, r12, r11, r10, r9, r8, rsi, rdi, rbp, rdx, rcx, rbx, rax; uint64_t number; union { diff --git a/kernel/include/trace/StackTracer.h b/kernel/include/trace/StackTracer.h index 1f857547..83355ef8 100644 --- a/kernel/include/trace/StackTracer.h +++ b/kernel/include/trace/StackTracer.h @@ -6,6 +6,7 @@ struct StackTracer StackTracer(); StackTracer(uintptr_t base_pointer); void trace(); + void trace_with_ip(uintptr_t ip); private: uintptr_t m_base_pointer; diff --git a/kernel/src/interrupts/InterruptEntry.asm b/kernel/src/interrupts/InterruptEntry.asm index ce9e3250..037ddfd1 100644 --- a/kernel/src/interrupts/InterruptEntry.asm +++ b/kernel/src/interrupts/InterruptEntry.asm @@ -62,13 +62,6 @@ asm_common: push r14 push r15 - mov r8, ds - push r8 - - mov r8, 0x10 - mov ds, r8 - mov es, r8 - mov r8, cr2 push r8 @@ -84,10 +77,6 @@ _asm_interrupt_exit: mov BYTE [__is_in_interrupt_handler], 0 - pop r8 - mov ds, r8 - mov es, r8 - pop r15 pop r14 pop r13 diff --git a/kernel/src/thread/Scheduler.cpp b/kernel/src/thread/Scheduler.cpp index f61b3bdf..44b251ef 100644 --- a/kernel/src/thread/Scheduler.cpp +++ b/kernel/src/thread/Scheduler.cpp @@ -36,7 +36,7 @@ void Scheduler::init() idle_task.regs.rip = (uint64_t)&idle_task_function; idle_task.regs.rsp = (uint64_t)KernelMemoryManager::get_page(); idle_task.regs.cs = 0x08; - idle_task.regs.ds = 0x10; + idle_task.regs.ss = 0x10; asm volatile("pushfq; movq (%%rsp), %%rax; movq %%rax, %0; popfq;" : "=m"(idle_task.regs.rflags)::"%rax"); idle_task.regs.rflags |= 0x200; idle_task.task_sleep = 1000; @@ -62,7 +62,7 @@ void Scheduler::add_kernel_task(void (*task)(void)) new_task->regs.rip = (uint64_t)task; new_task->regs.rsp = (uint64_t)KernelMemoryManager::get_pages(2); // 8 KB is enough for everyone, right? new_task->regs.cs = 0x08; - new_task->regs.ds = 0x10; + new_task->regs.ss = 0x10; asm volatile("pushfq; movq (%%rsp), %%rax; movq %%rax, %0; popfq;" : "=m"(new_task->regs.rflags)::"%rax"); new_task->regs.rflags |= 0x200; // enable interrupts new_task->task_sleep = 0;