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 BC94921122E46 for ; Thu, 6 Sep 2018 09:31:05 -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 13A5B805A6D8; Thu, 6 Sep 2018 16:31:05 +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 B9D191013245; Thu, 6 Sep 2018 16:31:03 +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-3-ard.biesheuvel@linaro.org> From: Laszlo Ersek Message-ID: <3494cba6-535d-d805-b3bf-98fda743a59d@redhat.com> Date: Thu, 6 Sep 2018 18:31:03 +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-3-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.8]); Thu, 06 Sep 2018 16:31:05 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Thu, 06 Sep 2018 16:31:05 +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 2/4] MdePkg/BasePeCoffLib: 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:31:06 -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 > --- > MdePkg/Library/BasePeCoffLib/BasePeCoff.c | 61 +++----------------- > 1 file changed, 9 insertions(+), 52 deletions(-) > > diff --git a/MdePkg/Library/BasePeCoffLib/BasePeCoff.c b/MdePkg/Library/BasePeCoffLib/BasePeCoff.c > index 32eca0ad2ef4..c57816a80887 100644 > --- a/MdePkg/Library/BasePeCoffLib/BasePeCoff.c > +++ b/MdePkg/Library/BasePeCoffLib/BasePeCoff.c > @@ -46,36 +46,6 @@ PeCoffLoaderAdjustOffsetForTeImage ( > SectionHeader->PointerToRawData -= TeStrippedOffset; > } > > -/** > - 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 > -PeCoffLoaderGetPeHeaderMagicValue ( > - 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 the PE or TE Header from a PE/COFF or TE image. > > @@ -101,7 +71,6 @@ PeCoffLoaderGetPeHeader ( > EFI_IMAGE_DOS_HEADER DosHdr; > UINTN Size; > UINTN ReadSize; > - UINT16 Magic; > UINT32 SectionHeaderOffset; > UINT32 Index; > UINT32 HeaderWithoutDataDir; > @@ -222,9 +191,7 @@ PeCoffLoaderGetPeHeader ( > ImageContext->IsTeImage = FALSE; > ImageContext->Machine = Hdr.Pe32->FileHeader.Machine; > > - Magic = PeCoffLoaderGetPeHeaderMagicValue (Hdr); > - > - if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > + if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > // > // 1. Check OptionalHeader.NumberOfRvaAndSizes filed. > // > @@ -339,7 +306,7 @@ PeCoffLoaderGetPeHeader ( > ImageContext->SectionAlignment = Hdr.Pe32->OptionalHeader.SectionAlignment; > ImageContext->SizeOfHeaders = Hdr.Pe32->OptionalHeader.SizeOfHeaders; > > - } else if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) { > + } else if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) { > // > // 1. Check FileHeader.NumberOfRvaAndSizes filed. > // > @@ -605,7 +572,6 @@ PeCoffLoaderGetImageInfo ( > EFI_IMAGE_SECTION_HEADER SectionHeader; > EFI_IMAGE_DEBUG_DIRECTORY_ENTRY DebugEntry; > UINT32 NumberOfRvaAndSizes; > - UINT16 Magic; > UINT32 TeStrippedOffset; > > if (ImageContext == NULL) { > @@ -622,14 +588,12 @@ PeCoffLoaderGetImageInfo ( > return Status; > } > > - Magic = PeCoffLoaderGetPeHeaderMagicValue (Hdr); > - > // > // Retrieve the base address of the image > // > if (!(ImageContext->IsTeImage)) { > TeStrippedOffset = 0; > - if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > + if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > // > // Use PE32 offset > // > @@ -678,7 +642,7 @@ PeCoffLoaderGetImageInfo ( > } > > if (!(ImageContext->IsTeImage)) { > - if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > + if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > // > // Use PE32 offset > // > @@ -952,7 +916,6 @@ PeCoffLoaderRelocateImage ( > CHAR8 *FixupData; > PHYSICAL_ADDRESS BaseAddress; > UINT32 NumberOfRvaAndSizes; > - UINT16 Magic; > UINT32 TeStrippedOffset; > > ASSERT (ImageContext != NULL); > @@ -985,9 +948,8 @@ PeCoffLoaderRelocateImage ( > if (!(ImageContext->IsTeImage)) { > Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)ImageContext->ImageAddress + ImageContext->PeCoffHeaderOffset); > TeStrippedOffset = 0; > - Magic = PeCoffLoaderGetPeHeaderMagicValue (Hdr); > > - if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > + if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > // > // Use PE32 offset > // > @@ -1230,7 +1192,6 @@ PeCoffLoaderLoadImage ( > UINTN Size; > UINT32 TempDebugEntryRva; > UINT32 NumberOfRvaAndSizes; > - UINT16 Magic; > EFI_IMAGE_RESOURCE_DIRECTORY *ResourceDirectory; > EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY *ResourceDirectoryEntry; > EFI_IMAGE_RESOURCE_DIRECTORY_STRING *ResourceDirectoryString; > @@ -1404,12 +1365,11 @@ PeCoffLoaderLoadImage ( > // > // Get image's entry point > // > - Magic = PeCoffLoaderGetPeHeaderMagicValue (Hdr); > if (!(ImageContext->IsTeImage)) { > // > // Sizes of AddressOfEntryPoint are different so we need to do this safely > // > - if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > + if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > // > // Use PE32 offset > // > @@ -1444,7 +1404,7 @@ PeCoffLoaderLoadImage ( > // the optional header to verify a desired directory entry is there. > // > if (!(ImageContext->IsTeImage)) { > - if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > + if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > // > // Use PE32 offset > // > @@ -1565,7 +1525,7 @@ PeCoffLoaderLoadImage ( > // > ImageContext->HiiResourceData = 0; > if (!(ImageContext->IsTeImage)) { > - if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > + if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > // > // Use PE32 offset > // > @@ -1721,7 +1681,6 @@ PeCoffLoaderRelocateImageForRuntime ( > CHAR8 *FixupData; > UINTN Adjust; > RETURN_STATUS Status; > - UINT16 Magic; > > OldBase = (CHAR8 *)((UINTN)ImageBase); > NewBase = (CHAR8 *)((UINTN)VirtImageBase); > @@ -1750,9 +1709,7 @@ PeCoffLoaderRelocateImageForRuntime ( > return ; > } > > - Magic = PeCoffLoaderGetPeHeaderMagicValue (Hdr); > - > - if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > + if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { > // > // Use PE32 offset > // > Reviewed-by: Laszlo Ersek