2 ; This is the assembly code for page fault handler hook.
4 ; Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
6 ; SPDX-License-Identifier: BSD-2-Clause-Patent
10 extern ASM_PFX(PageFaultHandler)
15 global ASM_PFX(PageFaultHandlerHook)
16 ASM_PFX(PageFaultHandlerHook):
21 ;push rax ; save all volatile registers
28 ; save volatile fp registers
29 ; 68h + 08h(for alignment)
32 movdqa [rsp + 0x0], xmm0
33 movdqa [rsp + 0x10], xmm1
34 movdqa [rsp + 0x20], xmm2
35 movdqa [rsp + 0x30], xmm3
36 movdqa [rsp + 0x40], xmm4
37 movdqa [rsp + 0x50], xmm5
40 call ASM_PFX(PageFaultHandler)
43 ; load volatile fp registers
45 movdqa xmm0, [rsp + 0x0]
46 movdqa xmm1, [rsp + 0x10]
47 movdqa xmm2, [rsp + 0x20]
48 movdqa xmm3, [rsp + 0x30]
49 movdqa xmm4, [rsp + 0x40]
50 movdqa xmm5, [rsp + 0x50]
59 ;pop rax ; restore all volatile registers
63 ; rax returned from PageFaultHandler is NULL or OriginalHandler address
64 ; NULL if the page fault is handled by PageFaultHandler
65 ; OriginalHandler address if the page fault is not handled by PageFaultHandler
68 ; save OriginalHandler address
75 ; jump to OriginalHandler
76 jmp qword [rsp - 0x10]
79 add rsp, 0x8 ; skip error code for PF