UefiCpuPkg/PiSmmCpuDxeSmm: patch "gSmiStack" with PatchInstructionX86()
[mirror_edk2.git] / UefiCpuPkg / PiSmmCpuDxeSmm / SmramSaveState.c
index d34345d5ff8034515165fd782c10402a69f88cea..f0c289254330d3949a0f00dcd3fcc98818c13b9f 100644 (file)
@@ -106,7 +106,7 @@ typedef struct {
 /// Variables from SMI Handler\r
 ///\r
 X86_ASSEMBLY_PATCH_LABEL gPatchSmbase;\r
 /// Variables from SMI Handler\r
 ///\r
 X86_ASSEMBLY_PATCH_LABEL gPatchSmbase;\r
-extern volatile UINT32   gSmiStack;\r
+X86_ASSEMBLY_PATCH_LABEL gPatchSmiStack;\r
 extern UINT32            gSmiCr3;\r
 extern volatile UINT8    gcSmiHandlerTemplate[];\r
 extern CONST UINT16      gcSmiHandlerSize;\r
 extern UINT32            gSmiCr3;\r
 extern volatile UINT8    gcSmiHandlerTemplate[];\r
 extern CONST UINT16      gcSmiHandlerSize;\r
@@ -686,6 +686,7 @@ InstallSmiHandler (
   )\r
 {\r
   PROCESSOR_SMM_DESCRIPTOR  *Psd;\r
   )\r
 {\r
   PROCESSOR_SMM_DESCRIPTOR  *Psd;\r
+  UINT32                    CpuSmiStack;\r
 \r
   //\r
   // Initialize PROCESSOR_SMM_DESCRIPTOR\r
 \r
   //\r
   // Initialize PROCESSOR_SMM_DESCRIPTOR\r
@@ -716,7 +717,8 @@ InstallSmiHandler (
   //\r
   // Initialize values in template before copy\r
   //\r
   //\r
   // Initialize values in template before copy\r
   //\r
-  gSmiStack             = (UINT32)((UINTN)SmiStack + StackSize - sizeof (UINTN));\r
+  CpuSmiStack = (UINT32)((UINTN)SmiStack + StackSize - sizeof (UINTN));\r
+  PatchInstructionX86 (gPatchSmiStack, CpuSmiStack, 4);\r
   gSmiCr3               = Cr3;\r
   PatchInstructionX86 (gPatchSmbase, SmBase, 4);\r
   gSmiHandlerIdtr.Base  = IdtBase;\r
   gSmiCr3               = Cr3;\r
   PatchInstructionX86 (gPatchSmbase, SmBase, 4);\r
   gSmiHandlerIdtr.Base  = IdtBase;\r
@@ -725,7 +727,7 @@ InstallSmiHandler (
   //\r
   // Set the value at the top of the CPU stack to the CPU Index\r
   //\r
   //\r
   // Set the value at the top of the CPU stack to the CPU Index\r
   //\r
-  *(UINTN*)(UINTN)gSmiStack = CpuIndex;\r
+  *(UINTN*)(UINTN)CpuSmiStack = CpuIndex;\r
 \r
   //\r
   // Copy template to CPU specific SMI handler location\r
 \r
   //\r
   // Copy template to CPU specific SMI handler location\r