From 1b093825a3b9d8929b085aa67c4d7633d826e822 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 c18c8b144c..01a70d2f70 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;