From 4d3a62c2e7154ff30cd59c569b2a835e8b22537d Mon Sep 17 00:00:00 2001 From: Mikhail Krichanov Date: Fri, 3 Nov 2023 15:48:52 +0300 Subject: [PATCH] BaseTools: Fixed '-D EDK2_REDUCE_FW_SIZE' build option. --- BaseTools/ImageTool/PeEmit.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/BaseTools/ImageTool/PeEmit.c b/BaseTools/ImageTool/PeEmit.c index fb0ea39a52..ba8dce05a8 100644 --- a/BaseTools/ImageTool/PeEmit.c +++ b/BaseTools/ImageTool/PeEmit.c @@ -588,6 +588,12 @@ ToolImageEmitPeFile ( SizeOfPeHeaders = SectionHeadersOffset + SectionHeadersSize; SizeOfHeaders = sizeof (mDosHdr) + SizeOfPeHeaders; AlignedSizeOfHeaders = ALIGN_VALUE (SizeOfHeaders, FileAlignment); + // + // Necessary adjustment for '-D EDK2_REDUCE_FW_SIZE' build option. + // + if (AlignedSizeOfHeaders < Image->SegmentInfo.Segments[0].ImageAddress) { + AlignedSizeOfHeaders = (uint32_t)Image->SegmentInfo.Segments[0].ImageAddress; + } PeOffset = ImageToolBufferAppendReserve ( Buffer, @@ -623,7 +629,7 @@ ToolImageEmitPeFile ( PeHdr->ImageBase = (EFI_IMAGE_NT_BASE_ADDRESS)Image->HeaderInfo.BaseAddress; PeHdr->SectionAlignment = Image->SegmentInfo.SegmentAlignment; PeHdr->FileAlignment = FileAlignment; - PeHdr->SizeOfImage = ALIGN_VALUE (SizeOfHeaders, PeHdr->SectionAlignment); + PeHdr->SizeOfImage = AlignedSizeOfHeaders; PeHdr->SizeOfHeaders = AlignedSizeOfHeaders; PeHdr->Subsystem = Image->HeaderInfo.Subsystem; PeHdr->NumberOfRvaAndSizes = EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES;