]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Sync BaseTools Trunk (version r2524) to EDKII main trunk.
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 23 May 2012 08:27:14 +0000 (08:27 +0000)
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 23 May 2012 08:27:14 +0000 (08:27 +0000)
Signed-off-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Liu Yingke <yingke.d.liu@intel.com>
Reviewed-by: Yurui Zeng <yurui.zeng@intel.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13353 6f19259b-4bc3-4df7-8a09-765794883524

38 files changed:
BaseTools/Bin/Win32/BPDG.exe
BaseTools/Bin/Win32/BootSectImage.exe
BaseTools/Bin/Win32/EfiLdrImage.exe
BaseTools/Bin/Win32/EfiRom.exe
BaseTools/Bin/Win32/GenBootSector.exe
BaseTools/Bin/Win32/GenCrc32.exe
BaseTools/Bin/Win32/GenDepex.exe
BaseTools/Bin/Win32/GenFds.exe
BaseTools/Bin/Win32/GenFfs.exe
BaseTools/Bin/Win32/GenFv.exe
BaseTools/Bin/Win32/GenFw.exe
BaseTools/Bin/Win32/GenPage.exe
BaseTools/Bin/Win32/GenPatchPcdTable.exe
BaseTools/Bin/Win32/GenSec.exe
BaseTools/Bin/Win32/GenVtf.exe
BaseTools/Bin/Win32/LzmaCompress.exe
BaseTools/Bin/Win32/PatchPcdValue.exe
BaseTools/Bin/Win32/Split.exe
BaseTools/Bin/Win32/TargetTool.exe
BaseTools/Bin/Win32/TianoCompress.exe
BaseTools/Bin/Win32/Trim.exe
BaseTools/Bin/Win32/UPT.exe
BaseTools/Bin/Win32/VfrCompile.exe
BaseTools/Bin/Win32/VolInfo.exe
BaseTools/Bin/Win32/build.exe
BaseTools/Conf/tools_def.template
BaseTools/Source/C/GenSec/GenSec.c
BaseTools/Source/C/Include/Common/BuildVersion.h
BaseTools/Source/Python/AutoGen/AutoGen.py
BaseTools/Source/Python/BPDG/GenVpd.py
BaseTools/Source/Python/Common/BuildVersion.py
BaseTools/Source/Python/Common/Expression.py
BaseTools/Source/Python/CommonDataClass/FdfClass.py
BaseTools/Source/Python/GenFds/FdfParser.py
BaseTools/Source/Python/GenFds/GuidSection.py
BaseTools/Source/Python/UPT/BuildVersion.py
BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
BaseTools/Source/Python/build/BuildReport.py

