From nobody Thu Apr 25 07:01:44 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+53147+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+53147+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1578649179; cv=none; d=zohomail.com; s=zohoarc; b=kxxZ68ElwGKPCMkZESRnCLxCnEiVuCLPYeb82vXuZHs2PbEtSnVnrLeZ45BVsUsRluwRKcH6BbAo1Iopi1xDTHjhFKPDaIMg+SLoznpTkgT3rhNn7RRB197cE4NAhxIMNFAuKgeDgGxmD21+mkYhyB9ek0h//pZlAwp19x7JnKk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1578649179; h=Content-Type:Cc:Date:From:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Sender:Subject:To; bh=/WpvjLkAR6XARkDMDCpF11Xha60TL0KWWcFFWWRUJS0=; b=AC441bM4xqgbvfz5oboPB5oJroKKz65Z16a9iLyx7UyfQ+KuyHDoKz76fIyBZ7jBiKLZ6bjQUFAUEWHgjET59r5HoER6F8uyqXtpvUyMFynqm667G/5m8Uj7jDEY7wzt5AeIijm1zaS5I0Q/n4Npley44T6pDOGZpTp1O9y+qPY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+53147+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 1578649179077923.2348584438778; Fri, 10 Jan 2020 01:39:39 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id G0n5YY1788612xAmhSsyA6Nv; Fri, 10 Jan 2020 01:39:38 -0800 X-Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mx.groups.io with SMTP id smtpd.web10.7930.1578649177626983363 for ; Fri, 10 Jan 2020 01:39:37 -0800 X-Amp-Result: UNSCANNABLE X-Amp-File-Uploaded: False X-Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Jan 2020 01:39:37 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,415,1571727600"; d="dat'59?scan'59,208,59";a="218617419" X-Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga008.fm.intel.com with ESMTP; 10 Jan 2020 01:39:37 -0800 X-Received: from fmsmsx153.amr.corp.intel.com (10.18.125.6) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 10 Jan 2020 01:39:36 -0800 X-Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX153.amr.corp.intel.com (10.18.125.6) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 10 Jan 2020 01:39:36 -0800 X-Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.30]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.245]) with mapi id 14.03.0439.000; Fri, 10 Jan 2020 17:39:34 +0800 From: "Fan, ZhijuX" To: "devel@edk2.groups.io" CC: "Gao, Liming" , "Feng, Bob C" Subject: [edk2-devel] [PATCH V2] BaseTools:fix Ecc tool issue for check StructPcd Thread-Topic: [PATCH V2] BaseTools:fix Ecc tool issue for check StructPcd Thread-Index: AdXHmdKV182njRX2T+KuUjLusVxo6g== Date: Fri, 10 Jan 2020 09:39:33 +0000 Message-ID: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 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 X-Gm-Message-State: TOHTIzEonQAVuSvkW6ZvExIrx1787277AA= Content-Type: multipart/mixed; boundary="_000_FAD0D7E0AE0FA54D987F6E72435CAFD50B004CB2SHSMSX101ccrcor_" Content-Language: en-US DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1578649178; bh=2bDf63TEez4XQP6Fc885HI3+W4xy9c4wXHmc+EZs2U4=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=uDO+Pl9r77mJb3IJXzXoglkuMsnM+eZ6r6mGMbT2mtDP+Kp/a+Dzr4q7hbZl/MRDzeQ 5Cuy2NFrP0QPh3RzoTqMFXqECHugt8vdYe18L2IFT9UsqAW7NswfeEkC/q/dK20ZiI9i9 skuOQtP8JYaNO6AZn7ORpik84uTzumobSbA= X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity @groups.io) --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50B004CB2SHSMSX101ccrcor_ 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=3D2142 gAdvancedFeaturePkgTokenSpaceGuid.PcdSmbiosType0BiosInformation| {0x0}|SMBIOS_TABLE_TYPE0|0x80010000 { IndustryStandard/SmBios.h MdePkg/MdePkg.dec AdvancedFeaturePkg/AdvancedFeaturePkg.dec } If there's a PcdStructHF or PcdStructPKGs in StructPcd, EccTool report error,IndexError: list index out of range This patch is going to fix this issue Cc: Liming Gao Cc: Bob Feng Signed-off-by: Zhiju.Fan --- .../Python/Ecc/MetaFileWorkspace/MetaFileParser.py | 71 ++++++++++++++++++= +++- 1 file changed, 69 insertions(+), 2 deletions(-) Optimize the code to Reduce patch redundancy and update the copyright to 20= 20 diff --git a/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.p= y b/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py index 1576565455..9c27c8e16a 100644 --- a/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py +++ b/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py @@ -1,7 +1,7 @@ ## @file # This file is used to parse meta files # -# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.
+# Copyright (c) 2008 - 2020, Intel Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent # =20 @@ -13,7 +13,7 @@ import Common.LongFilePathOs as os import re import time import copy - +from hashlib import md5 import Common.EdkLogger as EdkLogger import Common.GlobalData as GlobalData import Ecc.EccGlobalData as EccGlobalData @@ -1498,6 +1498,10 @@ class DecParser(MetaFileParser): self.TblFile =3D EccGlobalData.gDb.TblFile self.FileID =3D -1 =20 + self._CurrentStructurePcdName =3D "" + self._include_flag =3D False + self._package_flag =3D False + ## Parser starter def Start(self): Content =3D '' @@ -1692,6 +1696,62 @@ class DecParser(MetaFileParser): File=3Dself.MetaFile, Line=3Dself._LineIndex+1) self._ValueList[0] =3D '' =20 + def ParsePcdName(self,namelist): + if "[" in namelist[1]: + pcdname =3D namelist[1][:namelist[1].index("[")] + arrayindex =3D namelist[1][namelist[1].index("["):] + namelist[1] =3D pcdname + if len(namelist) =3D=3D 2: + namelist.append(arrayindex) + else: + namelist[2] =3D ".".join((arrayindex,namelist[2])) + return namelist + + def StructPcdParser(self): + self._ValueList[0] =3D self._CurrentStructurePcdName + + if "|" not in self._CurrentLine: + if "" =3D=3D self._CurrentLine: + self._include_flag =3D True + self._package_flag =3D False + self._ValueList =3D None + return + if "" =3D=3D self._CurrentLine: + self._package_flag =3D True + self._ValueList =3D None + self._include_flag =3D False + return + + if self._include_flag: + self._ValueList[1] =3D "_" + md5(self._Curren= tLine.encode('utf-8')).hexdigest() + self._ValueList[2] =3D self._CurrentLine + if self._package_flag and "}" !=3D self._CurrentLine: + self._ValueList[1] =3D "_" + md5(self._CurrentLi= ne.encode('utf-8')).hexdigest() + self._ValueList[2] =3D self._CurrentLine + if self._CurrentLine =3D=3D "}": + self._package_flag =3D False + self._include_flag =3D False + self._ValueList =3D None + else: + PcdTockens =3D self._CurrentLine.split(TAB_VALUE_SPLIT) + PcdNames =3D self.ParsePcdName(PcdTockens[0].split(TAB_SPLIT)) + if len(PcdNames) =3D=3D 2: + if PcdNames[1].strip().endswith("]"): + PcdName =3D PcdNames[1][:PcdNames[1].index('[')] + Index =3D PcdNames[1][PcdNames[1].index('['):] + self._ValueList[0] =3D TAB_SPLIT.join((PcdNames[0], Pc= dName)) + self._ValueList[1] =3D Index + self._ValueList[2] =3D PcdTockens[1] + else: + self._CurrentStructurePcdName =3D "" + else: + if self._CurrentStructurePcdName !=3D TAB_SPLIT.join(PcdNa= mes[:2]): + EdkLogger.error('Parser', FORMAT_INVALID, "Pcd Name do= es not match: %s and %s " % ( + self._CurrentStructurePcdName, TAB_SPLIT.join(PcdNames= [:2])), + File=3Dself.MetaFile, Line=3Dself._Lin= eIndex + 1) + self._ValueList[1] =3D TAB_SPLIT.join(PcdNames[2:]) + self._ValueList[2] =3D PcdTockens[1] + ## PCD sections parser # # [PcdsFixedAtBuild] @@ -1702,6 +1762,9 @@ class DecParser(MetaFileParser): # @ParseMacro def _PcdParser(self): + if self._CurrentStructurePcdName: + self.StructPcdParser() + return TokenList =3D GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT= , 1) self._ValueList[0:1] =3D GetSplitValueList(TokenList[0], TAB_SPLIT) # check PCD information @@ -1759,6 +1822,10 @@ class DecParser(MetaFileParser): if not IsValid: EdkLogger.error('Parser', FORMAT_INVALID, Cause, ExtraData=3Ds= elf._CurrentLine, File=3Dself.MetaFile, Line=3Dself._LineIndex+1) + if Cause =3D=3D "StructurePcd": + self._CurrentStructurePcdName =3D TAB_SPLIT.join(self._ValueLi= st[0:2]) + self._ValueList[0] =3D self._CurrentStructurePcdName + self._ValueList[1] =3D ValueList[1].strip() =20 if EccGlobalData.gConfig.UniCheckPCDInfo =3D=3D '1' or EccGlobalDa= ta.gConfig.UniCheckAll =3D=3D '1' or EccGlobalData.gConfig.CheckAll =3D=3D = '1': # check Description, Prompt information --=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 (#53147): https://edk2.groups.io/g/devel/message/53147 Mute This Topic: https://groups.io/mt/69597410/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_FAD0D7E0AE0FA54D987F6E72435CAFD50B004CB2SHSMSX101ccrcor_ Content-Disposition: attachment; filename="winmail.dat" Content-Transfer-Encoding: base64 Content-Type: application/ms-tnef; name="winmail.dat" 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 dQB4AC4AZgBhAG4AQABpAG4AdABlAGwALgBjAG8AbQAAAB8AAV0BAAAAKgAAAHoAaABpAGoAdQB4 AC4AZgBhAG4AQABpAG4AdABlAGwALgBjAG8AbQAAAAAAHwD4PwEAAAAYAAAARgBhAG4ALAAgAFoA aABpAGoAdQBYAAAAHwAjQAEAAAAqAAAAegBoAGkAagB1AHgALgBmAGEAbgBAAGkAbgB0AGUAbAAu AGMAbwBtAAAAAAAfACJAAQAAAAoAAABTAE0AVABQAAAAAAACAfk/AQAAAGQAAAAAAAAAgSsfpL6j EBmdbgDdAQ9UAgAAAIBGAGEAbgAsACAAWgBoAGkAagB1AFgAAABTAE0AVABQAAAAegBoAGkAagB1 AHgALgBmAGEAbgBAAGkAbgB0AGUAbAAuAGMAbwBtAAAAHwAJXQEAAAAqAAAAegBoAGkAagB1AHgA LgBmAGEAbgBAAGkAbgB0AGUAbAAuAGMAbwBtAAAAAAALAEA6AQAAAB8AGgABAAAAEgAAAEkAUABN AC4ATgBvAHQAZQAAAAAAAwDxPwkEAAALAEA6AQAAAAMA/T/kBAAAAgELMAEAAAAQAAAA63y7vK9o DUeeRIIyU/67pAMAFwABAAAAQAA5AIB4D92Zx9UBQAAIMIKnmt2Zx9UBHwAAgIYDAgAAAAAAwAAA AAAAAEYBAAAAHgAAAGEAYwBjAGUAcAB0AGwAYQBuAGcAdQBhAGcAZQAAAAAAAQAAAAwAAABlAG4A LQBVAFMAAAAfADcAAQAAAHgAAABbAFAAQQBUAEMASAAgAFYAMgBdACAAQgBhAHMAZQBUAG8AbwBs AHMAOgBmAGkAeAAgAEUAYwBjACAAdABvAG8AbAAgAGkAcwBzAHUAZQAgAGYAbwByACAAYwBoAGUA YwBrACAAUwB0AHIAdQBjAHQAUABjAGQAAAAfAD0AAQAAAAIAAAAAAAAAAwA2AAAAAAACAXEAAQAA ABYAAAAB1ceZ0pXXzaeNFfZP4q5SMu6xXGjqAAAfAHAAAQAAAHgAAABbAFAAQQBUAEMASAAgAFYA MgBdACAAQgBhAHMAZQBUAG8AbwBsAHMAOgBmAGkAeAAgAEUAYwBjACAAdABvAG8AbAAgAGkAcwBz AHUAZQAgAGYAbwByACAAYwBoAGUAYwBrACAAUwB0AHIAdQBjAHQAUABjAGQAAAAfADUQAQAAAJAA AAA8AEYAQQBEADAARAA3AEUAMABBAEUAMABGAEEANQA0AEQAOQA4ADcARgA2AEUANwAyADQAMwA1 AEMAQQBGAEQANQAwAEIAMAAwADQAQwBCADIAQABTAEgAUwBNAFMAWAAxADAAMQAuAGMAYwByAC4A YwBvAHIAcAAuAGkAbgB0AGUAbAAuAGMAbwBtAD4AAAADAN4/n04AAEAABzAgRpjdmcfVAQIBCwAB AAAAEAAAAOt8u7yvaA1HnkSCMlP+u6QDACYAAAAAAAIBRwABAAAAMgAAAGM9VVM7YT1NQ0k7cD1J bnRlbDtsPVNIU01TWDEwMS0yMDAxMTAwOTM5MzNaLTc4NjUAAAACARAwAQAAAEYAAAAAAAAAJne9 OTvsOEmkphU9y6V7QgcA+tDX4K4PpU2Yf25yQ1yv1QAAAEQRXgAAppNoNoh2bEunStPrR5pMZAAA CVTAWwAAAAAfAPo/AQAAABgAAABGAGEAbgAsACAAWgBoAGkAagB1AFgAAAADAAlZAQAAAEAAAIAI IAYAAAAAAMAAAAAAAABGAAAAAL+FAADAkZPcmcfVAQsAAIAIIAYAAAAAAMAAAAAAAABGAAAAAIKF AAAAAAAAAwAAgAggBgAAAAAAwAAAAAAAAEYAAAAA64UAAAkEAAAfAACAhgMCAAAAAADAAAAAAAAA RgEAAAAYAAAAZABsAHAALQBwAHIAbwBkAHUAYwB0AAAAAQAAABoAAABkAGwAcABlAC0AdwBpAG4A ZABvAHcAcwAAAAAAHwAAgIYDAgAAAAAAwAAAAAAAAEYBAAAAGAAAAGQAbABwAC0AdgBlAHIAcwBp AG8AbgAAAAEAAAASAAAAMQAxAC4AMgAuADAALgA2AAAAAAAfAACAhgMCAAAAAADAAAAAAAAARgEA AAAaAAAAZABsAHAALQByAGUAYQBjAHQAaQBvAG4AAAAAAAEAAAAUAAAAbgBvAC0AYQBjAHQAaQBv AG4AAAACAQCACCAGAAAAAADAAAAAAAAARgEAAAA2AAAASQBuAFQAcgBhAG4AcwBpAHQATQBlAHMA cwBhAGcAZQBDAG8AcgByAGUAbABhAHQAbwByAAAAAAABAAAAEAAAAJ4QEbMU7o5AnETl6cJsgIED AA00/T8AAB8AAICGAwIAAAAAAMAAAAAAAABGAQAAACAAAAB4AC0AbQBzAC0AaABhAHMALQBhAHQA dABhAGMAaAAAAAEAAAACAAAAAAAAAB8AAICGAwIAAAAAAMAAAAAAAABGAQAAACIAAAB4AC0AbwBy AGkAZwBpAG4AYQB0AGkAbgBnAC0AaQBwAAAAAAABAAAAIAAAAFsAMQAwAC4AMgAzADkALgAxADIA NwAuADQAMABdAAAAz9Y= --_000_FAD0D7E0AE0FA54D987F6E72435CAFD50B004CB2SHSMSX101ccrcor_--