diff options
Diffstat (limited to 'src/arch/amd64/idt.S')
-rw-r--r-- | src/arch/amd64/idt.S | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/arch/amd64/idt.S b/src/arch/amd64/idt.S index 32670c8..8cb537e 100644 --- a/src/arch/amd64/idt.S +++ b/src/arch/amd64/idt.S @@ -49,8 +49,10 @@ align 8 isr_stub_%+%1: PUSHALL cld - mov rdi, %1 - mov rsi, 0 + mov rdi, %1 ; exception number + mov rsi, 0 ; placeholder error code + mov rdx, [rsp + 15 * 8] ; instruction pointer + mov rcx, rbp ; base pointer for stack trace call idt_exception_handler POPALL iretq @@ -64,10 +66,13 @@ align 8 isr_stub_%+%1: PUSHALL cld - mov rdi, %1 - pop rsi + mov rdi, %1 ; exception number + mov rsi, [rsp + 15 * 8] ; error code + mov rdx, [rsp + 16 * 8] ; instruction pointer + mov rcx, rbp ; base pointer for stack trace call idt_exception_handler POPALL + sub rsp, 8 ; discard error code iretq %endmacro |