Mercurial > lcfOS
diff cos/kernel/handlers.c @ 36:91f91ff07ea8
Removed test variables
author | windel |
---|---|
date | Mon, 16 Jan 2012 20:47:05 +0100 |
parents | d8185ddb6c7b |
children | 24ce177e01e8 |
line wrap: on
line diff
--- a/cos/kernel/handlers.c Mon Jan 16 17:38:00 2012 +0100 +++ b/cos/kernel/handlers.c Mon Jan 16 20:47:05 2012 +0100 @@ -45,24 +45,24 @@ void setIDTentry(int num, void (*handler)(), uint16_t selector, uint8_t flags) { - // Fill one entry with IDT info: - uint64_t offset; + // Fill one entry with IDT info: + uint64_t offset; - // Typecast the function pointer to a number: - offset = (uint64_t)handler; + // Typecast the function pointer to a number: + offset = (uint64_t)handler; - // Set offset: - idt[num].baseLow = offset & 0xFFFF; - idt[num].baseMid = (offset >> 16) & 0xFFFF; - idt[num].baseHigh = (offset >> 32) & 0xFFFFFFFF; + // Set offset: + idt[num].baseLow = offset & 0xFFFF; + idt[num].baseMid = (offset >> 16) & 0xFFFF; + idt[num].baseHigh = (offset >> 32) & 0xFFFFFFFF; - // Set flags and selector: - idt[num].selector = selector; - idt[num].flags = flags; + // Set flags and selector: + idt[num].selector = selector; + idt[num].flags = flags; - // Set reserved fields: - idt[num].reserved1 = 0; - idt[num].reserved2 = 0; + // Set reserved fields: + idt[num].reserved1 = 0; + idt[num].reserved2 = 0; } void setupIDT(void) { @@ -149,11 +149,27 @@ outb(0xA1, maskslave); } +/* Function that prints the contents of all registers + on the interrupted stack. */ +void display_registers(uint64_t *regs) +{ + // Pushed by interrupt handler assembler: + printf("rax: %x\n", regs[6]); + printf("rbx: %x\n", regs[3]); + printf("rcx: %x\n", regs[5]); + printf("rdx: %x\n", regs[4]); + printf("rsi: %x\n", regs[1]); + printf("rdi: %x\n", regs[0]); + printf("rbp: %x\n", regs[2]); + // Pushed by CPU: + printf("rip: %x\n", regs[9]); +} + void gp_fault(uint64_t *regs) { printf("GP fault\n"); printf("Error code: %x\n", regs[8]); - printf("RIP: %x\n", regs[9]); + display_registers(regs); panic("No resolution to general protection fault!"); } @@ -163,7 +179,7 @@ uint64_t faulting_address; asm volatile("mov %%cr2, %0" : "=r" (faulting_address)); printf("Error code: %x\n", regs[8]); - printf("RIP: %x\n", regs[9]); + display_registers(regs); printf("Faulting address: %x\n", faulting_address); panic("No resolution to page fault!");