]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/PrePeiCore/PrePeiCore.c
ArmPlatformPkg: Fix stack switch bug after commit 7945b29
[mirror_edk2.git] / ArmPlatformPkg / PrePeiCore / PrePeiCore.c
index 65b07b6d894112d7380b25a758335179a751d55d..3a81e2e23f2c77b3c20e5244bd8d6d4557b0ec7b 100644 (file)
@@ -117,22 +117,25 @@ PrePeiCoreTemporaryRamSupport (
   VOID                             *NewHeap;\r
   VOID                             *OldStack;\r
   VOID                             *NewStack;\r
+  UINTN                            HeapSize;\r
+\r
+  HeapSize = ALIGN_VALUE (CopySize / 2, CPU_STACK_ALIGNMENT);\r
 \r
   OldHeap = (VOID*)(UINTN)TemporaryMemoryBase;\r
-  NewHeap = (VOID*)((UINTN)PermanentMemoryBase + (CopySize >> 1));\r
+  NewHeap = (VOID*)((UINTN)PermanentMemoryBase + (CopySize - HeapSize));\r
 \r
-  OldStack = (VOID*)((UINTN)TemporaryMemoryBase + (CopySize >> 1));\r
+  OldStack = (VOID*)((UINTN)TemporaryMemoryBase + HeapSize);\r
   NewStack = (VOID*)(UINTN)PermanentMemoryBase;\r
 \r
   //\r
   // Migrate the temporary memory stack to permanent memory stack.\r
   //\r
-  CopyMem (NewStack, OldStack, CopySize >> 1);\r
+  CopyMem (NewStack, OldStack, CopySize - HeapSize);\r
 \r
   //\r
   // Migrate the temporary memory heap to permanent memory heap.\r
   //\r
-  CopyMem (NewHeap, OldHeap, CopySize >> 1);\r
+  CopyMem (NewHeap, OldHeap, HeapSize);\r
 \r
   SecSwitchStack ((UINTN)NewStack - (UINTN)OldStack);\r
 \r