]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/CapsulePei/X64/PageFaultHandler.nasm
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Universal / CapsulePei / X64 / PageFaultHandler.nasm
CommitLineData
3763cfc1
JJ
1;; @file\r
2; This is the assembly code for page fault handler hook.\r
3;\r
4; Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
5;\r
9d510e61 6; SPDX-License-Identifier: BSD-2-Clause-Patent\r
3763cfc1
JJ
7;\r
8;;\r
9\r
10extern ASM_PFX(PageFaultHandler)\r
11\r
12 DEFAULT REL\r
13 SECTION .text\r
14\r
15global ASM_PFX(PageFaultHandlerHook)\r
16ASM_PFX(PageFaultHandlerHook):\r
17 add rsp, -0x10\r
18 ; save rax\r
19 mov [rsp + 0x8], rax\r
20\r
21 ;push rax ; save all volatile registers\r
22 push rcx\r
23 push rdx\r
24 push r8\r
25 push r9\r
26 push r10\r
27 push r11\r
28 ; save volatile fp registers\r
29 ; 68h + 08h(for alignment)\r
30 add rsp, -0x70\r
31 stmxcsr [rsp + 0x60]\r
32 movdqa [rsp + 0x0], xmm0\r
33 movdqa [rsp + 0x10], xmm1\r
34 movdqa [rsp + 0x20], xmm2\r
35 movdqa [rsp + 0x30], xmm3\r
36 movdqa [rsp + 0x40], xmm4\r
37 movdqa [rsp + 0x50], xmm5\r
38\r
39 add rsp, -0x20\r
40 call ASM_PFX(PageFaultHandler)\r
41 add rsp, 0x20\r
42\r
43 ; load volatile fp registers\r
44 ldmxcsr [rsp + 0x60]\r
45 movdqa xmm0, [rsp + 0x0]\r
46 movdqa xmm1, [rsp + 0x10]\r
47 movdqa xmm2, [rsp + 0x20]\r
48 movdqa xmm3, [rsp + 0x30]\r
49 movdqa xmm4, [rsp + 0x40]\r
50 movdqa xmm5, [rsp + 0x50]\r
51 add rsp, 0x70\r
52\r
53 pop r11\r
54 pop r10\r
55 pop r9\r
56 pop r8\r
57 pop rdx\r
58 pop rcx\r
59 ;pop rax ; restore all volatile registers\r
60\r
61 add rsp, 0x10\r
62\r
63 ; rax returned from PageFaultHandler is NULL or OriginalHandler address\r
64 ; NULL if the page fault is handled by PageFaultHandler\r
65 ; OriginalHandler address if the page fault is not handled by PageFaultHandler\r
66 test rax, rax\r
67\r
68 ; save OriginalHandler address\r
69 mov [rsp - 0x10], rax\r
70 ; restore rax\r
71 mov rax, [rsp - 0x8]\r
72\r
73 jz .0\r
74\r
75 ; jump to OriginalHandler\r
76 jmp qword [rsp - 0x10]\r
77\r
78.0:\r
79 add rsp, 0x8 ; skip error code for PF\r
80 iretq\r
81\r