ArmVirtPkg/PrePi: Ensure timely execution of library constructors

PrePi has a bare metal entry point, and so it is in charge of calling
the library constructors once the C runtime has been initialized
sufficiently.

However, we are now relying on a HOB to have been constructed by the
time the MMU code runs, and so the constructors should be run before
that.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
Ard Biesheuvel 2023-01-19 00:15:08 +01:00 committed by mergify[bot]
parent d0ff1cae3a
commit 6c8a08bd8a
1 changed files with 3 additions and 3 deletions

View File

@ -60,6 +60,9 @@ PrePiMain (
//
InvalidateDataCacheRange ((VOID *)(UINTN)PcdGet64 (PcdFdBaseAddress), PcdGet32 (PcdFdSize));
// SEC phase needs to run library constructors by hand.
ProcessLibraryConstructorList ();
// Initialize MMU and Memory HOBs (Resource Descriptor HOBs)
Status = MemoryPeim (UefiMemoryBase, FixedPcdGet32 (PcdSystemMemoryUefiRegionSize));
ASSERT_EFI_ERROR (Status);
@ -93,9 +96,6 @@ PrePiMain (
// Now, the HOB List has been initialized, we can register performance information
PERF_START (NULL, "PEI", NULL, StartTimeStamp);
// SEC phase needs to run library constructors by hand.
ProcessLibraryConstructorList ();
// Assume the FV that contains the SEC (our code) also contains a compressed FV.
Status = DecompressFirstFv ();
ASSERT_EFI_ERROR (Status);