diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2021-05-02 18:54:11 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2021-05-02 18:54:11 +0200 |
| commit | 5c3e2d90b3efb6daecd5655c49d3c61b1f75fecc (patch) | |
| tree | f13afddb50b2536b4ddc1ff7f061f040412f2889 /src/core/scheduler.cc | |
| parent | e59104ffb55abe522c82d658f1f285149cca2cb1 (diff) | |
Debug scheduler
Diffstat (limited to 'src/core/scheduler.cc')
| -rw-r--r-- | src/core/scheduler.cc | 40 |
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); |
