DEBUG builds of PEI code will print a diagnostic message regarding
the utilization of temporary RAM before switching to permanent RAM.
For example,
Total temporary memory: 16352 bytes.
temporary memory stack ever used: 4820 bytes.
temporary memory heap used for HobList: 4720 bytes.
Tracking stack utilization like this requires the stack to be seeded
with a known magic value, and this needs to occur before entering C
code, given that it uses the stack. Currently, only Nt32Pkg appears
to implement this feature, but it is useful nonetheless, so let's
wire it up for PrePeiCore.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
\r
_SetupPrimaryCoreStack:\r
mov sp, x1\r
\r
_SetupPrimaryCoreStack:\r
mov sp, x1\r
+ MOV64 (x8, FixedPcdGet64 (PcdCPUCoresStackBase))\r
+ MOV64 (x9, FixedPcdGet32 (PcdInitValueInTempStack) |\\r
+ FixedPcdGet32 (PcdInitValueInTempStack) << 32)\r
+0:stp x9, x9, [x8], #16\r
+ cmp x8, x1\r
+ b.lt 0b\r
\r
_SetupPrimaryCoreStack:\r
mov sp, r1\r
\r
_SetupPrimaryCoreStack:\r
mov sp, r1\r
+ MOV32 (r8, FixedPcdGet64 (PcdCPUCoresStackBase))\r
+ MOV32 (r9, FixedPcdGet32 (PcdInitValueInTempStack))\r
+ mov r10, r9\r
+ mov r11, r9\r
+ mov r12, r9\r
+0:stm r8!, {r9-r12}\r
+ cmp r8, r1\r
+ blt 0b\r
b _PrepareArguments\r
\r
_NeverReturn:\r
b _PrepareArguments\r
\r
_NeverReturn:\r
\r
_SetupPrimaryCoreStack\r
mov sp, r1\r
\r
_SetupPrimaryCoreStack\r
mov sp, r1\r
+ mov32 r8, FixedPcdGet64 (PcdCPUCoresStackBase)\r
+ mov32 r9, FixedPcdGet32 (PcdInitValueInTempStack)\r
+ mov r10, r9\r
+ mov r11, r9\r
+ mov r12, r9\r
+0:stm r8!, {r9-r12}\r
+ cmp r8, r1\r
+ blt 0b\r
b _PrepareArguments\r
\r
_NeverReturn\r
b _PrepareArguments\r
\r
_NeverReturn\r
gArmTokenSpaceGuid.PcdGicDistributorBase\r
gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase\r
gArmTokenSpaceGuid.PcdGicSgiIntId\r
gArmTokenSpaceGuid.PcdGicDistributorBase\r
gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase\r
gArmTokenSpaceGuid.PcdGicSgiIntId\r
+\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdInitValueInTempStack\r
gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase\r
gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize\r
gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize\r
gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase\r
gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize\r
gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize\r
+\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdInitValueInTempStack\r