EmulatorPkg/Sec: Change scope of PpiArray[10]

The local variable PpiArray[10] is declared in the middle
of the SEC module _ModuleEntryPoint() with its own scope.
However, PpiArray has a dangling reference to its location
on the stack after the scope is closed.  This causes issues
with some compilers (e.g. XCODE5).

The fix is to move the declaration of PpiArray[10] to
the beginning of the function, so it is scoped correctly
for all references to this local variable and references
to its location.

Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Andrew Fish <afish@apple.com>
Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Tested-by: Andrew Fish <afish@apple.com>
This commit is contained in:
Andrew Fish 2019-08-15 13:00:31 -07:00 committed by Michael D Kinney
parent 6ed2c8bed3
commit d47778e522
1 changed files with 7 additions and 9 deletions

View File

@ -75,6 +75,7 @@ _ModuleEntryPoint (
EFI_PEI_PPI_DESCRIPTOR *SecPpiList; EFI_PEI_PPI_DESCRIPTOR *SecPpiList;
UINTN SecReseveredMemorySize; UINTN SecReseveredMemorySize;
UINTN Index; UINTN Index;
EFI_PEI_PPI_DESCRIPTOR PpiArray[10];
EMU_MAGIC_PAGE()->PpiList = PpiList; EMU_MAGIC_PAGE()->PpiList = PpiList;
ProcessLibraryConstructorList (); ProcessLibraryConstructorList ();
@ -104,16 +105,13 @@ _ModuleEntryPoint (
SecCoreData->PeiTemporaryRamBase = (VOID *)((UINTN)SecCoreData->PeiTemporaryRamBase + SecReseveredMemorySize); SecCoreData->PeiTemporaryRamBase = (VOID *)((UINTN)SecCoreData->PeiTemporaryRamBase + SecReseveredMemorySize);
SecCoreData->PeiTemporaryRamSize -= SecReseveredMemorySize; SecCoreData->PeiTemporaryRamSize -= SecReseveredMemorySize;
#else #else
{
// //
// When I subtrack from SecCoreData->PeiTemporaryRamBase PEI Core crashes? Either there is a bug // When I subtrack from SecCoreData->PeiTemporaryRamBase PEI Core crashes? Either there is a bug
// or I don't understand temp RAM correctly? // or I don't understand temp RAM correctly?
// //
EFI_PEI_PPI_DESCRIPTOR PpiArray[10];
SecPpiList = &PpiArray[0]; SecPpiList = &PpiArray[0];
ASSERT (sizeof (PpiArray) >= SecReseveredMemorySize); ASSERT (sizeof (PpiArray) >= SecReseveredMemorySize);
}
#endif #endif
// Copy existing list, and append our entries. // Copy existing list, and append our entries.
CopyMem (SecPpiList, PpiList, sizeof (EFI_PEI_PPI_DESCRIPTOR) * Index); CopyMem (SecPpiList, PpiList, sizeof (EFI_PEI_PPI_DESCRIPTOR) * Index);