ArmPlatformPkg/PrePeiCore: seed temporary stack before entering PEI core

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>
This commit is contained in:
Ard Biesheuvel 2017-10-20 11:44:04 +01:00
parent c2c90b42af
commit 7e2a8dfe8a
5 changed files with 26 additions and 0 deletions

View File

@ -84,4 +84,10 @@ _PrepareArguments:
_SetupPrimaryCoreStack:
mov sp, x1
MOV64 (x8, FixedPcdGet64 (PcdCPUCoresStackBase))
MOV64 (x9, FixedPcdGet32 (PcdInitValueInTempStack) |\
FixedPcdGet32 (PcdInitValueInTempStack) << 32)
0:stp x9, x9, [x8], #16
cmp x8, x1
b.lt 0b
b _PrepareArguments

View File

@ -65,6 +65,14 @@ _PrepareArguments:
_SetupPrimaryCoreStack:
mov sp, r1
MOV32 (r8, FixedPcdGet64 (PcdCPUCoresStackBase))
MOV32 (r9, FixedPcdGet32 (PcdInitValueInTempStack))
mov r10, r9
mov r11, r9
mov r12, r9
0:stm r8!, {r9-r12}
cmp r8, r1
blt 0b
b _PrepareArguments
_NeverReturn:

View File

@ -79,6 +79,14 @@ _PrepareArguments
_SetupPrimaryCoreStack
mov sp, r1
mov32 r8, FixedPcdGet64 (PcdCPUCoresStackBase)
mov32 r9, FixedPcdGet32 (PcdInitValueInTempStack)
mov r10, r9
mov r11, r9
mov r12, r9
0:stm r8!, {r9-r12}
cmp r8, r1
blt 0b
b _PrepareArguments
_NeverReturn

View File

@ -75,3 +75,5 @@
gArmTokenSpaceGuid.PcdGicDistributorBase
gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase
gArmTokenSpaceGuid.PcdGicSgiIntId
gEfiMdeModulePkgTokenSpaceGuid.PcdInitValueInTempStack

View File

@ -69,3 +69,5 @@
gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase
gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize
gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize
gEfiMdeModulePkgTokenSpaceGuid.PcdInitValueInTempStack