index 0950a85a0676c560822ef146df2bb48eb5d48151..9f387620844d0abde02c5edd5420d915f1f6b024 100644 (file)
Binary files a/BaseTools/Bin/Win32/BPDG.exe and b/BaseTools/Bin/Win32/BPDG.exe differ
index 77c2ca6f0ce881312d3f406267155910aa2f662e..72bb94f3ccacb0bd5320fd1a59a5645674668742 100755 (executable)
Binary files a/BaseTools/Bin/Win32/BootSectImage.exe and b/BaseTools/Bin/Win32/BootSectImage.exe differ
index 0014483a35c398896340042fed0be172c42d083f..f4a0ef8f9f206ba6481563fb611f86f2acb49a85 100755 (executable)
Binary files a/BaseTools/Bin/Win32/EfiLdrImage.exe and b/BaseTools/Bin/Win32/EfiLdrImage.exe differ
index 34c01a729257b2322bdf2bf4b9dd73cf176fe771..86ec6bb4cf55715c822ae6d4a5f0a299e1588b3b 100755 (executable)
Binary files a/BaseTools/Bin/Win32/EfiRom.exe and b/BaseTools/Bin/Win32/EfiRom.exe differ
index e8315a3fe7aeee8aef29fa2c8f38395da3566de2..2b8ebe60e2809e11d4b5305427dc48535d9f9de5 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenBootSector.exe and b/BaseTools/Bin/Win32/GenBootSector.exe differ
index 7874a65e47cea967dbe361fe1dd2da466c697964..14b0677c9ec70df9a7d074b91295d117b59f67d7 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenCrc32.exe and b/BaseTools/Bin/Win32/GenCrc32.exe differ
index 3e477a27888c6e3b264a13792726b2017e5b364d..d4d56965e8ff919d98a965d4740b09e0cb62c581 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenDepex.exe and b/BaseTools/Bin/Win32/GenDepex.exe differ
index be4fccacfbdad90d4d62d7d44517d9d85f3047f3..88b88d63be1b5d25aa92549e3f4ce0a224532949 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFds.exe and b/BaseTools/Bin/Win32/GenFds.exe differ
index f237967923010e5012bbb3f4462e80d1ed547eed..7d33a46a1b9fa0e7d8ab494665b54865e5261c11 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFfs.exe and b/BaseTools/Bin/Win32/GenFfs.exe differ
index 46231ff9f3a40757a019179e5fb1c033eb156828..633cac7028fe6dfea0c8f50c2a11d21629fc69e0 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFv.exe and b/BaseTools/Bin/Win32/GenFv.exe differ
index 353a2f4447b626d51d4e0c4ee4d87b6bc47f873f..2b1fd01f9c9a739031f08ac72319d8e14d09eac0 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFw.exe and b/BaseTools/Bin/Win32/GenFw.exe differ
index 40c491062c8942346dfb7b6c6a1120229de17500..3449ba54575de51e2e1f005f6776097637ce78e2 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenPage.exe and b/BaseTools/Bin/Win32/GenPage.exe differ
index 1b84df80de52eebfc4d49f1b686dda06ca6c5239..512134c08ded221916aac982639c18803f4af769 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenPatchPcdTable.exe and b/BaseTools/Bin/Win32/GenPatchPcdTable.exe differ
index c4b92a47c710c567e315609088f3742fecd11e8a..40fbe7ab02e30ae69eaafc4e5b65bc49b3a2044b 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenSec.exe and b/BaseTools/Bin/Win32/GenSec.exe differ
index 1bef934cfa4119cf12a5d158857bba3660b0ea7c..1448486c8975f9e73460d0f0dc59362650f93308 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenVtf.exe and b/BaseTools/Bin/Win32/GenVtf.exe differ
index 82780efc77dce8f51566b4118dababda5cc41cae..c5b07a40cace25d2a39d48d3e981d10809405876 100755 (executable)
Binary files a/BaseTools/Bin/Win32/LzmaCompress.exe and b/BaseTools/Bin/Win32/LzmaCompress.exe differ
index 328651d7db8cecfe43ec2bfe6c4023c3111c6bc7..d77b67a7792cb9b9ad5537a2a4c5c93fb78ccca8 100755 (executable)
Binary files a/BaseTools/Bin/Win32/PatchPcdValue.exe and b/BaseTools/Bin/Win32/PatchPcdValue.exe differ
index f5907b04cfc61e3366cd126dd200ec265808d9be..e50d48dfdf955f70ad34b26882da6fac8565617d 100755 (executable)
Binary files a/BaseTools/Bin/Win32/Split.exe and b/BaseTools/Bin/Win32/Split.exe differ
index 0170468cfbaf47ea323390f99b85a0839ada7ec8..f5eeef9281543f51e85fd0d752d6b970e8a4db8b 100755 (executable)
Binary files a/BaseTools/Bin/Win32/TargetTool.exe and b/BaseTools/Bin/Win32/TargetTool.exe differ
index 25706822617d2e4c4712f27df523e13bcff5ba38..da6b82cfa2bee88a2b712f0135ab67e5be263243 100755 (executable)
Binary files a/BaseTools/Bin/Win32/TianoCompress.exe and b/BaseTools/Bin/Win32/TianoCompress.exe differ
index 8a3cfb7f9611d5d6ccca0dd2941da6b8dddb88e7..418818b1b6dd866874a2acb317587069977e763f 100755 (executable)
Binary files a/BaseTools/Bin/Win32/Trim.exe and b/BaseTools/Bin/Win32/Trim.exe differ
index 7939ee97d29ec4db06b2715c2006cfb85751cb31..03d6679fe3eb6e1e11c266d2fd4fa61c0a7617b6 100644 (file)
Binary files a/BaseTools/Bin/Win32/UPT.exe and b/BaseTools/Bin/Win32/UPT.exe differ
index dd7431b741a1ae5ed4756c2e1b2478baf14c691f..91681d800ee2a41472cab2058cddbf8a04d35e2b 100755 (executable)
Binary files a/BaseTools/Bin/Win32/VfrCompile.exe and b/BaseTools/Bin/Win32/VfrCompile.exe differ
index fa7168f8ede0777245a6a3eba0305dfd390c9e0a..9655614239aae0ca8f3683be233b4624d159056c 100755 (executable)
Binary files a/BaseTools/Bin/Win32/VolInfo.exe and b/BaseTools/Bin/Win32/VolInfo.exe differ
index 01ee7a810d2b3160369943b6c4a5961400309d64..fc43d62866687cfbeb728f5f51da41a47a3a4bf0 100755 (executable)
Binary files a/BaseTools/Bin/Win32/build.exe and b/BaseTools/Bin/Win32/build.exe differ
index 738cd650523889aebe7f1c8b2a7e94f3924a2405..a82404a14430d9c4663db0c8320c35250a23ab10 100644 (file)
@@ -4506,12 +4506,12 @@ RELEASE_XCODE32_IA32_CC_FLAGS   = -arch i386 -Oz -combine -mms-bitfields  -fshor
 # X64 definitions - still a work in progress. This tool chain does not produce\r
 # the correct ABI, it is just used to compile the code....\r
 ##################\r
-*_XCODE32_X64_CC_PATH       = gcc-4.2\r
+*_XCODE32_X64_CC_PATH       = gcc\r
 *_XCODE32_X64_SLINK_PATH    = libtool\r
 *_XCODE32_X64_DLINK_PATH    = ld\r
 *_XCODE32_X64_ASM_PATH      = as\r
-*_XCODE32_X64_PP_PATH       = gcc-4.2\r
-*_XCODE32_X64_VFRPP_PATH    = gcc-4.2\r
+*_XCODE32_X64_PP_PATH       = gcc\r
+*_XCODE32_X64_VFRPP_PATH    = gcc\r
 *_XCODE32_X64_ASL_PATH     = iasl\r
 *_XCODE32_X64_ASLCC_PATH   = gcc\r
 *_XCODE32_X64_ASLPP_PATH   = gcc\r
index 79e8e1bebb0314b877735d0bbe515dab5cb0b3d1..d6b22aee86b7ca9604232b83f985f1df3b8129bf 100644 (file)
@@ -785,7 +785,7 @@ Returns:
   Offset      = 0;\r
   FileBuffer  = NULL;\r
 \r
-  if (CompareGuid (VendorGuid, &mEfiCrc32SectionGuid) == 0) {\r
+  if (CompareGuid (VendorGuid, &mZeroGuid) == 0) {\r
     Offset = sizeof (CRC32_SECTION_HEADER);\r
   } else {\r
     Offset = sizeof (EFI_GUID_DEFINED_SECTION);\r
@@ -837,7 +837,7 @@ Returns:
   //\r
   // Now data is in FileBuffer + Offset\r
   //\r
-  if (CompareGuid (VendorGuid, &mEfiCrc32SectionGuid) == 0) {\r
+  if (CompareGuid (VendorGuid, &mZeroGuid) == 0) {\r
     //\r
     // Default Guid section is CRC32.\r
     //\r
@@ -1222,10 +1222,6 @@ Returns:
     VerboseMsg ("Compress method is %s", mCompressionTypeName [SectCompSubType]);\r
   } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_GUID_DEFINED]) == 0) {\r
     SectType     = EFI_SECTION_GUID_DEFINED;\r
-\r
-    if (CompareGuid (&VendorGuid, &mZeroGuid) == 0) {\r
-      memcpy (&VendorGuid, &mEfiCrc32SectionGuid, sizeof (EFI_GUID));\r
-    }\r
     \r
     if ((SectGuidAttribute & EFI_GUIDED_SECTION_NONE) != 0) {\r
       //\r
@@ -1349,7 +1345,7 @@ Returns:
     break;\r
 \r
   case EFI_SECTION_GUID_DEFINED:\r
-    if (InputFileAlign != NULL && (CompareGuid (&VendorGuid, &mEfiCrc32SectionGuid) != 0)) {\r
+    if (InputFileAlign != NULL && (CompareGuid (&VendorGuid, &mZeroGuid) != 0)) {\r
       //\r
       // Only process alignment for the default known CRC32 guided section.\r
       // For the unknown guided section, the alignment is processed when the dummy all section (EFI_SECTION_ALL) is generated.\r
index f9144e5f018f2a38cca8492d28abfe2bc4fe485c..5b50a5c28e711fcf6c22c61716545d87ab6a64d4 100644 (file)
@@ -14,4 +14,4 @@
 \r
 **/\r
 \r
-#define __BUILD_VERSION "Build 2518"\r
+#define __BUILD_VERSION "Build 2524"\r
index 2f38c6afd5537c61e328cda689d5001927775565..3261892bc55dbdcf8c9f883b716dbfc4cb7bdda1 100644 (file)
@@ -292,12 +292,12 @@ class WorkspaceAutoGen(AutoGen):
         for Arch in self.ArchList:\r
             Platform = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain]\r
 \r
-            DecPcds = set()\r
+            DecPcds = {}\r
             PGen = PlatformAutoGen(self, self.MetaFile, Target, Toolchain, Arch)\r
             Pkgs = PGen.PackageList\r
             for Pkg in Pkgs:\r
-                for Pcd in Pkg.Pcds.keys():\r
-                    DecPcds.add((Pcd[0], Pcd[1]))\r
+                for Pcd in Pkg.Pcds:\r
+                    DecPcds[Pcd[0], Pcd[1]] = Pkg.Pcds[Pcd]\r
             Platform.IsPlatformPcdDeclared(DecPcds)\r
 \r
             Platform.SkuName = self.SkuId\r
index bbe44eefa4df6d7989f26af0195d9b7ea7e234d0..cc4985062e4d977288092c6704297fe88e6baf58 100644 (file)
@@ -226,7 +226,7 @@ class PcdEntry:
         \r
         for Index in xrange(len(ValueList)):\r
             Value = None\r
-            if ValueList[Index].startswith('0x'):\r
+            if ValueList[Index].lower().startswith('0x'):\r
                 # translate hex value\r
                 try:\r
                     Value = int(ValueList[Index], 16)\r
index c5dae6daa460af4a767d79b46f439b57702ee3f4..0323fafa3cf9e1f26dc08c8e2147a10e65ac9b8b 100644 (file)
@@ -13,4 +13,4 @@
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
-gBUILD_VERSION = "Build 2518"\r
+gBUILD_VERSION = "Build 2524"\r
index a4853b78a4f5f62dc3be6863610b5ed575ad9985..80fad7563d17909bcdde8d6b6302ec60142b5493 100644 (file)
@@ -256,9 +256,12 @@ class ValueExpression(object):
             if self.__IsNumberToken():\r
                 return self._Expr\r
 \r
-            Token = self._GetToken()\r
-            if type(Token) == type('') and Token.startswith('{') and Token.endswith('}') and self._Idx >= self._Len:\r
-                return self._Expr\r
+            try:\r
+                Token = self._GetToken()\r
+                if type(Token) == type('') and Token.startswith('{') and Token.endswith('}') and self._Idx >= self._Len:\r
+                    return self._Expr\r
+            except BadExpression:\r
+                pass\r
 \r
             self._Idx = 0\r
             self._Token = ''\r
index a459cad8bad896e2c58db47a87481ef0d0f7bb6a..996468d6aac251e0576e929f10fc62318b8e80da 100644 (file)
@@ -249,6 +249,7 @@ class GuidSectionClassObject (SectionClassObject) :
         self.SectionType = None\r
         self.ProcessRequired = False\r
         self.AuthStatusValid = False\r
+        self.ExtraHeaderSize = -1\r
         self.FvAddr = []\r
         self.FvParentAddr = None\r
         self.IncludeFvSection = False\r
index dc5c4fa034c5d95bdcb6fa1ea838a7e47014f10c..c9c620d853803170fe056ffd5946ce786e7ea936 100644 (file)
@@ -2867,6 +2867,7 @@ class FdfParser:
             GuidSectionObj.SectionType = "GUIDED"\r
             GuidSectionObj.ProcessRequired = AttribDict["PROCESSING_REQUIRED"]\r
             GuidSectionObj.AuthStatusValid = AttribDict["AUTH_STATUS_VALID"]\r
+            GuidSectionObj.ExtraHeaderSize = AttribDict["EXTRA_HEADER_SIZE"]\r
             # Recursive sections...\r
             while True:\r
                 IsLeafSection = self.__GetLeafSection(GuidSectionObj)\r
@@ -2894,23 +2895,26 @@ class FdfParser:
         AttribDict = {}\r
         AttribDict["PROCESSING_REQUIRED"] = "NONE"\r
         AttribDict["AUTH_STATUS_VALID"] = "NONE"\r
-        if self.__IsKeyword("PROCESSING_REQUIRED") or self.__IsKeyword("AUTH_STATUS_VALID"):\r
+        AttribDict["EXTRA_HEADER_SIZE"] = -1\r
+        while self.__IsKeyword("PROCESSING_REQUIRED") or self.__IsKeyword("AUTH_STATUS_VALID") \\r
+            or self.__IsKeyword("EXTRA_HEADER_SIZE"):\r
             AttribKey = self.__Token\r
 \r
             if not self.__IsToken("="):\r
                 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
 \r
-            if not self.__GetNextToken() or self.__Token.upper() not in ("TRUE", "FALSE", "1", "0"):\r
-                raise Warning("expected TRUE/FALSE (1/0)", self.FileName, self.CurrentLineNumber)\r
-            AttribDict[AttribKey] = self.__Token\r
-\r
-        if self.__IsKeyword("PROCESSING_REQUIRED") or self.__IsKeyword("AUTH_STATUS_VALID"):\r
-            AttribKey = self.__Token\r
-\r
-            if not self.__IsToken("="):\r
-                raise Warning("expected '='")\r
-\r
-            if not self.__GetNextToken() or self.__Token.upper() not in ("TRUE", "FALSE", "1", "0"):\r
+            if not self.__GetNextToken():\r
+                raise Warning("expected TRUE(1)/FALSE(0)/Number", self.FileName, self.CurrentLineNumber)\r
+            elif AttribKey == "EXTRA_HEADER_SIZE":\r
+                Base = 10\r
+                if self.__Token[0:2].upper() == "0X":\r
+                    Base = 16\r
+                try:\r
+                    AttribDict[AttribKey] = int(self.__Token, Base)\r
+                    continue\r
+                except ValueError:\r
+                    raise Warning("expected Number", self.FileName, self.CurrentLineNumber)\r
+            elif self.__Token.upper() not in ("TRUE", "FALSE", "1", "0"):\r
                 raise Warning("expected TRUE/FALSE (1/0)", self.FileName, self.CurrentLineNumber)\r
             AttribDict[AttribKey] = self.__Token\r
 \r
@@ -3712,6 +3716,7 @@ class FdfParser:
             GuidSectionObj.SectionType = "GUIDED"\r
             GuidSectionObj.ProcessRequired = AttribDict["PROCESSING_REQUIRED"]\r
             GuidSectionObj.AuthStatusValid = AttribDict["AUTH_STATUS_VALID"]\r
+            GuidSectionObj.ExtraHeaderSize = AttribDict["EXTRA_HEADER_SIZE"]\r
 \r
             # Efi sections...\r
             while True:\r
index bd95f567203d3aed6f1d79188485e483e4481ca9..36ad4f58ef8189f2cb13b2308179baea08b18138 100644 (file)
@@ -193,7 +193,10 @@ class GuidSection(GuidSectionClassObject) :
 \r
             Attribute = []\r
             HeaderLength = None\r
-            if self.ProcessRequired == "NONE":\r
+            if self.ExtraHeaderSize != -1:\r
+                HeaderLength = str(self.ExtraHeaderSize)\r
+\r
+            if self.ProcessRequired == "NONE" and HeaderLength == None:\r
                 if TempFileSize > InputFileSize and TempFileSize % 4 == 0:\r
                     FileHandleIn.seek(0)\r
                     BufferIn  = FileHandleIn.read()\r
@@ -218,7 +221,7 @@ class GuidSection(GuidSectionClassObject) :
             if self.ProcessRequired in ("TRUE", "1"):\r
                 if 'PROCESSING_REQUIRED' not in Attribute:\r
                     Attribute.append('PROCESSING_REQUIRED')\r
-                HeaderLength = None\r
+  \r
             if self.AuthStatusValid in ("TRUE", "1"):\r
                 Attribute.append('AUTH_STATUS_VALID')\r
             GenFdsGlobalVariable.GenerateSection(OutputFile, [TempFile], Section.Section.SectionType['GUIDED'],\r
index 1510430fe5ca32f5095009ad8320310f3ba46524..e2dca6130f8ef52aa1d2e4e629872285ac404deb 100644 (file)
@@ -17,4 +17,4 @@
 Build version information\r
 '''\r
 \r
-gBUILD_VERSION = "Build 2518"\r
+gBUILD_VERSION = "Build 2524"\r
index 16766d32dc38dacd18f9668a246d73d6ec3dd363..e5fb41a8e0e276750fcb28ca85e19b26e9b173da 100644 (file)
@@ -852,6 +852,21 @@ class DscBuildData(PlatformBuildClassObject):
                     EdkLogger.error('build', PARSER_ERROR,\r
                                     "Pcd (%s.%s) defined in DSC is not declared in DEC files." % (TokenSpaceGuid, PcdCName),\r
                                     File=self.MetaFile, Line=Dummy4)\r
+                PcdValue = ''\r
+                if PcdType in (MODEL_PCD_DYNAMIC_VPD, MODEL_PCD_DYNAMIC_EX_VPD):\r
+                    if DecPcds[PcdCName, TokenSpaceGuid].DatumType == "VOID*":\r
+                        PcdValue = AnalyzeVpdPcdData(Setting)[2]\r
+                    else:\r
+                        PcdValue = AnalyzeVpdPcdData(Setting)[1]\r
+                elif PcdType in (MODEL_PCD_DYNAMIC_HII, MODEL_PCD_DYNAMIC_EX_HII):\r
+                    PcdValue = AnalyzeHiiPcdData(Setting)[3]\r
+                else:\r
+                    PcdValue = AnalyzePcdData(Setting)[0]\r
+                if PcdValue:\r
+                    Valid, ErrStr = CheckPcdDatum(DecPcds[PcdCName, TokenSpaceGuid].DatumType, PcdValue)\r
+                    if not Valid:\r
+                        EdkLogger.error('build', FORMAT_INVALID, ErrStr, File=self.MetaFile, Line=Dummy4,\r
+                                    ExtraData="%s.%s" % (TokenSpaceGuid, PcdCName))\r
 \r
     _Macros             = property(_GetMacros)\r
     Arch                = property(_GetArch, _SetArch)\r
index e20131a3123f48a1b0d027d453c9b476cfbde306..d5ea3bd3e5fa077dc9c2e7eb7e98b480f43dfbcf 100644 (file)
@@ -39,6 +39,7 @@ from Common.DataType import TAB_SLASH
 from Common.DataType import TAB_SPACE_SPLIT\r
 from Common.DataType import TAB_BRG_PCD\r
 from Common.DataType import TAB_BRG_LIBRARY\r
+from Common.DataType import TAB_BACK_SLASH\r
 \r
 ## Pattern to extract contents in EDK DXS files\r
 gDxsDependencyPattern = re.compile(r"DEPENDENCY_START(.+)DEPENDENCY_END", re.DOTALL)\r
@@ -191,11 +192,11 @@ def FileLinesSplit(Content=None, MaxLength=None):
         while len(Line.rstrip()) > MaxLength:\r
             LineSpaceIndex = Line.rfind(TAB_SPACE_SPLIT, 0, MaxLength)\r
             LineSlashIndex = Line.rfind(TAB_SLASH, 0, MaxLength)\r
-            LineBreakIndex = MaxLength\r
-            if LineSpaceIndex > LineSlashIndex:\r
-                LineBreakIndex = LineSpaceIndex\r
-            elif LineSlashIndex > LineSpaceIndex:\r
-                LineBreakIndex = LineSlashIndex\r
+            LineBackSlashIndex = Line.rfind(TAB_BACK_SLASH, 0, MaxLength)\r
+            if max(LineSpaceIndex, LineSlashIndex, LineBackSlashIndex) > 0:\r
+                LineBreakIndex = max(LineSpaceIndex, LineSlashIndex, LineBackSlashIndex)\r
+            else:\r
+                LineBreakIndex = MaxLength\r
             NewContentList.append(Line[:LineBreakIndex])\r
             Line = Line[LineBreakIndex:]\r
         if Line:\r