]> git.proxmox.com Git - mirror_edk2.git/commitdiff
UefiCpuPkg: Add ExceptionHandlerData for ArchRestoreExceptionContext()
authorJeff Fan <jeff.fan@intel.com>
Wed, 30 Nov 2016 07:11:02 +0000 (15:11 +0800)
committerJeff Fan <jeff.fan@intel.com>
Thu, 1 Dec 2016 08:03:16 +0000 (16:03 +0800)
mReservedVectors is not set, we could add parameter ExceptionHandlerData for
ArchRestoreExceptionContext() that could use it instead of mReservedVectors.

Cc: Feng Tian <feng.tian@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jeff Fan <jeff.fan@intel.com>
Reviewed-by: Feng Tian <feng.tian@intel.com>
UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h
UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/ArchExceptionHandler.c
UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuException.c
UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ArchExceptionHandler.c

index dc5d94150b4e1dc1c6fa6053379e22b5895bb38b..f2e4692c1bec02a7342c4580e187bace6aed74ef 100644 (file)
@@ -211,14 +211,15 @@ ArchSaveExceptionContext (
 /**\r
   Restore CPU exception context when handling EFI_VECTOR_HANDOFF_HOOK_AFTER case.\r
 \r
-  @param[in] ExceptionType  Exception type.\r
-  @param[in] SystemContext  Pointer to EFI_SYSTEM_CONTEXT.\r
-\r
+  @param[in] ExceptionType        Exception type.\r
+  @param[in] SystemContext        Pointer to EFI_SYSTEM_CONTEXT.\r
+  @param[in] ExceptionHandlerData Pointer to exception handler data.\r
 **/\r
 VOID\r
 ArchRestoreExceptionContext (\r
-  IN UINTN                ExceptionType,\r
-  IN EFI_SYSTEM_CONTEXT   SystemContext \r
+  IN UINTN                        ExceptionType,\r
+  IN EFI_SYSTEM_CONTEXT           SystemContext,\r
+  IN EXCEPTION_HANDLER_DATA       *ExceptionHandlerData\r
   );\r
 \r
 /**\r
index b96636bea24ce34600289aac744c7f46e4cde848..7ab2438daeb0f394b7a10dd131055ec83c42ca7d 100644 (file)
@@ -87,19 +87,24 @@ ArchSaveExceptionContext (
 /**\r
   Restore CPU exception context when handling EFI_VECTOR_HANDOFF_HOOK_AFTER case.\r
 \r
-  @param ExceptionType  Exception type.\r
-  @param SystemContext  Pointer to EFI_SYSTEM_CONTEXT.\r
+  @param[in] ExceptionType        Exception type.\r
+  @param[in] SystemContext        Pointer to EFI_SYSTEM_CONTEXT.\r
+  @param[in] ExceptionHandlerData Pointer to exception handler data.\r
 **/\r
 VOID\r
 ArchRestoreExceptionContext (\r
-  IN UINTN                ExceptionType,\r
-  IN EFI_SYSTEM_CONTEXT   SystemContext \r
+  IN UINTN                        ExceptionType,\r
+  IN EFI_SYSTEM_CONTEXT           SystemContext,\r
+  IN EXCEPTION_HANDLER_DATA       *ExceptionHandlerData\r
   )\r
 {\r
-  SystemContext.SystemContextIa32->Eflags        = mReservedVectors[ExceptionType].OldFlags;\r
-  SystemContext.SystemContextIa32->Cs            = mReservedVectors[ExceptionType].OldCs;\r
-  SystemContext.SystemContextIa32->Eip           = mReservedVectors[ExceptionType].OldIp;\r
-  SystemContext.SystemContextIa32->ExceptionData = mReservedVectors[ExceptionType].ExceptionData;\r
+  RESERVED_VECTORS_DATA   *ReservedVectors;\r
+\r
+  ReservedVectors = ExceptionHandlerData->ReservedVectors;\r
+  SystemContext.SystemContextIa32->Eflags        = ReservedVectors[ExceptionType].OldFlags;\r
+  SystemContext.SystemContextIa32->Cs            = ReservedVectors[ExceptionType].OldCs;\r
+  SystemContext.SystemContextIa32->Eip           = ReservedVectors[ExceptionType].OldIp;\r
+  SystemContext.SystemContextIa32->ExceptionData = ReservedVectors[ExceptionType].ExceptionData;\r
 }\r
 \r
 /**\r
index 483a41715874807645b8c7e05bbb080024f448c3..c0fc9a65cad9bb568d25dcc8da372a5e9382c094 100644 (file)
@@ -68,7 +68,7 @@ CommonExceptionHandlerWorker (
         // Old IDT handler has been executed, then restore CPU exception content to\r
         // run new exception handler.\r
         //\r
-        ArchRestoreExceptionContext (ExceptionType, SystemContext);\r
+        ArchRestoreExceptionContext (ExceptionType, SystemContext, ExceptionHandlerData);\r
         //\r
         // Rlease spin lock for ApicId\r
         //\r
index f84b1a8527631c4c82fdbe305349c0aa9f21e462..7495b14530865d315e8a219ecaeedfaf7491bbe3 100644 (file)
@@ -90,21 +90,26 @@ ArchSaveExceptionContext (
 /**\r
   Restore CPU exception context when handling EFI_VECTOR_HANDOFF_HOOK_AFTER case.\r
 \r
-  @param ExceptionType  Exception type.\r
-  @param SystemContext  Pointer to EFI_SYSTEM_CONTEXT.\r
+  @param[in] ExceptionType        Exception type.\r
+  @param[in] SystemContext        Pointer to EFI_SYSTEM_CONTEXT.\r
+  @param[in] ExceptionHandlerData Pointer to exception handler data.\r
 **/\r
 VOID\r
 ArchRestoreExceptionContext (\r
-  IN UINTN                ExceptionType,\r
-  IN EFI_SYSTEM_CONTEXT   SystemContext \r
+  IN UINTN                        ExceptionType,\r
+  IN EFI_SYSTEM_CONTEXT           SystemContext,\r
+  IN EXCEPTION_HANDLER_DATA       *ExceptionHandlerData\r
   )\r
 {\r
-  SystemContext.SystemContextX64->Ss            = mReservedVectors[ExceptionType].OldSs;\r
-  SystemContext.SystemContextX64->Rsp           = mReservedVectors[ExceptionType].OldSp;\r
-  SystemContext.SystemContextX64->Rflags        = mReservedVectors[ExceptionType].OldFlags;\r
-  SystemContext.SystemContextX64->Cs            = mReservedVectors[ExceptionType].OldCs;\r
-  SystemContext.SystemContextX64->Rip           = mReservedVectors[ExceptionType].OldIp;\r
-  SystemContext.SystemContextX64->ExceptionData = mReservedVectors[ExceptionType].ExceptionData;\r
+  RESERVED_VECTORS_DATA   *ReservedVectors;\r
+\r
+  ReservedVectors = ExceptionHandlerData->ReservedVectors;\r
+  SystemContext.SystemContextX64->Ss            = ReservedVectors[ExceptionType].OldSs;\r
+  SystemContext.SystemContextX64->Rsp           = ReservedVectors[ExceptionType].OldSp;\r
+  SystemContext.SystemContextX64->Rflags        = ReservedVectors[ExceptionType].OldFlags;\r
+  SystemContext.SystemContextX64->Cs            = ReservedVectors[ExceptionType].OldCs;\r
+  SystemContext.SystemContextX64->Rip           = ReservedVectors[ExceptionType].OldIp;\r
+  SystemContext.SystemContextX64->ExceptionData = ReservedVectors[ExceptionType].ExceptionData;\r
 }\r
 \r
 /**\r