; Start interrupts
sti
- ; Initialise System Calls (SYSCALL/SYSRET)
- ; Set IA32_EFER.SCE
- mov ecx, 0xC0000080
- rdmsr
- or eax, 1
- wrmsr
; Set IA32_LSTAR (RIP of handler)
mov ecx, 0xC0000082 ; IA32_LSTAR
mov eax, SyscallStub - 0xFFFFFFFF00000000
; Set IA32_FMASK (flags mask)
mov ecx, 0xC0000084
rdmsr
- mov eax, 0x202
+ mov eax, ~0x202
wrmsr
; Set IA32_STAR (Kernel/User CS)
mov ecx, 0xC0000081
;PUSH_XMM
mov rdi, rsp
- xchg bx, bx
+; xchg bx, bx
call Error_Handler
;POP_XMM
; R9
sub rsp, (6+2)*8
mov [rsp+0x00], rax ; Number
-; mov [rsp+0x08], rax ; Errno (don't care really)
+; mov [rsp+0x08], rax ; Errno (output only)
mov [rsp+0x10], rdi ; Arg1
mov [rsp+0x18], rsi ; Arg2
mov [rsp+0x20], rdx ; Arg3
times 16*NUM_IRQ_CALLBACKS dq 0
gaIRQ_DataPtrs:
times 16*NUM_IRQ_CALLBACKS dq 0
+
+; vim: ft=nasm