]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/GenFds/Fd.py
BaseTools: Enhance BaseTools supports FixedAtBuild usage in VFR file
[mirror_edk2.git] / BaseTools / Source / Python / GenFds / Fd.py
index cbfd6715ca09572e5bf6f14510e38fa6344f66de..0c06ff57dc319f532ca187187a763ec91a206341 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # process FD generation\r
 #\r
-#  Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\r
+#  Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>\r
 #\r
 #  This program and the accompanying materials\r
 #  are licensed and made available under the terms and conditions of the BSD License\r
@@ -17,7 +17,7 @@
 #\r
 import Region\r
 import Fv\r
-import os\r
+import Common.LongFilePathOs as os\r
 import StringIO\r
 import sys\r
 from struct import *\r
@@ -71,11 +71,11 @@ class FD(FDClassObject):
         \r
         for RegionObj in self.RegionList :\r
             if RegionObj.RegionType == 'CAPSULE':\r
-              continue\r
+                continue\r
             if RegionObj.Offset + RegionObj.Size <= PreviousRegionStart:\r
-              pass\r
+                pass\r
             elif RegionObj.Offset <= PreviousRegionStart or (RegionObj.Offset >=PreviousRegionStart and RegionObj.Offset < PreviousRegionStart + PreviousRegionSize):\r
-              pass\r
+                pass\r
             elif RegionObj.Offset > PreviousRegionStart + PreviousRegionSize:\r
                 GenFdsGlobalVariable.InfLogger('Padding region starting from offset 0x%X, with size 0x%X' %(PreviousRegionStart + PreviousRegionSize, RegionObj.Offset - (PreviousRegionStart + PreviousRegionSize)))\r
                 PadRegion = Region.Region()\r
@@ -88,7 +88,7 @@ class FD(FDClassObject):
             # Call each region's AddToBuffer function\r
             #\r
             if PreviousRegionSize > self.Size:\r
-              pass\r
+                pass\r
             GenFdsGlobalVariable.VerboseLogger('Call each region\'s AddToBuffer function')\r
             RegionObj.AddToBuffer (TempFdBuffer, self.BaseAddress, self.BlockSizeList, self.ErasePolarity, GenFds.ImageBinDict, self.vtfRawDict, self.DefineVarDict)\r
         \r
@@ -113,10 +113,15 @@ class FD(FDClassObject):
             PreviousRegionStart = RegionObj.Offset\r
             PreviousRegionSize = RegionObj.Size\r
             #\r
+            # Verify current region fits within allocated FD section Size\r
+            #\r
+            if PreviousRegionStart + PreviousRegionSize > self.Size:\r
+                EdkLogger.error("GenFds", GENFDS_ERROR,\r
+                                'FD %s size too small to fit region with offset 0x%X and size 0x%X'\r
+                                % (self.FdUiName, PreviousRegionStart, PreviousRegionSize))\r
+            #\r
             # Call each region's AddToBuffer function\r
             #\r
-            if PreviousRegionSize > self.Size:\r
-                EdkLogger.error("GenFds", GENFDS_ERROR, 'FD %s size too small' % self.FdUiName)\r
             GenFdsGlobalVariable.VerboseLogger('Call each region\'s AddToBuffer function')\r
             RegionObj.AddToBuffer (FdBuffer, self.BaseAddress, self.BlockSizeList, self.ErasePolarity, GenFds.ImageBinDict, self.vtfRawDict, self.DefineVarDict)\r
         #\r