From a243297253afb3f4e5b4047bab49548c73dfdcd7 Mon Sep 17 00:00:00 2001 From: Eugene Cohen Date: Thu, 21 Jan 2016 09:10:55 +0000 Subject: [PATCH 1/1] BaseTools: make build report tolerant of FVs specified by name Check if the FV name is in the FV dictionary before using it which fixes a crash during build report generation when FVs are specified by path in the FDF. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Eugene Cohen Reviewed-by: Yonghong Zhu git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19705 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Source/Python/build/BuildReport.py | 72 +++++++++++--------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py index d459a0113a..04a4d7dbd5 100644 --- a/BaseTools/Source/Python/build/BuildReport.py +++ b/BaseTools/Source/Python/build/BuildReport.py @@ -4,7 +4,7 @@ # This module contains the functionality to generate build report after # build all target completes successfully. # -# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.
+# Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -1175,18 +1175,20 @@ class FdRegionReport(object): # @param Wa Workspace context information # def _DiscoverNestedFvList(self, FvName, Wa): - for Ffs in Wa.FdfProfile.FvDict[FvName.upper()].FfsList: - for Section in Ffs.SectionList: - try: - for FvSection in Section.SectionList: - if FvSection.FvName in self.FvList: - continue - self._GuidsDb[Ffs.NameGuid.upper()] = FvSection.FvName - self.FvList.append(FvSection.FvName) - self.FvInfo[FvSection.FvName] = ("Nested FV", 0, 0) - self._DiscoverNestedFvList(FvSection.FvName, Wa) - except AttributeError: - pass + FvDictKey=FvName.upper() + if FvDictKey in Wa.FdfProfile.FvDict: + for Ffs in Wa.FdfProfile.FvDict[FvName.upper()].FfsList: + for Section in Ffs.SectionList: + try: + for FvSection in Section.SectionList: + if FvSection.FvName in self.FvList: + continue + self._GuidsDb[Ffs.NameGuid.upper()] = FvSection.FvName + self.FvList.append(FvSection.FvName) + self.FvInfo[FvSection.FvName] = ("Nested FV", 0, 0) + self._DiscoverNestedFvList(FvSection.FvName, Wa) + except AttributeError: + pass ## # Constructor function for class FdRegionReport @@ -1264,27 +1266,29 @@ class FdRegionReport(object): # Collect the GUID map in the FV firmware volume # for FvName in self.FvList: - for Ffs in Wa.FdfProfile.FvDict[FvName.upper()].FfsList: - try: - # - # collect GUID map for binary EFI file in FDF file. - # - Guid = Ffs.NameGuid.upper() - Match = gPcdGuidPattern.match(Ffs.NameGuid) - if Match: - PcdTokenspace = Match.group(1) - PcdToken = Match.group(2) - if (PcdToken, PcdTokenspace) in PlatformPcds: - GuidValue = PlatformPcds[(PcdToken, PcdTokenspace)] - Guid = GuidStructureByteArrayToGuidString(GuidValue).upper() - for Section in Ffs.SectionList: - try: - ModuleSectFile = mws.join(Wa.WorkspaceDir, Section.SectFileName) - self._GuidsDb[Guid] = ModuleSectFile - except AttributeError: - pass - except AttributeError: - pass + FvDictKey=FvName.upper() + if FvDictKey in Wa.FdfProfile.FvDict: + for Ffs in Wa.FdfProfile.FvDict[FvName.upper()].FfsList: + try: + # + # collect GUID map for binary EFI file in FDF file. + # + Guid = Ffs.NameGuid.upper() + Match = gPcdGuidPattern.match(Ffs.NameGuid) + if Match: + PcdTokenspace = Match.group(1) + PcdToken = Match.group(2) + if (PcdToken, PcdTokenspace) in PlatformPcds: + GuidValue = PlatformPcds[(PcdToken, PcdTokenspace)] + Guid = GuidStructureByteArrayToGuidString(GuidValue).upper() + for Section in Ffs.SectionList: + try: + ModuleSectFile = mws.join(Wa.WorkspaceDir, Section.SectFileName) + self._GuidsDb[Guid] = ModuleSectFile + except AttributeError: + pass + except AttributeError: + pass ## -- 2.39.2