From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=66.187.233.73; helo=mx1.redhat.com; envelope-from=lersek@redhat.com; receiver=edk2-devel@lists.01.org Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 2EB862194D387 for ; Thu, 6 Sep 2018 09:29:30 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 50E908575F; Thu, 6 Sep 2018 16:29:29 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-120-62.rdu2.redhat.com [10.10.120.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id F18FD112D16F; Thu, 6 Sep 2018 16:29:27 +0000 (UTC) To: Ard Biesheuvel , edk2-devel@lists.01.org Cc: Liming Gao , Jiewen Yao , Star Zeng , Michael D Kinney , Chao Zhang References: <20180906134523.2036-1-ard.biesheuvel@linaro.org> <20180906134523.2036-2-ard.biesheuvel@linaro.org> From: Laszlo Ersek Message-ID: Date: Thu, 6 Sep 2018 18:29:22 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20180906134523.2036-2-ard.biesheuvel@linaro.org> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Thu, 06 Sep 2018 16:29:29 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Thu, 06 Sep 2018 16:29:29 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'lersek@redhat.com' RCPT:'' Subject: Re: [PATCH 1/4] MdeModulePkg: remove PE/COFF header workaround for ELILO on IPF X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Sep 2018 16:29:30 -0000 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit On 09/06/18 15:45, Ard Biesheuvel wrote: > Now that Itanium support has been dropped, we can remove the various > occurrences of the ELILO on Itanium PE/COFF header workaround. > > Link: https://bugzilla.tianocore.org/show_bug.cgi?id=816 > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ard Biesheuvel > --- > MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c | 31 +------------------- > MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c | 17 +---------- > MdeModulePkg/Core/Dxe/Misc/PropertiesTable.c | 17 +---------- > MdeModulePkg/Core/PiSmmCore/MemoryAttributesTable.c | 17 +---------- > MdeModulePkg/Core/PiSmmCore/SmramProfileRecord.c | 31 +------------------- > 5 files changed, 5 insertions(+), 108 deletions(-) > > diff --git a/MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c b/MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c > index 83ed43a16e95..ff1940431c2f 100644 > --- a/MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c > +++ b/MdeModulePkg/Core/Dxe/Mem/MemoryProfileRecord.c > @@ -254,35 +254,6 @@ GetMemoryProfileContext ( > return mMemoryProfileContextPtr; > } > > -/** > - Retrieves the magic value from the PE/COFF header. > - > - @param Hdr The buffer in which to return the PE32, PE32+, or TE header. > - > - @return EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC - Image is PE32 > - @return EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC - Image is PE32+ > - > -**/ > -UINT16 > -InternalPeCoffGetPeHeaderMagicValue ( > - IN EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr > - ) > -{ > - // > - // NOTE: Some versions of Linux ELILO for Itanium have an incorrect magic value > - // in the PE/COFF Header. If the MachineType is Itanium(IA64) and the > - // Magic value in the OptionalHeader is EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC > - // then override the returned value to EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC > - // > - if (Hdr.Pe32->FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 && Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > - return EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC; > - } > - // > - // Return the magic value from the PC/COFF Optional Header > - // > - return Hdr.Pe32->OptionalHeader.Magic; > -} > - > /** > Retrieves and returns the Subsystem of a PE/COFF image that has been loaded into system memory. > If Pe32Data is NULL, then ASSERT(). > @@ -319,7 +290,7 @@ InternalPeCoffGetSubsystem ( > if (Hdr.Te->Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) { > return Hdr.Te->Subsystem; > } else if (Hdr.Pe32->Signature == EFI_IMAGE_NT_SIGNATURE) { > - Magic = InternalPeCoffGetPeHeaderMagicValue (Hdr); > + Magic = Hdr.Pe32->OptionalHeader.Magic; > if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > return Hdr.Pe32->OptionalHeader.Subsystem; > } else if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) { > diff --git a/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c b/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c > index 4cd219c88efc..fa8f8fe91ac7 100644 > --- a/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c > +++ b/MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c > @@ -406,7 +406,6 @@ ProtectUefiImage ( > IMAGE_PROPERTIES_RECORD *ImageRecord; > CHAR8 *PdbPointer; > IMAGE_PROPERTIES_RECORD_CODE_SECTION *ImageRecordCodeSection; > - UINT16 Magic; > BOOLEAN IsAligned; > UINT32 ProtectionPolicy; > > @@ -466,21 +465,7 @@ ProtectUefiImage ( > // > // Get SectionAlignment > // > - if (Hdr.Pe32->FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 && Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > - // > - // NOTE: Some versions of Linux ELILO for Itanium have an incorrect magic value > - // in the PE/COFF Header. If the MachineType is Itanium(IA64) and the > - // Magic value in the OptionalHeader is EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC > - // then override the magic value to EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC > - // > - Magic = EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC; > - } else { > - // > - // Get the magic value from the PE/COFF Optional Header > - // > - Magic = Hdr.Pe32->OptionalHeader.Magic; > - } > - if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > + if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > SectionAlignment = Hdr.Pe32->OptionalHeader.SectionAlignment; > } else { > SectionAlignment = Hdr.Pe32Plus->OptionalHeader.SectionAlignment; > diff --git a/MdeModulePkg/Core/Dxe/Misc/PropertiesTable.c b/MdeModulePkg/Core/Dxe/Misc/PropertiesTable.c > index a96d442fbc64..05eb4f422b2f 100644 > --- a/MdeModulePkg/Core/Dxe/Misc/PropertiesTable.c > +++ b/MdeModulePkg/Core/Dxe/Misc/PropertiesTable.c > @@ -1076,7 +1076,6 @@ InsertImageRecord ( > IMAGE_PROPERTIES_RECORD *ImageRecord; > CHAR8 *PdbPointer; > IMAGE_PROPERTIES_RECORD_CODE_SECTION *ImageRecordCodeSection; > - UINT16 Magic; > > DEBUG ((EFI_D_VERBOSE, "InsertImageRecord - 0x%x\n", RuntimeImage)); > DEBUG ((EFI_D_VERBOSE, "InsertImageRecord - 0x%016lx - 0x%016lx\n", (EFI_PHYSICAL_ADDRESS)(UINTN)RuntimeImage->ImageBase, RuntimeImage->ImageSize)); > @@ -1126,21 +1125,7 @@ InsertImageRecord ( > // > // Get SectionAlignment > // > - if (Hdr.Pe32->FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 && Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > - // > - // NOTE: Some versions of Linux ELILO for Itanium have an incorrect magic value > - // in the PE/COFF Header. If the MachineType is Itanium(IA64) and the > - // Magic value in the OptionalHeader is EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC > - // then override the magic value to EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC > - // > - Magic = EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC; > - } else { > - // > - // Get the magic value from the PE/COFF Optional Header > - // > - Magic = Hdr.Pe32->OptionalHeader.Magic; > - } > - if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > + if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > SectionAlignment = Hdr.Pe32->OptionalHeader.SectionAlignment; > } else { > SectionAlignment = Hdr.Pe32Plus->OptionalHeader.SectionAlignment; > diff --git a/MdeModulePkg/Core/PiSmmCore/MemoryAttributesTable.c b/MdeModulePkg/Core/PiSmmCore/MemoryAttributesTable.c > index 1682d0f9e404..157beb1e67ff 100644 > --- a/MdeModulePkg/Core/PiSmmCore/MemoryAttributesTable.c > +++ b/MdeModulePkg/Core/PiSmmCore/MemoryAttributesTable.c > @@ -1032,7 +1032,6 @@ SmmInsertImageRecord ( > IMAGE_PROPERTIES_RECORD *ImageRecord; > CHAR8 *PdbPointer; > IMAGE_PROPERTIES_RECORD_CODE_SECTION *ImageRecordCodeSection; > - UINT16 Magic; > > DEBUG ((DEBUG_VERBOSE, "SMM InsertImageRecord - 0x%x\n", DriverEntry)); > DEBUG ((DEBUG_VERBOSE, "SMM InsertImageRecord - 0x%016lx - 0x%08x\n", DriverEntry->ImageBuffer, DriverEntry->NumberOfPage)); > @@ -1076,21 +1075,7 @@ SmmInsertImageRecord ( > // > // Get SectionAlignment > // > - if (Hdr.Pe32->FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 && Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > - // > - // NOTE: Some versions of Linux ELILO for Itanium have an incorrect magic value > - // in the PE/COFF Header. If the MachineType is Itanium(IA64) and the > - // Magic value in the OptionalHeader is EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC > - // then override the magic value to EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC > - // > - Magic = EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC; > - } else { > - // > - // Get the magic value from the PE/COFF Optional Header > - // > - Magic = Hdr.Pe32->OptionalHeader.Magic; > - } > - if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > + if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > SectionAlignment = Hdr.Pe32->OptionalHeader.SectionAlignment; > } else { > SectionAlignment = Hdr.Pe32Plus->OptionalHeader.SectionAlignment; > diff --git a/MdeModulePkg/Core/PiSmmCore/SmramProfileRecord.c b/MdeModulePkg/Core/PiSmmCore/SmramProfileRecord.c > index b586afa7948e..e8d60c2d2357 100644 > --- a/MdeModulePkg/Core/PiSmmCore/SmramProfileRecord.c > +++ b/MdeModulePkg/Core/PiSmmCore/SmramProfileRecord.c > @@ -255,35 +255,6 @@ GetSmramProfileContext ( > return mSmramProfileContextPtr; > } > > -/** > - Retrieves the magic value from the PE/COFF header. > - > - @param Hdr The buffer in which to return the PE32, PE32+, or TE header. > - > - @return EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC - Image is PE32 > - @return EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC - Image is PE32+ > - > -**/ > -UINT16 > -InternalPeCoffGetPeHeaderMagicValue ( > - IN EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr > - ) > -{ > - // > - // NOTE: Some versions of Linux ELILO for Itanium have an incorrect magic value > - // in the PE/COFF Header. If the MachineType is Itanium(IA64) and the > - // Magic value in the OptionalHeader is EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC > - // then override the returned value to EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC > - // > - if (Hdr.Pe32->FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 && Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > - return EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC; > - } > - // > - // Return the magic value from the PC/COFF Optional Header > - // > - return Hdr.Pe32->OptionalHeader.Magic; > -} > - > /** > Retrieves and returns the Subsystem of a PE/COFF image that has been loaded into system memory. > If Pe32Data is NULL, then ASSERT(). > @@ -320,7 +291,7 @@ InternalPeCoffGetSubsystem ( > if (Hdr.Te->Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) { > return Hdr.Te->Subsystem; > } else if (Hdr.Pe32->Signature == EFI_IMAGE_NT_SIGNATURE) { > - Magic = InternalPeCoffGetPeHeaderMagicValue (Hdr); > + Magic = Hdr.Pe32->OptionalHeader.Magic; > if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > return Hdr.Pe32->OptionalHeader.Subsystem; > } else if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) { > Reviewed-by: Laszlo Ersek