X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=EdkCompatibilityPkg%2FCompatibility%2FSmmBaseHelper%2FX64%2FPageFaultHandler.asm;h=d58a04bcfbcb4b6bb53a94312c7bdc083a11e57f;hb=53c76a6478d106c89c4ba48599a8f19b74480d13;hp=2c695e3b88584e73cef0263457adc54c161b2161;hpb=584d5652274f7eaf407b69ca25ddace15043c5b6;p=mirror_edk2.git diff --git a/EdkCompatibilityPkg/Compatibility/SmmBaseHelper/X64/PageFaultHandler.asm b/EdkCompatibilityPkg/Compatibility/SmmBaseHelper/X64/PageFaultHandler.asm index 2c695e3b88..d58a04bcfb 100644 --- a/EdkCompatibilityPkg/Compatibility/SmmBaseHelper/X64/PageFaultHandler.asm +++ b/EdkCompatibilityPkg/Compatibility/SmmBaseHelper/X64/PageFaultHandler.asm @@ -1,6 +1,6 @@ ;------------------------------------------------------------------------------ ; -; Copyright (c) 2010, Intel Corporation. All rights reserved.
+; Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.
; This program and the accompanying materials ; are licensed and made available under the terms and conditions of the BSD License ; which accompanies this distribution. The full text of the license may be found at @@ -19,8 +19,8 @@ ; ;------------------------------------------------------------------------------ -mOriginalHandler PROTO -PageFaultHandler PROTO +EXTERN mOriginalHandler:QWORD +EXTERN PageFaultHandler:PROC .code @@ -32,10 +32,28 @@ PageFaultHandlerHook PROC push r9 push r10 push r11 + + add rsp, -10h * 6 - 8 ; reserve memory to store XMM registers and make address 16-byte alignment + movdqa [rsp], xmm0 + movdqa [rsp + 10h], xmm1 + movdqa [rsp + 20h], xmm2 + movdqa [rsp + 30h], xmm3 + movdqa [rsp + 40h], xmm4 + movdqa [rsp + 50h], xmm5 + add rsp, -20h call PageFaultHandler add rsp, 20h - test rax, rax + + movdqa xmm0, [rsp] + movdqa xmm1, [rsp + 10h] + movdqa xmm2, [rsp + 20h] + movdqa xmm3, [rsp + 30h] + movdqa xmm4, [rsp + 40h] + movdqa xmm5, [rsp + 50h] + add rsp, 10h * 6 + 8 + + test al, al ; set ZF flag pop r11 pop r10 pop r9 @@ -43,10 +61,10 @@ PageFaultHandlerHook PROC pop rdx pop rcx pop rax ; restore all volatile registers - jnz @F + jnz @F ; check ZF flag jmp mOriginalHandler @@: add rsp, 08h ; skip error code for PF iretq PageFaultHandlerHook ENDP - END \ No newline at end of file + END