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)) {
|
if (FvFoundInHobFv2 (FvHandle, &NameGuid)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Found a firmware volume image. Produce a firmware volume block
|
// Found a firmware volume image. Produce a firmware volume block
|
||||||
// protocol for it so it gets dispatched from. This is usually a
|
// protocol for it so it gets dispatched from. This is usually a
|
||||||
|
|
|
@ -82,6 +82,7 @@ Revision History
|
||||||
#include <Library/CacheMaintenanceLib.h>
|
#include <Library/CacheMaintenanceLib.h>
|
||||||
#include <Library/BaseMemoryLib.h>
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/PeCoffLib.h>
|
#include <Library/PeCoffLib.h>
|
||||||
|
#include <Library/MemoryAllocationLib.h>
|
||||||
|
|
||||||
#include "DebugImageInfo.h"
|
#include "DebugImageInfo.h"
|
||||||
#include "Library.h"
|
#include "Library.h"
|
||||||
|
|
|
@ -87,6 +87,7 @@
|
||||||
DxeCoreEntryPoint
|
DxeCoreEntryPoint
|
||||||
PeCoffLib
|
PeCoffLib
|
||||||
ExtractGuidedSectionLib
|
ExtractGuidedSectionLib
|
||||||
|
MemoryAllocationLib
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiEventLegacyBootGuid # ALWAYS_CONSUMED
|
gEfiEventLegacyBootGuid # ALWAYS_CONSUMED
|
||||||
|
|
|
@ -412,11 +412,14 @@ Returns:
|
||||||
UINTN Instance;
|
UINTN Instance;
|
||||||
UINT8 *CopyBuffer;
|
UINT8 *CopyBuffer;
|
||||||
UINTN SectionSize;
|
UINTN SectionSize;
|
||||||
|
EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
|
||||||
|
UINT32 FvAlignment;
|
||||||
|
|
||||||
|
|
||||||
OldTpl = CoreRaiseTpl (TPL_NOTIFY);
|
OldTpl = CoreRaiseTpl (TPL_NOTIFY);
|
||||||
Instance = SectionInstance + 1;
|
Instance = SectionInstance + 1;
|
||||||
|
FvHeader = NULL;
|
||||||
|
FvAlignment = 0;
|
||||||
//
|
//
|
||||||
// Locate target stream
|
// Locate target stream
|
||||||
//
|
//
|
||||||
|
@ -469,8 +472,19 @@ Returns:
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
// Callee allocated buffer. Allocate buffer and return size.
|
// 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) {
|
if (*Buffer == NULL) {
|
||||||
Status = EFI_OUT_OF_RESOURCES;
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
goto GetSection_Done;
|
goto GetSection_Done;
|
||||||
|
|
Loading…
Reference in New Issue