From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (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 B836721D490F5 for ; Thu, 10 Aug 2017 21:46:10 -0700 (PDT) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP; 10 Aug 2017 21:48:30 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.41,356,1498546800"; d="scan'208,217";a="888868653" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by FMSMGA003.fm.intel.com with ESMTP; 10 Aug 2017 21:48:30 -0700 Received: from fmsmsx122.amr.corp.intel.com (10.18.125.37) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 10 Aug 2017 21:48:30 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by fmsmsx122.amr.corp.intel.com (10.18.125.37) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 10 Aug 2017 21:48:29 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.183]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.135]) with mapi id 14.03.0319.002; Fri, 11 Aug 2017 12:48:27 +0800 From: "Gao, Liming" To: "afish@apple.com" CC: "Zhu, Yonghong" , "Kinney, Michael D" , "edk2-devel@lists.01.org" , "Gao, Liming" Thread-Topic: [edk2] [Patch] BaseTools: Fix Segmentation fault: 11 when build AppPkg with XCODE5 Thread-Index: AQHTDzG9nrjWB46WkkigpNBVS7AKAqJ4j1OAgATSxLD//+1hAIABSr0Q Date: Fri, 11 Aug 2017 04:48:26 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14D76E5FF@shsmsx102.ccr.corp.intel.com> References: <1502078429-13340-1-git-send-email-yonghong.zhu@intel.com> <5BC1C303-CE42-4DAD-91EB-F4BB327DE88A@apple.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14D76DAD8@shsmsx102.ccr.corp.intel.com> <2AC68977-AB40-45DC-B97D-27FFCE19C155@apple.com> In-Reply-To: <2AC68977-AB40-45DC-B97D-27FFCE19C155@apple.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.22 Subject: Re: [Patch] BaseTools: Fix Segmentation fault: 11 when build AppPkg with XCODE5 X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Aug 2017 04:46:10 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Andrew: Edk2 Build system calls GenFw to generate EFI image in build phase. Even = if this image is not built into BIOS image, its EFI image will be generated= by GenFw. So, only if this EFI image is built from EDK2 project, it can be= updated by GenFw tool. You can see this step in build_rule.txt to convert = .dll to .efi image. Thanks Liming From: afish@apple.com [mailto:afish@apple.com] Sent: Friday, August 11, 2017 12:59 AM To: Gao, Liming Cc: Zhu, Yonghong ; Kinney, Michael D ; edk2-devel@lists.01.org Subject: Re: [edk2] [Patch] BaseTools: Fix Segmentation fault: 11 when buil= d AppPkg with XCODE5 On Aug 10, 2017, at 3:38 AM, Gao, Liming > wrote: Andrew: If this is a mtoc bug, I suggest to update GenFw to always correct it in t= he generated EFI image. If so, the EFI image is always correct. There is no= change requirement in PeCoff library in MdePkg. Liming, EFI supports loading PE/COFF images that are not built at the same time as = the platform firmware (UEFI Shell, OS loader), and that is why I added the = fix to the PE/COFF library code. Thanks, Andrew Fish Thanks Liming From: afish@apple.com [mailto:afish@apple.com] Sent: Tuesday, August 8, 2017 12:26 AM To: Zhu, Yonghong > Cc: edk2-devel@lists.01.org; Gao, Liming >; Kinney, Michael D > Subject: Re: [Patch] BaseTools: Fix Segmentation fault: 11 when build AppPk= g with XCODE5 Should that be: Contributed-under: TianoCore Contribution Agreement 1.1 I also noticed the PeCoff lib is going to loop and reload the .debug suctio= n due to this mtoc bug, so it would be good to harden that code too. git diff MdePkg/Library/BasePeCoffLib/BasePeCoff.c diff --git a/MdePkg/Library/BasePeCoffLib/BasePeCoff.c b/MdePkg/Library/Bas= ePeCoffLib/BasePeCoff.c index 8d1daba..1e4c67e 100644 --- a/MdePkg/Library/BasePeCoffLib/BasePeCoff.c +++ b/MdePkg/Library/BasePeCoffLib/BasePeCoff.c @@ -771,6 +771,8 @@ PeCoffLoaderGetImageInfo ( } return RETURN_SUCCESS; + } else if (DebugEntry.Type =3D=3D CODEVIEW_SIGNATURE_MTOC) { + return RETURN_SUCCESS; } } } @@ -862,6 +864,8 @@ PeCoffLoaderGetImageInfo ( if (DebugEntry.Type =3D=3D EFI_IMAGE_DEBUG_TYPE_CODEVIEW) { ImageContext->DebugDirectoryEntryRva =3D (UINT32) (DebugDirectory= EntryRva + Index); return RETURN_SUCCESS; + } else if (DebugEntry.Type =3D=3D CODEVIEW_SIGNATURE_MTOC) { + return RETURN_SUCCESS; } } } https://bugzilla.tianocore.org/show_bug.cgi?id=3D663 Contributed-under: TianoCore Contribution Agreement 1.1 Thanks, Andrew Fish On Aug 6, 2017, at 9:00 PM, Yonghong Zhu > wrote: it is a bug in mtoc setting the size of the debug directory entry to the size of the .debug section, not the size of the EFI_IMAGE_DEBUG_DIRECTORY_ENTRY. It was causing a loop to iterate and get bogus EFI_IMAGE_DEBUG_DIRECTORY_ENTRY data and pass that to memset() and boom. Cc: Liming Gao > Cc: Michael D Kinney > Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Andrew Fish > --- BaseTools/Source/C/GenFw/GenFw.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/BaseTools/Source/C/GenFw/GenFw.c b/BaseTools/Source/C/GenFw/Ge= nFw.c index 246deb0..af60c92 100644 --- a/BaseTools/Source/C/GenFw/GenFw.c +++ b/BaseTools/Source/C/GenFw/GenFw.c @@ -2813,10 +2813,11 @@ Returns: // // Get Debug, Export and Resource EntryTable RVA address. // Resource Directory entry need to review. // Optional32Hdr =3D (EFI_IMAGE_OPTIONAL_HEADER32 *) ((UINT8*) FileHdr + size= of (EFI_IMAGE_FILE_HEADER)); + Optional64Hdr =3D (EFI_IMAGE_OPTIONAL_HEADER64 *) ((UINT8*) FileHdr + si= zeof (EFI_IMAGE_FILE_HEADER)); if (Optional32Hdr->Magic =3D=3D EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { SectionHeader =3D (EFI_IMAGE_SECTION_HEADER *) ((UINT8 *) Optional32Hdr = + FileHdr->SizeOfOptionalHeader); if (Optional32Hdr->NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_EXPOR= T && \ Optional32Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXPORT].Size = !=3D 0) { ExportDirectoryEntryRva =3D Optional32Hdr->DataDirectory[EFI_IMAGE_DIR= ECTORY_ENTRY_EXPORT].VirtualAddress; @@ -2833,11 +2834,10 @@ Returns: Optional32Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG].Size = =3D 0; Optional32Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG].Virtua= lAddress =3D 0; } } } else { - Optional64Hdr =3D (EFI_IMAGE_OPTIONAL_HEADER64 *) ((UINT8*) FileHdr + = sizeof (EFI_IMAGE_FILE_HEADER)); SectionHeader =3D (EFI_IMAGE_SECTION_HEADER *) ((UINT8 *) Optional64Hdr = + FileHdr->SizeOfOptionalHeader); if (Optional64Hdr->NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_EXPOR= T && \ Optional64Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXPORT].Size = !=3D 0) { ExportDirectoryEntryRva =3D Optional64Hdr->DataDirectory[EFI_IMAGE_DIR= ECTORY_ENTRY_EXPORT].VirtualAddress; } @@ -2907,10 +2907,20 @@ Returns: RsdsEntry->Unknown =3D 0; RsdsEntry->Unknown2 =3D 0; RsdsEntry->Unknown3 =3D 0; RsdsEntry->Unknown4 =3D 0; RsdsEntry->Unknown5 =3D 0; + } else if (RsdsEntry->Signature =3D=3D CODEVIEW_SIGNATURE_MTOC) { + // MTOC sets DebugDirectoryEntrySize to size of the .debug secti= on, so fix it. + if (!ZeroDebugFlag) { + if (Optional32Hdr->Magic =3D=3D EFI_IMAGE_NT_OPTIONAL_HDR32_MA= GIC) { + Optional32Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG= ].Size =3D sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY); + } else { + Optional64Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG= ].Size =3D sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY); + } + } + break; } } } } -- 2.6.1.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel