mirror of https://github.com/acidanthera/audk.git
BaseTools: Add check only VOID* type Pcd need the maxsize info
Add check for the datum type keyword "VOID*", only the VOID* type Pcd need the additional maxsize info. Cc: Liming Gao <liming.gao@intel.com> Cc: Yonghong Zhu <yonghong.zhu@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com> Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
This commit is contained in:
parent
f965b772fc
commit
f2cc33d849
|
@ -1432,9 +1432,9 @@ def ParseFieldValue (Value):
|
||||||
## AnalyzeDscPcd
|
## AnalyzeDscPcd
|
||||||
#
|
#
|
||||||
# Analyze DSC PCD value, since there is no data type info in DSC
|
# Analyze DSC PCD value, since there is no data type info in DSC
|
||||||
# This fuction is used to match functions (AnalyzePcdData) used for retrieving PCD value from database
|
# This function is used to match functions (AnalyzePcdData) used for retrieving PCD value from database
|
||||||
# 1. Feature flag: TokenSpace.PcdCName|PcdValue
|
# 1. Feature flag: TokenSpace.PcdCName|PcdValue
|
||||||
# 2. Fix and Patch:TokenSpace.PcdCName|PcdValue[|MaxSize]
|
# 2. Fix and Patch:TokenSpace.PcdCName|PcdValue[|VOID*[|MaxSize]]
|
||||||
# 3. Dynamic default:
|
# 3. Dynamic default:
|
||||||
# TokenSpace.PcdCName|PcdValue[|VOID*[|MaxSize]]
|
# TokenSpace.PcdCName|PcdValue[|VOID*[|MaxSize]]
|
||||||
# TokenSpace.PcdCName|PcdValue
|
# TokenSpace.PcdCName|PcdValue
|
||||||
|
@ -1442,7 +1442,7 @@ def ParseFieldValue (Value):
|
||||||
# TokenSpace.PcdCName|VpdOffset[|VpdValue]
|
# TokenSpace.PcdCName|VpdOffset[|VpdValue]
|
||||||
# TokenSpace.PcdCName|VpdOffset[|MaxSize[|VpdValue]]
|
# TokenSpace.PcdCName|VpdOffset[|MaxSize[|VpdValue]]
|
||||||
# 5. Dynamic HII:
|
# 5. Dynamic HII:
|
||||||
# TokenSpace.PcdCName|HiiString|VaiableGuid|VariableOffset[|HiiValue]
|
# TokenSpace.PcdCName|HiiString|VariableGuid|VariableOffset[|HiiValue]
|
||||||
# PCD value needs to be located in such kind of string, and the PCD value might be an expression in which
|
# PCD value needs to be located in such kind of string, and the PCD value might be an expression in which
|
||||||
# there might have "|" operator, also in string value.
|
# there might have "|" operator, also in string value.
|
||||||
#
|
#
|
||||||
|
@ -1458,50 +1458,33 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''):
|
||||||
FieldList = AnalyzePcdExpression(Setting)
|
FieldList = AnalyzePcdExpression(Setting)
|
||||||
|
|
||||||
IsValid = True
|
IsValid = True
|
||||||
if PcdType in (MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE, MODEL_PCD_FEATURE_FLAG):
|
if PcdType in (MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE, MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):
|
||||||
Value = FieldList[0]
|
Value = FieldList[0]
|
||||||
Size = ''
|
Size = ''
|
||||||
if len(FieldList) > 1:
|
if len(FieldList) > 1 and FieldList[1]:
|
||||||
if FieldList[1].upper().startswith("0X") or FieldList[1].isdigit():
|
DataType = FieldList[1]
|
||||||
Size = FieldList[1]
|
if FieldList[1] != TAB_VOID:
|
||||||
|
IsValid = False
|
||||||
|
if len(FieldList) > 2:
|
||||||
|
Size = FieldList[2]
|
||||||
|
if IsValid:
|
||||||
|
if DataType == "":
|
||||||
|
IsValid = (len(FieldList) <= 1)
|
||||||
else:
|
else:
|
||||||
DataType = FieldList[1]
|
IsValid = (len(FieldList) <= 3)
|
||||||
|
|
||||||
if len(FieldList) > 2:
|
|
||||||
Size = FieldList[2]
|
|
||||||
if DataType == "":
|
|
||||||
IsValid = (len(FieldList) <= 1)
|
|
||||||
else:
|
|
||||||
IsValid = (len(FieldList) <= 3)
|
|
||||||
# Value, Size = ParseFieldValue(Value)
|
|
||||||
if Size:
|
if Size:
|
||||||
try:
|
try:
|
||||||
int(Size, 16) if Size.upper().startswith("0X") else int(Size)
|
int(Size, 16) if Size.upper().startswith("0X") else int(Size)
|
||||||
except:
|
except:
|
||||||
IsValid = False
|
IsValid = False
|
||||||
Size = -1
|
Size = -1
|
||||||
return [str(Value), '', str(Size)], IsValid, 0
|
return [str(Value), DataType, str(Size)], IsValid, 0
|
||||||
elif PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):
|
elif PcdType == MODEL_PCD_FEATURE_FLAG:
|
||||||
Value = FieldList[0]
|
Value = FieldList[0]
|
||||||
Size = Type = ''
|
Size = ''
|
||||||
if len(FieldList) > 1:
|
IsValid = (len(FieldList) <= 1)
|
||||||
Type = FieldList[1]
|
return [Value, DataType, str(Size)], IsValid, 0
|
||||||
else:
|
|
||||||
Type = DataType
|
|
||||||
if len(FieldList) > 2:
|
|
||||||
Size = FieldList[2]
|
|
||||||
if DataType == "":
|
|
||||||
IsValid = (len(FieldList) <= 1)
|
|
||||||
else:
|
|
||||||
IsValid = (len(FieldList) <= 3)
|
|
||||||
|
|
||||||
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 = ''
|
||||||
|
|
|
@ -897,7 +897,7 @@ 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 PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT, MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE):
|
||||||
if self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() != ValueList[1].strip():
|
if self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() != ValueList[1].strip():
|
||||||
EdkLogger.error('build', FORMAT_INVALID, "Pcd datumtype used in DSC file is not the same as its declaration in DEC file.", File=self.MetaFile, Line=LineNo,
|
EdkLogger.error('build', FORMAT_INVALID, "Pcd datumtype used in DSC file is not the same as its declaration in DEC file.", File=self.MetaFile, Line=LineNo,
|
||||||
ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))
|
ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))
|
||||||
|
|
|
@ -1611,6 +1611,10 @@ class DscParser(MetaFileParser):
|
||||||
|
|
||||||
ValList, Valid, Index = AnalyzeDscPcd(self._ValueList[2], self._ItemType)
|
ValList, Valid, Index = AnalyzeDscPcd(self._ValueList[2], self._ItemType)
|
||||||
if not Valid:
|
if not Valid:
|
||||||
|
if self._ItemType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT, MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE):
|
||||||
|
if ValList[1] != TAB_VOID and ValList[2]:
|
||||||
|
EdkLogger.error('build', FORMAT_INVALID, "Pcd format incorrect. Only VOID* type PCD need the maxsize info.", File=self._FileWithError,
|
||||||
|
Line=self._LineIndex + 1, ExtraData="%s.%s|%s" % (self._ValueList[0], self._ValueList[1], self._ValueList[2]))
|
||||||
EdkLogger.error('build', FORMAT_INVALID, "Pcd format incorrect.", File=self._FileWithError, Line=self._LineIndex + 1,
|
EdkLogger.error('build', FORMAT_INVALID, "Pcd format incorrect.", File=self._FileWithError, Line=self._LineIndex + 1,
|
||||||
ExtraData="%s.%s|%s" % (self._ValueList[0], self._ValueList[1], self._ValueList[2]))
|
ExtraData="%s.%s|%s" % (self._ValueList[0], self._ValueList[1], self._ValueList[2]))
|
||||||
PcdValue = ValList[Index]
|
PcdValue = ValList[Index]
|
||||||
|
|
Loading…
Reference in New Issue