Fix interrupts
authorJack Miller <jack@codezen.org>
Mon, 19 Sep 2016 23:31:18 +0000 (18:31 -0500)
committerJack Miller <jack@codezen.org>
Mon, 19 Sep 2016 23:31:18 +0000 (18:31 -0500)
Some of this is NASM -> as breakage, but I broke the IDT entries at some
point.

asm/idt.asm

index a4fdbf3..bfdfadb 100644 (file)
@@ -44,12 +44,12 @@ idt_init_one:
     /* Target Low (word) */
     mov %ebx, %ecx
     movw %cx, (%eax)
-    add $10, %eax
+    add $6, %eax
 
     /* Target High (word) */
     shr $16, %ecx
     movw %cx, (%eax)
-    add 2, %eax
+    add $2, %eax
 
     /* Long Mode Target High 32 */
     movl $(VIRT_BASE >> 32), (%eax)
@@ -60,8 +60,8 @@ idt_init_one:
 
     add $(ISR_SIZE), %ebx
 
-    cmp $IDTEND, %eax
-    jge idt_init_one
+    cmp $(IDTEND), %eax
+    jl idt_init_one
 
     lidt IDTR
     ret
@@ -124,12 +124,12 @@ fixup_idtr:
 
 .macro def_isr num err
 .if \err == 0
-    push 0
+    pushq $0
 .else
     nop  // pad to keep isrs the same size
     nop  // push is 2 bytes, nop is 1 byte
 .endif
-    push $\num
+    pushq $\num
     jmp exception
 .endm
 
@@ -168,8 +168,8 @@ def_isr 17, 1
 
 exception:
     SAVE_ALL
-    mov %rdi, %rsp
+    mov %rsp, %rdi
     call dump_exception
     RESTORE_ALL
-    add %rsp, 16  // discard vector, and error
+    add $16, %rsp // discard vector, and error
     iretq