56 lines
864 B
ArmAsm
56 lines
864 B
ArmAsm
|
|
.macro EXCEPTION_HANDLER name function error_code=0
|
|
.global \name
|
|
.type \name, @function
|
|
\name:
|
|
if \error_code == 0
|
|
pushq $0
|
|
end
|
|
|
|
pushq %rdi
|
|
pushq %rsi
|
|
pushq %rdx
|
|
pushq %rcx
|
|
pushq %rax
|
|
pushq %r8
|
|
pushq %r9
|
|
pushq %r10
|
|
pushq %r11
|
|
pushq %rbx
|
|
pushq %rbp
|
|
pushq %r12
|
|
pushq %r13
|
|
pushq %r14
|
|
pushq %r15
|
|
|
|
movq %rsp, %rdi
|
|
/* Error code is second parameter */
|
|
movq 120(%rsp), %rsi
|
|
call \function
|
|
|
|
/* Restore regs */
|
|
popq %r15
|
|
popq %r14
|
|
popq %r13
|
|
popq %r12
|
|
popq %rbp
|
|
popq %rbx
|
|
popq %r11
|
|
popq %r10
|
|
popq %r9
|
|
popq %r8
|
|
popq %rax
|
|
popq %rcx
|
|
popq %rdx
|
|
popq %rsi
|
|
popq %rdi
|
|
|
|
addq $8, %rsp
|
|
|
|
iretq
|
|
.endm
|
|
.text
|
|
.code64
|
|
|
|
EXCEPTION_HANDLER boot_page_fault doBootPageFault error_code=1
|
|
EXCEPTION_HANDLER boot_nmi doBootNMI |