]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Add check only VOID* type Pcd need the maxsize info
authorzhijufan <zhijux.fan@intel.com>
Thu, 23 Aug 2018 04:40:37 +0000 (12:40 +0800)
committerYonghong Zhu <yonghong.zhu@intel.com>
Tue, 28 Aug 2018 06:00:06 +0000 (14:00 +0800)
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>
BaseTools/Source/Python/Common/Misc.py
BaseTools/Source/Python/Workspace/DscBuildData.py
BaseTools/Source/Python/Workspace/MetaFileParser.py

index 74a5f0bca5c22d75d9e4133449a54e909830f04c..5a63c83a2a0c3dcfb580f248a36fe18aaa7955f3 100644 (file)
@@ -1432,9 +1432,9 @@ def ParseFieldValue (Value):
 ## AnalyzeDscPcd\r
 #\r
 #  Analyze DSC PCD value, since there is no data type info in DSC\r
-#  This fuction is used to match functions (AnalyzePcdData) used for retrieving PCD value from database\r
+#  This function is used to match functions (AnalyzePcdData) used for retrieving PCD value from database\r
 #  1. Feature flag: TokenSpace.PcdCName|PcdValue\r
-#  2. Fix and Patch:TokenSpace.PcdCName|PcdValue[|MaxSize]\r
+#  2. Fix and Patch:TokenSpace.PcdCName|PcdValue[|VOID*[|MaxSize]]\r
 #  3. Dynamic default:\r
 #     TokenSpace.PcdCName|PcdValue[|VOID*[|MaxSize]]\r
 #     TokenSpace.PcdCName|PcdValue\r
@@ -1442,7 +1442,7 @@ def ParseFieldValue (Value):
 #     TokenSpace.PcdCName|VpdOffset[|VpdValue]\r
 #     TokenSpace.PcdCName|VpdOffset[|MaxSize[|VpdValue]]\r
 #  5. Dynamic HII:\r
-#     TokenSpace.PcdCName|HiiString|VaiableGuid|VariableOffset[|HiiValue]\r
+#     TokenSpace.PcdCName|HiiString|VariableGuid|VariableOffset[|HiiValue]\r
 #  PCD value needs to be located in such kind of string, and the PCD value might be an expression in which\r
 #    there might have "|" operator, also in string value.\r
 #\r
@@ -1458,42 +1458,20 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''):
     FieldList = AnalyzePcdExpression(Setting)\r
 \r
     IsValid = True\r
-    if PcdType in (MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE, MODEL_PCD_FEATURE_FLAG):\r
+    if PcdType in (MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE, MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):\r
         Value = FieldList[0]\r
         Size = ''\r
-        if len(FieldList) > 1:\r
-            if FieldList[1].upper().startswith("0X") or FieldList[1].isdigit():\r
-                Size = FieldList[1]\r
-            else:\r
-                DataType = FieldList[1]\r
-\r
-        if len(FieldList) > 2:\r
-            Size = FieldList[2]\r
-        if DataType == "":\r
-            IsValid = (len(FieldList) <= 1)\r
-        else:\r
-            IsValid = (len(FieldList) <= 3)\r
-#         Value, Size = ParseFieldValue(Value)\r
-        if Size:\r
-            try:\r
-                int(Size, 16) if Size.upper().startswith("0X") else int(Size)\r
-            except:\r
+        if len(FieldList) > 1 and FieldList[1]:\r
+            DataType = FieldList[1]\r
+            if FieldList[1] != TAB_VOID:\r
                 IsValid = False\r
-                Size = -1\r
-        return [str(Value), '', str(Size)], IsValid, 0\r
-    elif PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):\r
-        Value = FieldList[0]\r
-        Size = Type = ''\r
-        if len(FieldList) > 1:\r
-            Type = FieldList[1]\r
-        else:\r
-            Type = DataType\r
         if len(FieldList) > 2:\r
             Size = FieldList[2]\r
-        if DataType == "":\r
-            IsValid = (len(FieldList) <= 1)\r
-        else:\r
-            IsValid = (len(FieldList) <= 3)\r
+        if IsValid:\r
+            if DataType == "":\r
+                IsValid = (len(FieldList) <= 1)\r
+            else:\r
+                IsValid = (len(FieldList) <= 3)\r
 \r
         if Size:\r
             try:\r
@@ -1501,7 +1479,12 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''):
             except:\r
                 IsValid = False\r
                 Size = -1\r
-        return [Value, Type, str(Size)], IsValid, 0\r
+        return [str(Value), DataType, str(Size)], IsValid, 0\r
+    elif PcdType == MODEL_PCD_FEATURE_FLAG:\r
+        Value = FieldList[0]\r
+        Size = ''\r
+        IsValid = (len(FieldList) <= 1)\r
+        return [Value, DataType, str(Size)], IsValid, 0\r
     elif PcdType in (MODEL_PCD_DYNAMIC_VPD, MODEL_PCD_DYNAMIC_EX_VPD):\r
         VpdOffset = FieldList[0]\r
         Value = Size = ''\r
index a4ad53ee1558b388d8a64a6b38977b825161f4d0..748452623fd36c96e179edeaf1d64b5cdd88dc27 100644 (file)
@@ -897,7 +897,7 @@ class DscBuildData(PlatformBuildClassObject):
             if not Valid:\r
                 EdkLogger.error('build', FORMAT_INVALID, ErrStr, File=self.MetaFile, Line=LineNo,\r
                                 ExtraData="%s.%s" % (TokenSpaceGuid, PcdCName))\r
-            if PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):\r
+            if PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT, MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE):\r
                 if self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() != ValueList[1].strip():\r
                     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,\r
                                 ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))\r
index 7bfe0933a1ee01bde78fb5f064607584fb6d9226..79e3180d5e77d79f867c9da239807e84854c6fd0 100644 (file)
@@ -1611,6 +1611,10 @@ class DscParser(MetaFileParser):
 \r
         ValList, Valid, Index = AnalyzeDscPcd(self._ValueList[2], self._ItemType)\r
         if not Valid:\r
+            if self._ItemType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT, MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE):\r
+                if ValList[1] != TAB_VOID and ValList[2]:\r
+                    EdkLogger.error('build', FORMAT_INVALID, "Pcd format incorrect. Only VOID* type PCD need the maxsize info.", File=self._FileWithError,\r
+                                    Line=self._LineIndex + 1, ExtraData="%s.%s|%s" % (self._ValueList[0], self._ValueList[1], self._ValueList[2]))\r
             EdkLogger.error('build', FORMAT_INVALID, "Pcd format incorrect.", File=self._FileWithError, Line=self._LineIndex + 1,\r
                             ExtraData="%s.%s|%s" % (self._ValueList[0], self._ValueList[1], self._ValueList[2]))\r
         PcdValue = ValList[Index]\r