mirror of https://github.com/acidanthera/audk.git
Cache FvImage at buffer with its required alignment.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4372 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
069cb38f00
commit
c4869732ec
|
@ -1084,7 +1084,6 @@ Returns:
|
|||
if (FvFoundInHobFv2 (FvHandle, &NameGuid)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
// Found a firmware volume image. Produce a firmware volume block
|
||||
// protocol for it so it gets dispatched from. This is usually a
|
||||
|
|
|
@ -82,6 +82,7 @@ Revision History
|
|||
#include <Library/CacheMaintenanceLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/PeCoffLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
|
||||
#include "DebugImageInfo.h"
|
||||
#include "Library.h"
|
||||
|
|
|
@ -87,6 +87,7 @@
|
|||
DxeCoreEntryPoint
|
||||
PeCoffLib
|
||||
ExtractGuidedSectionLib
|
||||
MemoryAllocationLib
|
||||
|
||||
[Guids]
|
||||
gEfiEventLegacyBootGuid # ALWAYS_CONSUMED
|
||||
|
|
|
@ -412,11 +412,14 @@ Returns:
|
|||
UINTN Instance;
|
||||
UINT8 *CopyBuffer;
|
||||
UINTN SectionSize;
|
||||
EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
|
||||
UINT32 FvAlignment;
|
||||
|
||||
|
||||
OldTpl = CoreRaiseTpl (TPL_NOTIFY);
|
||||
Instance = SectionInstance + 1;
|
||||
|
||||
FvHeader = NULL;
|
||||
FvAlignment = 0;
|
||||
//
|
||||
// Locate target stream
|
||||
//
|
||||
|
@ -469,8 +472,19 @@ Returns:
|
|||
} else {
|
||||
//
|
||||
// Callee allocated buffer. Allocate buffer and return size.
|
||||
// For FvImage, the buffer is allocated at its required alignment.
|
||||
//
|
||||
*Buffer = CoreAllocateBootServicesPool (CopySize);
|
||||
if (*SectionType == EFI_SECTION_FIRMWARE_VOLUME_IMAGE) {
|
||||
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) CopyBuffer;
|
||||
FvAlignment = 1 << ((FvHeader->Attributes & EFI_FVB2_ALIGNMENT) >> 16);
|
||||
//
|
||||
// FvAlignment must be more than 8 bytes required by FvHeader structure.
|
||||
//
|
||||
if (FvAlignment < 8) {
|
||||
FvAlignment = 8;
|
||||
}
|
||||
}
|
||||
*Buffer = AllocateAlignedPool ((UINTN) CopySize, (UINTN) FvAlignment);
|
||||
if (*Buffer == NULL) {
|
||||
Status = EFI_OUT_OF_RESOURCES;
|
||||
goto GetSection_Done;
|
||||
|
|
Loading…
Reference in New Issue