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!");