From nobody Sun Apr 28 02:05:10 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+41263+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+41263+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1558582234; cv=none; d=zoho.com; s=zohoarc; b=cEABvEmNt7gPG4K1paLxDRa2c6gRKcY/rQmzhKKMzfjLM0vh34mHwVTihdfgh/5FwzGWZ9B2OPnxs4m3VdTLA22C8nm1shuWoCLlrHkSbuyOFl3pAWEDruoB09CwE8zTWgFzpU+YwUEZjuBOnWdJyMLL8Gd1ONo9r3GxVK9hw7Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558582234; h=Content-Type:Cc:Date:From:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Sender:Subject:To:ARC-Authentication-Results; bh=yizSJYzyWXWYjOKJJIsnYrnF5J0NLQmmnMJ6WjA2zT0=; b=Zf/K7kUlVWiNJ7AQWbsSK4syOvxvET02GOYFtENCByr+KhUmjXnkHNG83lqT2HLeH6xWxFQEwKq+EHKQ2+R9+e2jN8zTZeQKx4u7/DaKlwpDYQ9swtUakMd5cIAyHfmp+Q8PxFe1xTYpCltXyt/MrcaSZEOghxCUlg0Q+XAo3Jo= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+41263+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1558582234708319.6547870741264; Wed, 22 May 2019 20:30:34 -0700 (PDT) Return-Path: X-Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by groups.io with SMTP; Wed, 22 May 2019 20:30:33 -0700 X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False X-Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 May 2019 20:30:33 -0700 X-ExtLoop1: 1 X-Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga001.fm.intel.com with ESMTP; 22 May 2019 20:30:33 -0700 X-Received: from fmsmsx158.amr.corp.intel.com (10.18.116.75) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 22 May 2019 20:30:32 -0700 X-Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx158.amr.corp.intel.com (10.18.116.75) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 22 May 2019 20:30:33 -0700 X-Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.129]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.216]) with mapi id 14.03.0415.000; Thu, 23 May 2019 11:30:30 +0800 From: "Fan, ZhijuX" To: "devel@edk2.groups.io" CC: "Gao, Liming" , "Feng, Bob C" Subject: [edk2-devel] [PATCH] BaseTools:Make BaseTools support the correct RAW FFS FILE generation Thread-Topic: [PATCH] BaseTools:Make BaseTools support the correct RAW FFS FILE generation Thread-Index: AdURF92FTi1gCeVzRpWQzY7Lig872w== Date: Thu, 23 May 2019 03:30:29 +0000 Message-ID: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,zhijux.fan@intel.com Content-Type: multipart/mixed; boundary="_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AF623ABSHSMSX101ccrcor_" Content-Language: en-US DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1558582234; bh=6tPq1bizLSjf65updojybn58rGgT2htMVAAsnZQ8ox4=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=RkIVT3Bt3yRhr281HhIuSL23aiAgiwHdn38Ub10siKblA9jr5G42QMkbG+D8QDJtgzC udAonPgb0e7hjqRMz0M+gael2+uXLgCqCs1W/1R/ni8iuT59xB+8YwRdCVaHD8ze4p3Er 5D3KS40eRCjgAVRABwTtO0WZiW7spomD64I= X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity @groups.io) --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AF623ABSHSMSX101ccrcor_ Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=3D1765 RAW FFS File has no section for its data. For RAW FFS File, directly call GenFfs tool to generate FFS file. Ffs Rule: [Rule.Common.USER_DEFINED.MicroCode] FILE RAW =3D $(NAMED_GUID) { SectionType FileType $(INF_OUTPUT)/$(MODULE_NAME).bin } As shown in the rule above,if SectionType and FileType not defined, FFS files are generated directly, and no other type of file is generated. Cc: Bob Feng Cc: Liming Gao Signed-off-by: Zhiju.Fan --- BaseTools/Source/Python/Common/DataType.py | 1 + BaseTools/Source/Python/GenFds/EfiSection.py | 10 ++++++++-- BaseTools/Source/Python/GenFds/FdfParser.py | 14 ++++++++++++-- BaseTools/Source/Python/GenFds/Section.py | 7 ++++++- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/BaseTools/Source/Python/Common/DataType.py b/BaseTools/Source/= Python/Common/DataType.py index 780711bf8e..1879aea665 100644 --- a/BaseTools/Source/Python/Common/DataType.py +++ b/BaseTools/Source/Python/Common/DataType.py @@ -121,6 +121,7 @@ BINARY_FILE_TYPE_VER =3D 'VER' BINARY_FILE_TYPE_UI =3D 'UI' BINARY_FILE_TYPE_BIN =3D 'BIN' BINARY_FILE_TYPE_FV =3D 'FV' +BINARY_FILE_TYPE_FFS =3D 'FFS' =20 PLATFORM_COMPONENT_TYPE_LIBRARY_CLASS =3D 'LIBRARY_CLASS' PLATFORM_COMPONENT_TYPE_MODULE =3D 'MODULE' diff --git a/BaseTools/Source/Python/GenFds/EfiSection.py b/BaseTools/Sourc= e/Python/GenFds/EfiSection.py index 302f244faf..5346a0569f 100644 --- a/BaseTools/Source/Python/GenFds/EfiSection.py +++ b/BaseTools/Source/Python/GenFds/EfiSection.py @@ -93,7 +93,7 @@ class EfiSection (EfiSectionClassObject): if '.depex' in SuffixMap: FileList.append(Filename) else: - FileList, IsSect =3D Section.Section.GetFileList(FfsInf, self.= FileType, self.FileExtension, Dict, IsMakefile=3DIsMakefile) + FileList, IsSect =3D Section.Section.GetFileList(FfsInf, self.= FileType, self.FileExtension, Dict, IsMakefile=3DIsMakefile, SectionType=3D= SectionType) if IsSect : return FileList, self.Alignment =20 @@ -227,14 +227,20 @@ class EfiSection (EfiSectionClassObject): else: EdkLogger.error("GenFds", GENFDS_ERROR, "Output file f= or %s section could not be found for %s" % (SectionType, InfFileName)) =20 + elif len(FileList) > 1 and SectionType =3D=3D BINARY_FILE_TYPE= _FFS: + EdkLogger.error("GenFds", GENFDS_ERROR,"Files suffixed wit= h %s are not allowed to have more than one file in %s[Binaries] section" % = (self.FileExtension, InfFileName)) + else: """Convert the File to Section file one by one """ for File in FileList: """ Copy Map file to FFS output path """ Index =3D Index + 1 Num =3D '%s.%d' %(SecNum, Index) - OutputFile =3D os.path.join( OutputPath, ModuleName + = SUP_MODULE_SEC + Num + SectionSuffix.get(SectionType)) File =3D GenFdsGlobalVariable.MacroExtend(File, Dict) + if SectionType =3D=3D BINARY_FILE_TYPE_FFS: + OutputFileList.append(File) + return OutputFileList, Align + OutputFile =3D os.path.join( OutputPath, ModuleName + = SUP_MODULE_SEC + Num + SectionSuffix.get(SectionType)) =20 #Get PE Section alignment when align is set to AUTO if self.Alignment =3D=3D 'Auto' and (SectionType =3D= =3D BINARY_FILE_TYPE_PE32 or SectionType =3D=3D BINARY_FILE_TYPE_TE): diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py b/BaseTools/Source= /Python/GenFds/FdfParser.py index ea1c3eeb30..8446e3be4c 100644 --- a/BaseTools/Source/Python/GenFds/FdfParser.py +++ b/BaseTools/Source/Python/GenFds/FdfParser.py @@ -3749,8 +3749,19 @@ class FdfParser: # def _GetEfiSection(self, Obj): OldPos =3D self.GetFileBufferPos() + EfiSectionObj =3D EfiSection() if not self._GetNextWord(): - return False + CurrentLine =3D self._CurrentLine()[self.CurrentOffsetWithinLi= ne:].split()[0].strip() + if self._Token =3D=3D '{' and TAB_SPLIT in CurrentLine: + if self._IsToken(TAB_VALUE_SPLIT): + EfiSectionObj.FileExtension =3D self._GetFileExtension= () + elif self._GetNextToken(): + EfiSectionObj.FileName =3D self._Token + EfiSectionObj.SectionType =3D BINARY_FILE_TYPE_FFS + Obj.SectionList.append(EfiSectionObj) + return True + else: + return False SectionName =3D self._Token =20 if SectionName not in { @@ -3816,7 +3827,6 @@ class FdfParser: Obj.SectionList.append(FvImageSectionObj) return True =20 - EfiSectionObj =3D EfiSection() EfiSectionObj.SectionType =3D SectionName =20 if not self._GetNextToken(): diff --git a/BaseTools/Source/Python/GenFds/Section.py b/BaseTools/Source/P= ython/GenFds/Section.py index c49a1ac84b..ae03828fef 100644 --- a/BaseTools/Source/Python/GenFds/Section.py +++ b/BaseTools/Source/Python/GenFds/Section.py @@ -106,7 +106,7 @@ class Section (SectionClassObject): # @param Dict dictionary contains macro and its value # @retval tuple (File list, boolean) # - def GetFileList(FfsInf, FileType, FileExtension, Dict =3D {}, IsMakefi= le=3DFalse): + def GetFileList(FfsInf, FileType, FileExtension, Dict =3D {}, IsMakefi= le=3DFalse, SectionType=3DNone): IsSect =3D FileType in Section.SectFileType =20 if FileExtension is not None: @@ -134,6 +134,11 @@ class Section (SectionClassObject): else: GenFdsGlobalVariable.InfLogger ("\nCurrent ARCH \'%s\'= of File %s is not in the Support Arch Scope of %s specified by INF %s in F= DF" %(FfsInf.CurrentArch, File.File, File.Arch, FfsInf.InfFileName)) =20 + elif FileType is None and SectionType =3D=3D BINARY_FILE_TYPE_FFS: + for File in FfsInf.BinFileList: + if File.Ext =3D=3D Suffix: + FileList.append(File.Path) + if (not IsMakefile and Suffix is not None and os.path.exists(FfsIn= f.EfiOutputPath)) or (IsMakefile and Suffix is not None): # # Get Makefile path and time stamp --=20 2.14.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#41263): https://edk2.groups.io/g/devel/message/41263 Mute This Topic: https://groups.io/mt/31727737/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AF623ABSHSMSX101ccrcor_ Content-Disposition: attachment; filename="winmail.dat" Content-Transfer-Encoding: base64 Content-Type: application/ms-tnef; name="winmail.dat" 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 e/J/Wj8JJlxonho4+1MPtn1U/HJ1P1+gLmL/Pq8V+Q9l/1kfWiYQr/34DGPUctbhSEDxLqo4MTaV sm7AuiFxcA8wXzFsX79gzEZ2SW3+YdCgYd8WDGQPfRfvVzj//zoPFghbv1zJaYlrHztPVR//Hi8f PyzPgmCHr4Ivgz8k7V5jL3Al4PrQJpBijJBh9GUwb0E4N3CNTyg/hW//hn8rj4s/jE+5lolgbvOR NK+7B7vHvI+9nSNW4UDn8P5ynyBW4PviVuaBANgD1DD35mDFkLjAYdbgNkBzwPrh98wzgYA2QHb6 EHaIlOe28fuYwdXwdUTA4KBW5J7DyxDtquNijkEl0G552zJG71N/MxKsz63RrlivT6tzbfF9/7B7 aDNWHJ4vnz+gT6Ffomj9sexO1lE037Tm7UCuVm2y/4/mD2KuVn1ftFhQnBTB1HLnqaKp9pDzMzRv gZGQsaH+Mcwgkg+TH72PZU+077dYv/l/+oLZ4dB0vDDoYFyz8KNAtAdwUkNIyYBc7WH/u3Hg4K8k xNKwJdbh3vIOsN8DYBvAuwGOwOggU8WQHIH3vAHE4vcAY4EQ15DF0ODBzV2ARrxz44FERschpNX/ Qwa+EqXk2OPCJcHlwRTZ7//JX8qmq5g2QKmizD8cv///f+JP41TBFNdB465mv68VLr/7EciyDrTN b/hOAw4uC6L72q9sGSiwUqIIx7QOw7Aa/8ezCmbq4AcxN8DBBXghC0j79yAbsijVv9bOtL8x/xHo /6QS5nHa9efzx8KzMAyBcvANfSBwicfFVjIuMTTJ4rAud4eRb3ftgOs2Gd41fX228OTAAAAAHwBC AAEAAAAYAAAARgBhAG4ALAAgAFoAaABpAGoAdQBYAAAAHwBlAAEAAAAqAAAAegBoAGkAagB1AHgA LgBmAGEAbgBAAGkAbgB0AGUAbAAuAGMAbwBtAAAAAAAfAGQAAQAAAAoAAABTAE0AVABQAAAAAAAC AUEAAQAAAGQAAAAAAAAAgSsfpL6jEBmdbgDdAQ9UAgAAAIBGAGEAbgAsACAAWgBoAGkAagB1AFgA AABTAE0AVABQAAAAegBoAGkAagB1AHgALgBmAGEAbgBAAGkAbgB0AGUAbAAuAGMAbwBtAAAAHwAC XQEAAAAqAAAAegBoAGkAagB1AHgALgBmAGEAbgBAAGkAbgB0AGUAbAAuAGMAbwBtAAAAAAAfAOVf AQAAADIAAABzAGkAcAA6AHoAaABpAGoAdQB4AC4AZgBhAG4AQABpAG4AdABlAGwALgBjAG8AbQAA AAAAHwAaDAEAAAAYAAAARgBhAG4ALAAgAFoAaABpAGoAdQBYAAAAHwAfDAEAAAAqAAAAegBoAGkA agB1AHgALgBmAGEAbgBAAGkAbgB0AGUAbAAuAGMAbwBtAAAAAAAfAB4MAQAAAAoAAABTAE0AVABQ AAAAAAACARkMAQAAAGQAAAAAAAAAgSsfpL6jEBmdbgDdAQ9UAgAAAIBGAGEAbgAsACAAWgBoAGkA agB1AFgAAABTAE0AVABQAAAAegBoAGkAagB1AHgALgBmAGEAbgBAAGkAbgB0AGUAbAAuAGMAbwBt AAAAHwABXQEAAAAqAAAAegBoAGkAagB1AHgALgBmAGEAbgBAAGkAbgB0AGUAbAAuAGMAbwBtAAAA AAAfAPg/AQAAABgAAABGAGEAbgAsACAAWgBoAGkAagB1AFgAAAAfACNAAQAAACoAAAB6AGgAaQBq AHUAeAAuAGYAYQBuAEAAaQBuAHQAZQBsAC4AYwBvAG0AAAAAAB8AIkABAAAACgAAAFMATQBUAFAA AAAAAAIB+T8BAAAAZAAAAAAAAACBKx+kvqMQGZ1uAN0BD1QCAAAAgEYAYQBuACwAIABaAGgAaQBq AHUAWAAAAFMATQBUAFAAAAB6AGgAaQBqAHUAeAAuAGYAYQBuAEAAaQBuAHQAZQBsAC4AYwBvAG0A AAAfAAldAQAAACoAAAB6AGgAaQBqAHUAeAAuAGYAYQBuAEAAaQBuAHQAZQBsAC4AYwBvAG0AAAAA AAsAQDoBAAAAHwAaAAEAAAASAAAASQBQAE0ALgBOAG8AdABlAAAAAAADAPE/CQQAAAsAQDoBAAAA AwD9P+QEAAACAQswAQAAABAAAAC5V/rRKkDJTLFh9Z2v5xUlAwAXAAEAAABAADkAgDhf3hcR1QFA AAgwg8L13hcR1QEfAACAhgMCAAAAAADAAAAAAAAARgEAAAAeAAAAYQBjAGMAZQBwAHQAbABhAG4A ZwB1AGEAZwBlAAAAAAABAAAADAAAAGUAbgAtAFUAUwAAAB8ANwABAAAAnAAAAFsAUABBAFQAQwBI AF0AIABCAGEAcwBlAFQAbwBvAGwAcwA6AE0AYQBrAGUAIABCAGEAcwBlAFQAbwBvAGwAcwAgAHMA dQBwAHAAbwByAHQAIAB0AGgAZQAgAGMAbwByAHIAZQBjAHQAIABSAEEAVwAgAEYARgBTACAARgBJ AEwARQAgACAAZwBlAG4AZQByAGEAdABpAG8AbgAAAB8APQABAAAAAgAAAAAAAAADADYAAAAAAAIB cQABAAAAFgAAAAHVERfdhU4tYAnlc0aVkM2Oy4oPO9sAAB8AcAABAAAAnAAAAFsAUABBAFQAQwBI AF0AIABCAGEAcwBlAFQAbwBvAGwAcwA6AE0AYQBrAGUAIABCAGEAcwBlAFQAbwBvAGwAcwAgAHMA dQBwAHAAbwByAHQAIAB0AGgAZQAgAGMAbwByAHIAZQBjAHQAIABSAEEAVwAgAEYARgBTACAARgBJ AEwARQAgACAAZwBlAG4AZQByAGEAdABpAG8AbgAAAB8ANRABAAAAkAAAADwARgBBAEQAMABEADcA RQAwAEEARQAwAEYAQQA1ADQARAA5ADgANwBGADYARQA3ADIANAAzADUAQwBBAEYARAA1ADAAQQBG ADYAMgAzAEEAQgBAAFMASABTAE0AUwBYADEAMAAxAC4AYwBjAHIALgBjAG8AcgBwAC4AaQBuAHQA ZQBsAC4AYwBvAG0APgAAAAMA3j+fTgAAQAAHMPc87N4XEdUBAgELAAEAAAAQAAAAuVf60SpAyUyx YfWdr+cVJQMAJgAAAAAAAgFHAAEAAAAzAAAAYz1VUzthPU1DSTtwPUludGVsO2w9U0hTTVNYMTAx LTE5MDUyMzAzMzAyOVotMjEzNjEAAAIBEDABAAAARgAAAAAAAAAmd705O+w4SaSmFT3LpXtCBwD6 0Nfgrg+lTZh/bnJDXK/VAAAARBFeAACmk2g2iHZsS6dK0+tHmkxkAAAJVI+BAAAAAB8A+j8BAAAA GAAAAEYAYQBuACwAIABaAGgAaQBqAHUAWAAAAAMACVkBAAAAQAAAgAggBgAAAAAAwAAAAAAAAEYA AAAAv4UAAOBKid0XEdUBCwAAgAggBgAAAAAAwAAAAAAAAEYAAAAAgoUAAAAAAAAfAACAhgMCAAAA AADAAAAAAAAARgEAAAAYAAAAZABsAHAALQBwAHIAbwBkAHUAYwB0AAAAAQAAABoAAABkAGwAcABl AC0AdwBpAG4AZABvAHcAcwAAAAAAHwAAgIYDAgAAAAAAwAAAAAAAAEYBAAAAGAAAAGQAbABwAC0A dgBlAHIAcwBpAG8AbgAAAAEAAAAWAAAAMQAxAC4AMAAuADYAMAAwAC4ANwAAAAAAHwAAgIYDAgAA AAAAwAAAAAAAAEYBAAAAGgAAAGQAbABwAC0AcgBlAGEAYwB0AGkAbwBuAAAAAAABAAAAFAAAAG4A bwAtAGEAYwB0AGkAbwBuAAAAAwANNP0/AAAfAACAhgMCAAAAAADAAAAAAAAARgEAAAAgAAAAeAAt AG0AcwAtAGgAYQBzAC0AYQB0AHQAYQBjAGgAAAABAAAAAgAAAAAAAAAfAACAhgMCAAAAAADAAAAA AAAARgEAAAAiAAAAeAAtAG8AcgBpAGcAaQBuAGEAdABpAG4AZwAtAGkAcAAAAAAAAQAAACAAAABb ADEAMAAuADIAMwA5AC4AMQAyADcALgA0ADAAXQAAAFVY --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50AF623ABSHSMSX101ccrcor_--