mirror of https://github.com/acidanthera/audk.git
EmbeddedPkg/PrePiLib: allocate code pages for DxeCore
The recently introduced memory protection features inadvertently broke the boot on all PrePi platforms, because the changes to explicitly use EfiBootServicesCode for loading the DxeCore PE/COFF image need to be applied in a different way for PrePi. So add a simple helper function that sets the type of an allocation to EfiBootServicesCode, and invoke it to allocate the space for DxeCore. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Tested-by: Michael Zimmermann <sigmaepsilon92@gmail.com> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
This commit is contained in:
parent
c03f5b2c42
commit
6ac97ad31e
|
@ -26,6 +26,7 @@
|
|||
#include <Library/UefiDecompressLib.h>
|
||||
#include <Library/PeCoffLib.h>
|
||||
#include <Library/CacheMaintenanceLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/TimerLib.h>
|
||||
#include <Library/PerformanceLib.h>
|
||||
|
||||
|
|
|
@ -28,6 +28,37 @@ SecWinNtPeiLoadFile (
|
|||
IN EFI_PHYSICAL_ADDRESS *EntryPoint
|
||||
);
|
||||
|
||||
STATIC
|
||||
VOID*
|
||||
EFIAPI
|
||||
AllocateCodePages (
|
||||
IN UINTN Pages
|
||||
)
|
||||
{
|
||||
VOID *Alloc;
|
||||
EFI_PEI_HOB_POINTERS Hob;
|
||||
|
||||
Alloc = AllocatePages (Pages);
|
||||
if (Alloc == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// find the HOB we just created, and change the type to EfiBootServicesCode
|
||||
Hob.Raw = GetFirstHob (EFI_HOB_TYPE_MEMORY_ALLOCATION);
|
||||
while (Hob.Raw != NULL) {
|
||||
if (Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress == (UINTN)Alloc) {
|
||||
Hob.MemoryAllocation->AllocDescriptor.MemoryType = EfiBootServicesCode;
|
||||
return Alloc;
|
||||
}
|
||||
Hob.Raw = GetNextHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, GET_NEXT_HOB (Hob));
|
||||
}
|
||||
|
||||
ASSERT (FALSE);
|
||||
|
||||
FreePages (Alloc, Pages);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
|
@ -54,7 +85,7 @@ LoadPeCoffImage (
|
|||
//
|
||||
// Allocate Memory for the image
|
||||
//
|
||||
Buffer = AllocatePages (EFI_SIZE_TO_PAGES((UINT32)ImageContext.ImageSize));
|
||||
Buffer = AllocateCodePages (EFI_SIZE_TO_PAGES((UINT32)ImageContext.ImageSize));
|
||||
ASSERT (Buffer != 0);
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue