]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/GenFds/FdfParser.py
Sync BaseTools Branch (version r2362) to EDKII main trunk.
[mirror_edk2.git] / BaseTools / Source / Python / GenFds / FdfParser.py
index 6a9e5b7b4035e6e01a389145ae91b7fed3b72b32..4f555e32bbaea27de65ee3f9cfc9899a73db24e2 100644 (file)
@@ -1690,9 +1690,13 @@ class FdfParser:
             self.__UndoToken()\r
             self.__GetRegionFileType( RegionObj)\r
 \r
-        else:\r
+        elif self.__Token == "DATA":\r
             self.__UndoToken()\r
             self.__GetRegionDataType( RegionObj)\r
+        else:\r
+            raise Warning("A valid region type was not found. "\r
+                          "Valid types are [SET, FV, CAPSULE, FILE, DATA]. This error occurred",\r
+                          self.FileName, self.CurrentLineNumber)\r
 \r
         return True\r
 \r
@@ -1929,6 +1933,8 @@ class FdfParser:
         self.__GetSetStatements(FvObj)\r
         \r
         self.__GetFvBaseAddress(FvObj)\r
+        \r
+        self.__GetFvForceRebase(FvObj)\r
 \r
         self.__GetFvAlignment(FvObj)\r
 \r
@@ -2006,11 +2012,42 @@ class FdfParser:
         IsValidBaseAddrValue = re.compile('^0[x|X][0-9a-fA-F]+')\r
 \r
         if not IsValidBaseAddrValue.match(self.__Token.upper()):\r
-            raise Warning("Unknown alignment value '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
+            raise Warning("Unknown FV base address value '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
         Obj.FvBaseAddress = self.__Token\r
         return True    \r
     \r
+    ## __GetFvForceRebase() method\r
+    #\r
+    #   Get FvForceRebase for FV\r
+    #\r
+    #   @param  self        The object pointer\r
+    #   @param  Obj         for whom FvForceRebase is got\r
+    #   @retval True        Successfully find a FvForceRebase statement\r
+    #   @retval False       Not able to find a FvForceRebase statement\r
+    #\r
+    def __GetFvForceRebase(self, Obj):\r
+\r
+        if not self.__IsKeyword("FvForceRebase"):\r
+            return False\r
+\r
+        if not self.__IsToken( "="):\r
+            raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
+\r
+        if not self.__GetNextToken():\r
+            raise Warning("expected FvForceRebase value", self.FileName, self.CurrentLineNumber)\r
 \r
+        if self.__Token.upper() not in ["TRUE", "FALSE", "0", "0X0", "0X00", "1", "0X1", "0X01"]:\r
+            raise Warning("Unknown FvForceRebase value '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
+        \r
+        if self.__Token.upper() in ["TRUE", "1", "0X1", "0X01"]:\r
+            Obj.FvForceRebase = True\r
+        elif self.__Token.upper() in ["FALSE", "0", "0X0", "0X00"]:\r
+            Obj.FvForceRebase = False\r
+        else:\r
+            Obj.FvForceRebase = None\r
+           \r
+        return True\r
+    \r
     ## __GetFvAttributes() method\r
     #\r
     #   Get attributes for FV\r
@@ -2215,7 +2252,10 @@ class FdfParser:
                 ffsInf.KeepReloc = True\r
             else:\r
                 raise Warning("Unknown reloc strip flag '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
-\r
+        \r
+        ffsInf.CurrentLineNum = self.CurrentLineNumber\r
+        ffsInf.CurrentLineContent = self.__CurrentLine()\r
+        \r
         if ForCapsule:\r
             capsuleFfs = CapsuleData.CapsuleFfs()\r
             capsuleFfs.Ffs = ffsInf\r
@@ -2325,7 +2365,10 @@ class FdfParser:
                 self.__Token = 'PCD('+PcdPair[1]+'.'+PcdPair[0]+')'\r
                 \r
         FfsFileObj.NameGuid = self.__Token\r
-\r
+        \r
+        FfsFileObj.CurrentLineNum = self.CurrentLineNumber\r
+        FfsFileObj.CurrentLineContent = self.__CurrentLine()\r
+        \r
         self.__GetFilePart( FfsFileObj, MacroDict.copy())\r
 \r
         if ForCapsule:\r
@@ -3922,7 +3965,7 @@ class FdfParser:
                     Overrides.PciRevision = self.__Token\r
                     continue\r
 \r
-                if self.__IsKeyword( "COMPRESS"):\r
+                if self.__IsKeyword( "PCI_COMPRESS"):\r
                     if not self.__IsToken( "="):\r
                         raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
                     if not self.__GetNextToken():\r