BaseTools: Check PCD DataType and the maxsize.
Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Feng Bob C <bob.c.feng@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
@ -1611,6 +1611,12 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''):
|
|||||||
else:
|
else:
|
||||||
IsValid = (len(FieldList) <= 3)
|
IsValid = (len(FieldList) <= 3)
|
||||||
# Value, Size = ParseFieldValue(Value)
|
# Value, Size = ParseFieldValue(Value)
|
||||||
|
if Size:
|
||||||
|
try:
|
||||||
|
int(Size,16) if Size.upper().startswith("0X") else int(Size)
|
||||||
|
except:
|
||||||
|
IsValid = False
|
||||||
|
Size = -1
|
||||||
return [str(Value), '', str(Size)], IsValid, 0
|
return [str(Value), '', str(Size)], IsValid, 0
|
||||||
elif PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):
|
elif PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):
|
||||||
Value = FieldList[0]
|
Value = FieldList[0]
|
||||||
@ -1633,7 +1639,14 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''):
|
|||||||
IsValid = (len(FieldList) <= 1)
|
IsValid = (len(FieldList) <= 1)
|
||||||
else:
|
else:
|
||||||
IsValid = (len(FieldList) <= 3)
|
IsValid = (len(FieldList) <= 3)
|
||||||
return [Value, Type, Size], IsValid, 0
|
|
||||||
|
if Size:
|
||||||
|
try:
|
||||||
|
int(Size,16) if Size.upper().startswith("0X") else int(Size)
|
||||||
|
except:
|
||||||
|
IsValid = False
|
||||||
|
Size = -1
|
||||||
|
return [Value, Type, str(Size)], IsValid, 0
|
||||||
elif PcdType in (MODEL_PCD_DYNAMIC_VPD, MODEL_PCD_DYNAMIC_EX_VPD):
|
elif PcdType in (MODEL_PCD_DYNAMIC_VPD, MODEL_PCD_DYNAMIC_EX_VPD):
|
||||||
VpdOffset = FieldList[0]
|
VpdOffset = FieldList[0]
|
||||||
Value = Size = ''
|
Value = Size = ''
|
||||||
@ -1649,8 +1662,13 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''):
|
|||||||
IsValid = (len(FieldList) <= 1)
|
IsValid = (len(FieldList) <= 1)
|
||||||
else:
|
else:
|
||||||
IsValid = (len(FieldList) <= 3)
|
IsValid = (len(FieldList) <= 3)
|
||||||
|
if Size:
|
||||||
return [VpdOffset, Size, Value], IsValid, 2
|
try:
|
||||||
|
int(Size,16) if Size.upper().startswith("0X") else int(Size)
|
||||||
|
except:
|
||||||
|
IsValid = False
|
||||||
|
Size = -1
|
||||||
|
return [VpdOffset, str(Size), Value], IsValid, 2
|
||||||
elif PcdType in (MODEL_PCD_DYNAMIC_HII, MODEL_PCD_DYNAMIC_EX_HII):
|
elif PcdType in (MODEL_PCD_DYNAMIC_HII, MODEL_PCD_DYNAMIC_EX_HII):
|
||||||
HiiString = FieldList[0]
|
HiiString = FieldList[0]
|
||||||
Guid = Offset = Value = Attribute = ''
|
Guid = Offset = Value = Attribute = ''
|
||||||
|
@ -806,9 +806,14 @@ class DscBuildData(PlatformBuildClassObject):
|
|||||||
"Pcd (%s.%s) defined in DSC is not declared in DEC files. Arch: ['%s']" % (TokenSpaceGuid, PcdCName, self._Arch),
|
"Pcd (%s.%s) defined in DSC is not declared in DEC files. Arch: ['%s']" % (TokenSpaceGuid, PcdCName, self._Arch),
|
||||||
File=self.MetaFile, Line=LineNo)
|
File=self.MetaFile, Line=LineNo)
|
||||||
ValueList, IsValid, Index = AnalyzeDscPcd(Setting, PcdType, self._DecPcds[PcdCName, TokenSpaceGuid].DatumType)
|
ValueList, IsValid, Index = AnalyzeDscPcd(Setting, PcdType, self._DecPcds[PcdCName, TokenSpaceGuid].DatumType)
|
||||||
if not IsValid and PcdType not in [MODEL_PCD_FEATURE_FLAG, MODEL_PCD_FIXED_AT_BUILD]:
|
if not IsValid:
|
||||||
EdkLogger.error('build', FORMAT_INVALID, "Pcd format incorrect.", File=self.MetaFile, Line=LineNo,
|
if PcdType not in [MODEL_PCD_FEATURE_FLAG, MODEL_PCD_FIXED_AT_BUILD]:
|
||||||
ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))
|
EdkLogger.error('build', FORMAT_INVALID, "Pcd format incorrect.", File=self.MetaFile, Line=LineNo,
|
||||||
|
ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))
|
||||||
|
else:
|
||||||
|
if ValueList[2] == '-1':
|
||||||
|
EdkLogger.error('build', FORMAT_INVALID, "Pcd format incorrect.", File=self.MetaFile, Line=LineNo,
|
||||||
|
ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))
|
||||||
if ValueList[Index] and PcdType not in [MODEL_PCD_FEATURE_FLAG, MODEL_PCD_FIXED_AT_BUILD]:
|
if ValueList[Index] and PcdType not in [MODEL_PCD_FEATURE_FLAG, MODEL_PCD_FIXED_AT_BUILD]:
|
||||||
try:
|
try:
|
||||||
ValueList[Index] = ValueExpression(ValueList[Index], GlobalData.gPlatformPcds)(True)
|
ValueList[Index] = ValueExpression(ValueList[Index], GlobalData.gPlatformPcds)(True)
|
||||||
@ -836,6 +841,10 @@ class DscBuildData(PlatformBuildClassObject):
|
|||||||
if not Valid:
|
if not Valid:
|
||||||
EdkLogger.error('build', FORMAT_INVALID, ErrStr, File=self.MetaFile, Line=LineNo,
|
EdkLogger.error('build', FORMAT_INVALID, ErrStr, File=self.MetaFile, Line=LineNo,
|
||||||
ExtraData="%s.%s" % (TokenSpaceGuid, PcdCName))
|
ExtraData="%s.%s" % (TokenSpaceGuid, PcdCName))
|
||||||
|
if PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):
|
||||||
|
if self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() != ValueList[1].strip():
|
||||||
|
EdkLogger.error('build', FORMAT_INVALID, ErrStr , File=self.MetaFile, Line=LineNo,
|
||||||
|
ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))
|
||||||
return ValueList
|
return ValueList
|
||||||
|
|
||||||
def _FilterPcdBySkuUsage(self,Pcds):
|
def _FilterPcdBySkuUsage(self,Pcds):
|
||||||
|
Reference in New Issue
Block a user