]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/GenPcdDb.py
BaseTools: Fix the bug for VOID* pcd max size from component section
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / GenPcdDb.py
index 82360ae57deb62f5ac0193f98a8bf6c4200a976d..e415cae2905480b5a4b217151b04e6ad191cc741 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # Routines for generating Pcd Database\r
 #\r
-# Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>\r
 # This program and the accompanying materials\r
 # are licensed and made available under the terms and conditions of the BSD License\r
 # which accompanies this distribution.  The full text of the license may be found at\r
@@ -980,8 +980,6 @@ def CreatePcdDatabaseCode (Info, AutoGenC, AutoGenH):
 def CreatePcdDataBase(PcdDBData):\r
     delta = {}\r
     basedata = {}\r
-    if not PcdDBData:\r
-        return ""\r
     for skuname,skuid in PcdDBData:\r
         if len(PcdDBData[(skuname,skuid)][1]) != len(PcdDBData[("DEFAULT","0")][1]):\r
             EdkLogger.ERROR("The size of each sku in one pcd are not same")\r
@@ -1061,9 +1059,12 @@ def NewCreatePcdDatabasePhaseSpecificAutoGen(Platform,Phase):
         AdditionalAutoGenH, AdditionalAutoGenC =  CreateAutoGen(PcdDriverAutoGenData)\r
     else:\r
         AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer,VarCheckTab = CreatePcdDatabasePhaseSpecificAutoGen (Platform,{}, Phase)\r
+        final_data = ()\r
+        for item in PcdDbBuffer:\r
+            final_data += unpack("B",item)\r
+        PcdDBData[("DEFAULT","0")] = (PcdDbBuffer, final_data)\r
 \r
-    PcdDbBuffer = CreatePcdDataBase(PcdDBData)\r
-    return AdditionalAutoGenH, AdditionalAutoGenC, PcdDbBuffer\r
+    return AdditionalAutoGenH, AdditionalAutoGenC, CreatePcdDataBase(PcdDBData)\r
 ## Create PCD database in DXE or PEI phase\r
 #\r
 #   @param      Platform    The platform object\r
@@ -1184,12 +1185,6 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
             if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdItem]:\r
                 CName = PcdItem[0]\r
 \r
-        if GlobalData.BuildOptionPcd:\r
-            for PcdItem in GlobalData.BuildOptionPcd:\r
-                if (Pcd.TokenSpaceGuidCName, CName) == (PcdItem[0], PcdItem[1]):\r
-                    Pcd.DefaultValue = PcdItem[2]\r
-                    break\r
-\r
         EdkLogger.debug(EdkLogger.DEBUG_3, "PCD: %s %s (%s : %s)" % (CName, TokenSpaceGuidCName, Pcd.Phase, Phase))\r
 \r
         if Pcd.Phase == 'PEI':\r
@@ -1239,7 +1234,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
         for SkuName in Pcd.SkuInfoList:\r
             Sku = Pcd.SkuInfoList[SkuName]\r
             SkuId = Sku.SkuId\r
-            if SkuId == None or SkuId == '':\r
+            if SkuId is None or SkuId == '':\r
                 continue\r
 \r
                 \r
@@ -1395,9 +1390,12 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
                     if Pcd.MaxDatumSize != '':\r
                         MaxDatumSize = int(Pcd.MaxDatumSize, 0)\r
                         if MaxDatumSize < Size:\r
-                            EdkLogger.error("build", AUTOGEN_ERROR,\r
+                            if Pcd.MaxSizeUserSet:\r
+                                EdkLogger.error("build", AUTOGEN_ERROR,\r
                                             "The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName),\r
                                             ExtraData="[%s]" % str(Platform))\r
+                            else:\r
+                                MaxDatumSize = Size\r
                     else:\r
                         MaxDatumSize = Size\r
                     StringTabLen = MaxDatumSize\r
@@ -1505,12 +1503,6 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
             if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdItem]:\r
                 CName = PcdItem[0]\r
 \r
-        if GlobalData.BuildOptionPcd:\r
-            for PcdItem in GlobalData.BuildOptionPcd:\r
-                if (Pcd.TokenSpaceGuidCName, CName) == (PcdItem[0], PcdItem[1]):\r
-                    Pcd.DefaultValue = PcdItem[2]\r
-                    break\r
-\r
         EdkLogger.debug(EdkLogger.DEBUG_1, "PCD = %s.%s" % (CName, TokenSpaceGuidCName))\r
         EdkLogger.debug(EdkLogger.DEBUG_1, "phase = %s" % Phase)\r
         EdkLogger.debug(EdkLogger.DEBUG_1, "GeneratedTokenNumber = %s" % str(GeneratedTokenNumber))\r