diff --git a/include/kernel.h b/include/kernel.h index 50fbddc..d160298 100644 --- a/include/kernel.h +++ b/include/kernel.h @@ -110,8 +110,28 @@ struct CpuInfo_t }; struct ISRFrame_t { - /* The register file */ - ulong regs[20]; + /* The registers */ + ulong efer; + ulong cr0; + ulong cr2; + ulong cr3; + ulong cr4; + ulong cr8; + ulong r15; + ulong r14; + ulong r13; + ulong r12; + ulong r11; + ulong r10; + ulong r9; + ulong r8; + ulong rbp; + ulong rdi; + ulong rsi; + ulong rdx; + ulong rcx; + ulong rbx; + ulong rax; /* The error code and interrupt id */ ulong intNo; diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c index 06e59ff..896f2d2 100644 --- a/kaleid/kernel/init/init.c +++ b/kaleid/kernel/init/init.c @@ -49,7 +49,7 @@ noreturn void BtStartKern(multiboot_info_t *mbInfo, uint mbMagic, void *codeSeg) // Memory MmInitMemoryMap(); - MmInitGdt(); + //MmInitGdt(); MmInitPaging(); MmInitHeap(); diff --git a/kaleid/kernel/ke/idt.c b/kaleid/kernel/ke/idt.c index 54ea408..b26df14 100644 --- a/kaleid/kernel/ke/idt.c +++ b/kaleid/kernel/ke/idt.c @@ -277,43 +277,50 @@ static void EarlyExceptionHandler(ISRFrame_t *regs) { KeStartPanic("[ISR 0x%x] Irrecoverable Kernel %s\n\n" " Error code : 0x%x (%b)\n\n" - " RIP: %#016lx CS: %#016lx RSP: %#016lx\n" - " SS: %#016lx RAX: %#016lx RBX: %#016lx\n" - " RCX: %#016lx RDX: %#016lx RSI: %#016lx\n" - " RDI: %#016lx RBP: %#016lx R8: %#016lx\n" - " R9: %#016lx R10: %#016lx R11: %#016lx\n" - " R12: %#016lx R13: %#016lx R14: %#016lx\n" - " R15: %#016lx CR0: %#016lx CR2: %#016lx\n" - " CR3: %#016lx CR4: %#016lx CR8: %#016lx\n" + + " RIP: %#016lx RSP: %#016lx RBP: %#016lx\n\n" + + " SS: %#016lx CS: %#016lx CR0: %#016lx\n" + " CR2: %#016lx CR3: %#016lx CR4: %#016lx\n" + " CR8: %#016lx EFE: %#016lx \n\n" + + " RAX: %#016lx RBX: %#016lx RCX: %#016lx\n" + " RDX: %#016lx RSI: %#016lx RDI: %#016lx\n" + + " R8: %#016lx R9: %#016lx R10: %#016lx\n" + " R11: %#016lx R12: %#016lx R13: %#016lx\n" + " R14: %#016lx R15: %#016lx \n\n" + " RFLAGS: %#022b (%#06x)", regs->intNo, ExceptionsChar[regs->intNo], regs->ErrorCode, regs->ErrorCode, regs->rip, - regs->cs, regs->rsp, + regs->rbp, regs->ss, - regs->regs[5], - regs->regs[6], - regs->regs[7], - regs->regs[8], - regs->regs[9], - regs->regs[10], - regs->regs[11], - regs->regs[12], - regs->regs[13], - regs->regs[14], - regs->regs[15], - regs->regs[16], - regs->regs[17], - regs->regs[18], - regs->regs[19], - regs->regs[0], - regs->regs[1], - regs->regs[2], - regs->regs[3], - regs->regs[4], + regs->cs, + regs->cr0, + regs->cr2, + regs->cr3, + regs->cr4, + regs->cr8, + regs->efer, + regs->rax, + regs->rbx, + regs->rcx, + regs->rdx, + regs->rsi, + regs->rdi, + regs->r8, + regs->r9, + regs->r10, + regs->r11, + regs->r12, + regs->r13, + regs->r14, + regs->r15, regs->rflags, regs->rflags ); diff --git a/kaleid/kernel/ke/isr.asm b/kaleid/kernel/ke/isr.asm index 9365fb3..8a92419 100644 --- a/kaleid/kernel/ke/isr.asm +++ b/kaleid/kernel/ke/isr.asm @@ -53,6 +53,9 @@ isrPreHandler: push rax mov rax, cr0 push rax + mov rcx, 0xC0000080 + rdmsr + push rax ; Check if we are switching from user mode to supervisor mode mov rax, [rsp + 152] @@ -84,7 +87,7 @@ isrPreHandler: .SExit: ; pop the control registers - add rsp, 40 + add rsp, 48 popAll ; pop the error code and interrupt id diff --git a/kaleid/kernel/mm/paging.c b/kaleid/kernel/mm/paging.c index ea637cf..4c54ddd 100644 --- a/kaleid/kernel/mm/paging.c +++ b/kaleid/kernel/mm/paging.c @@ -166,43 +166,50 @@ static void PagingHandler(ISRFrame_t *regs) { KeStartPanic("[ISR 0x%x] Irrecoverable Kernel Page Fault at %p\n\n" " Error code : 0x%x (%b)\n\n" - " RIP: %#016lx CS: %#016lx RSP: %#016lx\n" - " SS: %#016lx RAX: %#016lx RBX: %#016lx\n" - " RCX: %#016lx RDX: %#016lx RSI: %#016lx\n" - " RDI: %#016lx RBP: %#016lx R8: %#016lx\n" - " R9: %#016lx R10: %#016lx R11: %#016lx\n" - " R12: %#016lx R13: %#016lx R14: %#016lx\n" - " R15: %#016lx CR0: %#016lx CR2: %#016lx\n" - " CR3: %#016lx CR4: %#016lx CR8: %#016lx\n" + + " RIP: %#016lx RSP: %#016lx RBP: %#016lx\n\n" + + " SS: %#016lx CS: %#016lx CR0: %#016lx\n" + " CR2: %#016lx CR3: %#016lx CR4: %#016lx\n" + " CR8: %#016lx EFE: %#016lx \n\n" + + " RAX: %#016lx RBX: %#016lx RCX: %#016lx\n" + " RDX: %#016lx RSI: %#016lx RDI: %#016lx\n" + + " R8: %#016lx R9: %#016lx R10: %#016lx\n" + " R11: %#016lx R12: %#016lx R13: %#016lx\n" + " R14: %#016lx R15: %#016lx \n\n" + " RFLAGS: %#022b (%#06x)", regs->intNo, - regs->regs[1], + regs->cr2, regs->ErrorCode, regs->ErrorCode, regs->rip, - regs->cs, regs->rsp, + regs->rbp, regs->ss, - regs->regs[5], - regs->regs[6], - regs->regs[7], - regs->regs[8], - regs->regs[9], - regs->regs[10], - regs->regs[11], - regs->regs[12], - regs->regs[13], - regs->regs[14], - regs->regs[15], - regs->regs[16], - regs->regs[17], - regs->regs[18], - regs->regs[19], - regs->regs[0], - regs->regs[1], - regs->regs[2], - regs->regs[3], - regs->regs[4], + regs->cs, + regs->cr0, + regs->cr2, + regs->cr3, + regs->cr4, + regs->cr8, + regs->efer, + regs->rax, + regs->rbx, + regs->rcx, + regs->rdx, + regs->rsi, + regs->rdi, + regs->r8, + regs->r9, + regs->r10, + regs->r11, + regs->r12, + regs->r13, + regs->r14, + regs->r15, regs->rflags, regs->rflags );