https://bugzilla.tianocore.org/show_bug.cgi?id=1410
BaseTools should not generate C structure array initial value
if the value is not specified with CODE style.
This patch is going to remove the incorrect initial value statement
and correct the Pcd Array value assignment statement.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Bob Feng
Cc: Liming Gao
---
.../Python/Workspace/BuildClassObject.py | 1 -
.../Source/Python/Workspace/DscBuildData.py | 117 +++---
2 files changed, 73 insertions(+), 45 deletions(-)
diff --git a/BaseTools/Source/Python/Workspace/BuildClassObject.py
b/BaseTools/Source/Python/Workspace/BuildClassObject.py
index 52b3369561..73920c5153 100644
--- a/BaseTools/Source/Python/Workspace/BuildClassObject.py
+++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py
@@ -99,11 +99,10 @@ class PcdClassObject(object):
for demesionattr in self.DefaultValues:
deme = ArrayIndex.findall(demesionattr)
for i in range(len(deme)-1):
if int(deme[i].lstrip("[").rstrip("]").strip()) >
int(self._Capacity[i]):
print "error"
-self._Capacity = [str(int(d) + 1) for d in self._Capacity]
return self._Capacity
@property
def DatumType(self):
return self._DatumType
diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py
b/BaseTools/Source/Python/Workspace/DscBuildData.py
index 7f6e966b5f..7e82e8e934 100644
--- a/BaseTools/Source/Python/Workspace/DscBuildData.py
+++ b/BaseTools/Source/Python/Workspace/DscBuildData.py
@@ -1738,21 +1738,26 @@ class DscBuildData(PlatformBuildClassObject):
def GenerateSizeFunction(self, Pcd):
CApp = "// Default Value in Dec \n"
CApp = CApp + "void Cal_%s_%s_Size(UINT32 *Size){\n" %
(Pcd.TokenSpaceGuidCName, Pcd.TokenCName)
if Pcd.IsArray():
-if (len(Pcd.Capacity) == 1 and Pcd.Capacity[0] != '0') or
(len(Pcd.Capacity) >1 and reduce(lambda x,y:int(x)*int(y), Pcd.Capacity)) > 0:
-CApp += " *Size = (sizeof (%s) * (%s) > *Size) ? sizeof (%s)
* (%s): *Size; \n" % (Pcd.BaseDatumType,
"*".join(Pcd.Capacity),Pcd.BaseDatumType, "*".join(Pcd.Capacity))
-if "{CODE(" in Pcd.DefaultValueFromDec:
-CApp += " *Size = (sizeof (%s_%s_INIT_Value) > *Size ? sizeof
(%s_%s_INIT_Value) : *Size);\n" %
(Pcd.TokenSpaceGuidCName,Pcd.TokenCName,Pcd.TokenSpaceGuidCName,Pcd.TokenCName)
-for skuname in Pcd.SkuInfoList:
-skuobj = Pcd.SkuInfoList[skuname]
-if skuobj.VariableName:
-for defaultstore in skuobj.DefaultStoreDict:
-CApp += " *Size = (sizeof (%s_%s_%s_%s_Value) > *Size
? sizeof (%s_%s_%s_%s_Value) : *Size);\n" %
(Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,defaultstore,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,defaultstore)
-else:
-CApp += " *Size = (sizeof (%s_%s_%s_%s_Value) > *Size ?
sizeof (%s_%s_%s_%s_Value) : *Size);\n" %
(Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,TAB_DEFAULT_STORES_DEFAULT,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,TAB_DEFAULT_STORES_DEFAULT)
+if Pcd.Type in PCD_DYNAMIC_TYPE_SET | PCD_DYNAMIC_EX_TYPE_SET:
+for skuname in Pcd.SkuInfoList:
+skuobj = Pcd.SkuInfoList[skuname]
+if skuobj.VariableName:
+for defaultstore in skuobj.DefaultStoreDict:
+pcddef =
self.GetPcdDscRawDefaultValue(Pcd,skuname,defaultstore)
+if pcddef and "{CODE(" in pcddef:
+CApp += " *Size = (sizeof (%s_%s_%s_%s_Value)
> *Size ? sizeof (%s_%s_%s_%s_Value) : *Size);\n" %
(Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,defaultstore,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,defaultstore)
+else:
+pcddef =
self.GetPcdDscRawDefaultValue(Pcd,skuname,TAB_DEFAULT_STORES_DEFAULT)
+if pcddef and "{CODE(" in pcddef:
+CApp += " *Size = (sizeof (%s_%s_%s_%s_Value) >
*Size ? sizeof (%s_%s_%s_%s_Value) : *Size);\n" %
(Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,TAB_DEFAULT_STORES_DEFAULT,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,TAB_DEFAULT_STORES_DEFAULT)
+else:
+pcddef =
self.GetPcdDscRawDefaultValue(Pcd,TAB_DEFAULT,TAB_DEFAULT_STORES_DEFAULT)
+if pcddef and "{CODE(" in pcddef:
+CApp += " *Size = (sizeof (%s_%s_%s_%s_Value) > *Size ?
sizeof (%s_%s_%s_%s_Value) : *Size);\n" %
(Pcd.TokenSpaceGuidCName,Pcd.TokenCName,TAB_DEFAULT,TAB_DEFAULT_STORES_DEFAULT,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,TAB_DEFAULT,TAB_DEFAULT_STORES_DEFAULT)
for index in Pcd.DefaultValues:
FieldList = Pcd.DefaultValues[index]
if not