aboutsummaryrefslogtreecommitdiff
path: root/src/core/scheduler.cc
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2021-05-02 18:54:11 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2021-05-02 18:54:11 +0200
commit5c3e2d90b3efb6daecd5655c49d3c61b1f75fecc (patch)
treef13afddb50b2536b4ddc1ff7f061f040412f2889 /src/core/scheduler.cc
parente59104ffb55abe522c82d658f1f285149cca2cb1 (diff)
Debug scheduler
Diffstat (limited to 'src/core/scheduler.cc')
-rw-r--r--src/core/scheduler.cc40
1 files changed, 23 insertions, 17 deletions
diff --git a/src/core/scheduler.cc b/src/core/scheduler.cc
index fee5716..29f1f62 100644
--- a/src/core/scheduler.cc
+++ b/src/core/scheduler.cc
@@ -20,30 +20,35 @@ void schedule(){
// to the clock() %rbp value and then we access to the registers SAVE_REGS in int.S
u64* stack;
asm("mov %%rbp, %%rax;mov (%%rax), %%rbx; add $16, %%rbx; mov %%rbx,%0": "=m"(stack)::"rax","rbx");
-
+
// Save current task
PROC *t=&procs[active_process];
- t->registers.r8=stack[0];
- t->registers.r9=stack[1];
- t->registers.r10=stack[2];
- t->registers.r11=stack[3];
- t->registers.r12=stack[4];
- t->registers.r13=stack[5];
- t->registers.r14=stack[6];
+ t->registers.rdi=stack[0];
+ t->registers.rsi=stack[1];
+ t->registers.rbp=stack[2];
+ t->registers.rdx=stack[3];
+ t->registers.rcx=stack[4];
+ t->registers.rbx=stack[5];
+ t->registers.rax=stack[6];
t->registers.r15=stack[7];
- t->registers.rdi=stack[8];
- t->registers.rsi=stack[9];
- t->registers.rbp=stack[10];
- t->registers.rdx=stack[11];
- t->registers.rcx=stack[12];
- t->registers.rbx=stack[13];
- t->registers.rax=stack[14];
+ t->registers.r14=stack[8];
+ t->registers.r13=stack[9];
+ t->registers.r12=stack[10];
+ t->registers.r11=stack[11];
+ t->registers.r10=stack[12];
+ t->registers.r9=stack[13];
+ t->registers.r8=stack[14];
t->registers.rip=stack[15];
t->registers.cs=stack[16];
t->registers.eflags=stack[17];
t->registers.rsp=stack[18];
- t->registers.ds=stack[19];
+ t->registers.ss=stack[19];
+ if (t->registers.cs!=0x8)
+ t->registers.ds=0x23;
+ else
+ t->registers.ds=0x10;
+ //printk("Old task %d cs:%x rsp:%x ds:%x\n ",active_process+1, t->registers.cs,t->registers.rsp,t->registers.ds);
// Goto next task
active_process++;
if(active_process>=nproc)
@@ -54,7 +59,7 @@ void schedule(){
// Clock acknownledgement
apic_ack();
-
+
asm volatile(
"mov %0, %%rdi \n\t"
"jmp switch \n\t"
@@ -84,6 +89,7 @@ void create_task(void* task, u32 size){
t->registers.rip=TASK_VMA;
t->registers.cs=0x1B; // 0x18 and 0x3 privilege
t->registers.ds=0x23; // 0x20 and 0x3 privilege
+ t->registers.ss=0; // Always 0 in long-mode
// Load task using
lpml4(t->pml4);