Reviewed-by: Liming Gao <[email protected]> > -----Original Message----- > From: Feng, Bob C > Sent: Tuesday, March 26, 2019 5:34 PM > To: [email protected] > Cc: Feng, Bob C <[email protected]>; Gao, Liming <[email protected]> > Subject: [Patch] BaseTool: Fixed an issue of Structure PCD > > https://bugzilla.tianocore.org/show_bug.cgi?id=1665 > > Build fail when the structure pcd has > member of flexible size array > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Bob Feng <[email protected]> > Cc: Liming Gao <[email protected]> > --- > BaseTools/Source/Python/Workspace/DscBuildData.py | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) > > diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py > b/BaseTools/Source/Python/Workspace/DscBuildData.py > index 58286159db..129c0c950b 100644 > --- a/BaseTools/Source/Python/Workspace/DscBuildData.py > +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py > @@ -1777,21 +1777,21 @@ class DscBuildData(PlatformBuildClassObject): > Value = > ValueExpressionEx(FieldList[FieldName.strip(".")][0], TAB_VOID, > self._GuidDict)(True) > except BadExpression: > EdkLogger.error('Build', FORMAT_INVALID, "Invalid > value format for %s. From %s Line %d " % > (".".join((Pcd.TokenSpaceGuidCName, > Pcd.TokenCName, FieldName.strip('.'))), > FieldList[FieldName.strip(".")][1], FieldList[FieldName.strip(".")][2])) > Value, ValueSize = ParseFieldValue(Value) > - if not Pcd.IsArray: > + if not Pcd.IsArray(): > CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d / > __ARRAY_ELEMENT_SIZE(%s, %s) + ((%d %% > __ARRAY_ELEMENT_SIZE(%s, %s)) ? 1 : 0)); // From %s Line %d Value %s \n' % > (Pcd.DatumType, FieldName.strip("."), ValueSize, > Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, > FieldName.strip("."), FieldList[FieldName.strip(".")][1], > FieldList[FieldName.strip(".")][2], FieldList[FieldName.strip(".")][0]); > else: > NewFieldName = '' > FieldName_ori = FieldName.strip('.') > while '[' in FieldName: > NewFieldName = NewFieldName + FieldName.split('[', > 1)[0] + '[0]' > ArrayIndex = int(FieldName.split('[', > 1)[1].split(']', 1)[0]) > FieldName = FieldName.split(']', 1)[1] > FieldName = NewFieldName + FieldName > - while '[' in FieldName and not Pcd.IsArray: > + while '[' in FieldName and not Pcd.IsArray(): > FieldName = FieldName.rsplit('[', 1)[0] > CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d); > // From %s Line %d Value %s\n' % (Pcd.DatumType, > FieldName.strip("."), ArrayIndex + 1, FieldList[FieldName_ori][1], > FieldList[FieldName_ori][2], FieldList[FieldName_ori][0]) > for skuname in Pcd.SkuOverrideValues: > if skuname == TAB_COMMON: > continue > @@ -1809,21 +1809,21 @@ class DscBuildData(PlatformBuildClassObject): > Value = > ValueExpressionEx(FieldList[FieldName.strip(".")][0], TAB_VOID, > self._GuidDict)(True) > except BadExpression: > EdkLogger.error('Build', FORMAT_INVALID, > "Invalid value format for %s. From %s Line %d " % > > (".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName.strip('.'))), > FieldList[FieldName.strip(".")][1], FieldList[FieldName.strip(".")][2])) > Value, ValueSize = ParseFieldValue(Value) > - if not Pcd.IsArray: > + if not Pcd.IsArray(): > CApp = CApp + ' __FLEXIBLE_SIZE(*Size, > %s, %s, %d / __ARRAY_ELEMENT_SIZE(%s, %s) + > ((%d %% __ARRAY_ELEMENT_SIZE(%s, %s)) ? 1 : 0)); // From %s Line %d Value > %s\n' % (Pcd.DatumType, FieldName.strip("."), ValueSize, > Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, > FieldName.strip("."), FieldList[FieldName.strip(".")][1], > FieldList[FieldName.strip(".")][2], FieldList[FieldName.strip(".")][0]); > else: > NewFieldName = '' > FieldName_ori = FieldName.strip('.') > while '[' in FieldName: > NewFieldName = NewFieldName + > FieldName.split('[', 1)[0] + '[0]' > ArrayIndex = int(FieldName.split('[', > 1)[1].split(']', 1)[0]) > FieldName = FieldName.split(']', 1)[1] > FieldName = NewFieldName + FieldName > - while '[' in FieldName and not Pcd.IsArray: > + while '[' in FieldName and not Pcd.IsArray(): > FieldName = FieldName.rsplit('[', 1)[0] > CApp = CApp + ' __FLEXIBLE_SIZE(*Size, > %s, %s, %d); // From %s Line %d Value %s \n' % > (Pcd.DatumType, FieldName.strip("."), ArrayIndex + 1, > FieldList[FieldName_ori][1], FieldList[FieldName_ori][2], > FieldList[FieldName_ori][0]) > if Pcd.PcdFieldValueFromFdf: > CApp = CApp + "// From fdf \n" > for FieldName in Pcd.PcdFieldValueFromFdf: > @@ -1834,11 +1834,11 @@ class DscBuildData(PlatformBuildClassObject): > Value = > ValueExpressionEx(Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][0], > TAB_VOID, self._GuidDict)(True) > except BadExpression: > EdkLogger.error('Build', FORMAT_INVALID, "Invalid value > format for %s. From %s Line %d " % > (".".join((Pcd.TokenSpaceGuidCName, > Pcd.TokenCName, FieldName.strip('.'))), > Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][1], > Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][2])) > Value, ValueSize = ParseFieldValue(Value) > - if not Pcd.IsArray: > + if not Pcd.IsArray(): > CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d / > __ARRAY_ELEMENT_SIZE(%s, %s) + ((%d %% > __ARRAY_ELEMENT_SIZE(%s, %s)) ? 1 : 0)); // From %s Line %d Value %s\n' % > (Pcd.DatumType, FieldName.strip("."), ValueSize, > Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, > FieldName.strip("."), Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][1], > Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][2], > Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][0]); > else: > NewFieldName = '' > FieldName_ori = FieldName.strip('.') > while '[' in FieldName: > @@ -1859,21 +1859,21 @@ class DscBuildData(PlatformBuildClassObject): > Value = > ValueExpressionEx(Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0], > TAB_VOID, self._GuidDict)(True) > except BadExpression: > EdkLogger.error('Build', FORMAT_INVALID, "Invalid value > format for %s. From %s Line %d " % > (".".join((Pcd.TokenSpaceGuidCName, > Pcd.TokenCName, FieldName.strip('.'))), > Pcd.PcdFieldValueFromComm[FieldName.strip(".")][1], > Pcd.PcdFieldValueFromComm[FieldName.strip(".")][2])) > Value, ValueSize = ParseFieldValue(Value) > - if not Pcd.IsArray: > + if not Pcd.IsArray(): > CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d / > __ARRAY_ELEMENT_SIZE(%s, %s) + ((%d %% > __ARRAY_ELEMENT_SIZE(%s, %s)) ? 1 : 0)); // From %s Line %d Value %s\n' % > (Pcd.DatumType, FieldName.strip("."), ValueSize, > Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, > FieldName.strip("."), > Pcd.PcdFieldValueFromComm[FieldName.strip(".")][1], > Pcd.PcdFieldValueFromComm[FieldName.strip(".")][2], > Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0]); > else: > NewFieldName = '' > FieldName_ori = FieldName.strip('.') > while '[' in FieldName: > NewFieldName = NewFieldName + FieldName.split('[', 1)[0] > + '[0]' > ArrayIndex = int(FieldName.split('[', 1)[1].split(']', > 1)[0]) > FieldName = FieldName.split(']', 1)[1] > FieldName = NewFieldName + FieldName > - while '[' in FieldName and not Pcd.IsArray: > + while '[' in FieldName and not Pcd.IsArray(): > FieldName = FieldName.rsplit('[', 1)[0] > CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d); // > From %s Line %d Value %s \n' % (Pcd.DatumType, > FieldName.strip("."), ArrayIndex + 1, > Pcd.PcdFieldValueFromComm[FieldName_ori][1], > Pcd.PcdFieldValueFromComm[FieldName_ori][2], > Pcd.PcdFieldValueFromComm[FieldName_ori][0]) > if Pcd.GetPcdMaxSize(): > CApp = CApp + " *Size = (%d > *Size ? %d : *Size); // The Pcd > maxsize is %d \n" % (Pcd.GetPcdMaxSize(), > Pcd.GetPcdMaxSize(), Pcd.GetPcdMaxSize()) > CApp = CApp + "}\n" > -- > 2.20.1.windows.1
_______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

