From patchwork Thu Sep 6 13:45:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 146091 Delivered-To: patch@linaro.org Received: by 2002:a2e:1648:0:0:0:0:0 with SMTP id 8-v6csp534349ljw; Thu, 6 Sep 2018 06:45:47 -0700 (PDT) X-Google-Smtp-Source: ANB0VdYUSiBCH7FiYfwLf1d0a8z7fji2PbR0+pDk7OQQ5SXY9QxBTsWB+aqJf0VHMefSU91DqDDj X-Received: by 2002:a62:1314:: with SMTP id b20-v6mr2933448pfj.230.1536241547830; Thu, 06 Sep 2018 06:45:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536241547; cv=none; d=google.com; s=arc-20160816; b=rkGOPjJBl/5cPjp+4OHS/EX/i75BaYx4ZkLSfjuiuuF/4HiyxiEJANDs/225JPWmHg LSCdp7ob/X5eslEIgYj3RDiNSfgvXJbnbBhIUAfdw+qyxLE4tAgrfWqeux3dawWAUpJU PElj3ikiT0aG8VW5KW9WvowpeJiNHaseH6Mg3KRCjXSJuUx5766SRgXac+/g7NH2fyzy b4wFIPn2JSq3UPL59KXrRJx6FudQh2uChZwJXtEvsJN+BKeuXDhDySySbyCFVKx3Z6hH 6hm4m2IPtBKmzWUyzFf/LWKnjjO8D3g8fzad1ugv6dhk/4QUmXWaLFRpLDAWoUiTnyNi JFNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to; bh=cmQsrXiPv1eKjdluMZAg2Xd5AdW3m0TANw0WqdRcjDg=; b=YyhsGrVWZiqfp4Lj69t5mIn4tzmTVC5bZ/vhyjyeA3DCoBhSlCSUkiOQp2zC9L+l3q TFxHdMYmzIC3NYCtLi8hTMziXCv//Ku575E7COElfqMUEKHA1FF2Cxxc5MUzWqWz1MRu Av/CiAqY0aC7U8oGFLqYkUdlhozPvTO5gHk1YLz1LNJMoPKvJxOV/aZnYddzC4tf2KGF aWaCMupyDO0lPrd5x7TXPLmN/x5Yf9sqhMaKERIFJGihxPN9fIuK2/rJQnXOSDnIlbR9 GV8zuR+bDWcR9zm7LbxpKDBi4f2A6AsL4HK2GDDEOOd4V0DVGZT6egKk0R29YNE12HPy nJ+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=iZU624Vf; spf=pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from ml01.01.org (ml01.01.org. [2001:19d0:306:5::1]) by mx.google.com with ESMTPS id b7-v6si5038436plm.250.2018.09.06.06.45.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Sep 2018 06:45:47 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) client-ip=2001:19d0:306:5::1; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=iZU624Vf; spf=pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id D3B202112294F; Thu, 6 Sep 2018 06:45:45 -0700 (PDT) X-Original-To: edk2-devel@lists.01.org Delivered-To: edk2-devel@lists.01.org Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2a00:1450:4864:20::542; helo=mail-ed1-x542.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 8F9CE21122948 for ; Thu, 6 Sep 2018 06:45:43 -0700 (PDT) Received: by mail-ed1-x542.google.com with SMTP id a20-v6so8936891edd.4 for ; Thu, 06 Sep 2018 06:45:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=V1KGLUw0c7CE6L8x2k064030AHrw2hpPK7wcv+1NhFY=; b=iZU624VfVF6b9UJeBLMGG+5CgedrllQCiYAhFX45EtZe3Om7dGeRGVStDuA3ZyI9qc nNO2fjFMBZ/+xorJCWGVz4mGz/9hEQV0cdUZdbYOCriMqVrvG+Nf0cp7afHwd7ybb+P4 eI0ilOfzmetmUvsud3/dYzIqBTyzPgQ5/JPQg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=V1KGLUw0c7CE6L8x2k064030AHrw2hpPK7wcv+1NhFY=; b=T4wReUmnOyUQMHQGLvRHaqAAUww55fntKF0fZEtqiX6HrrotybGQS9saUXKOfcJdM7 MdZ8R80NgkRSnQL1DshiVHwYpiYqiLDsGJ2kRWPSKfuOpDEu1GWaFwq5ztr0wnxcIo6O CaVnTjIdE6zxaKoI0iPHk6Y1JUz7WgkTboL4/OYKlr/YQ7uZR4vM1SrHVVg9HDQFrbN4 wSGLzSgfH9lxFcQRKGHf50m0QNA00gFeu1yhErItmIU7Km1tWxBTiU+SMhVRe7R2cKqF HRUWQQ6AzYhkZCnL0Y017l5Mfj2aMUT6+mPYlqrbyQOVeWC0q25PMF+flcC+5IpLsKbs ReqA== X-Gm-Message-State: APzg51Ax0dG4I3Cv+T4bWR61EaIQogmViv7QihgR2HyhJtgH5Ba1khj8 V/niQPRj0mof74MJcZMrs5yyd/T3tUmKDnoh X-Received: by 2002:a50:98c1:: with SMTP id j59-v6mr3785417edb.212.1536241541742; Thu, 06 Sep 2018 06:45:41 -0700 (PDT) Received: from rev02.home ([2a02:a212:9283:9800:24b9:e2d6:9acc:50dd]) by smtp.gmail.com with ESMTPSA id l48-v6sm2818764eda.94.2018.09.06.06.45.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Sep 2018 06:45:40 -0700 (PDT) From: Ard Biesheuvel To: edk2-devel@lists.01.org Date: Thu, 6 Sep 2018 15:45:21 +0200 Message-Id: <20180906134523.2036-3-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180906134523.2036-1-ard.biesheuvel@linaro.org> References: <20180906134523.2036-1-ard.biesheuvel@linaro.org> Subject: [edk2] [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: , Cc: Liming Gao , Jiewen Yao , Star Zeng , Michael D Kinney , Laszlo Ersek , Chao Zhang MIME-Version: 1.0 Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" 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(-) -- 2.18.0 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel Reviewed-by: Laszlo Ersek Reviewed-by: Star Zeng Signed-off-by: Ard Biesheuvel Reviewed-by: Liming Gao 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 //