Lines Matching refs:self

102     #   @param  self        The object pointer
107 def __init__(self, Str, File = None, Line = None):
110 self.FileName = FileLineTuple[0]
111 self.LineNumber = FileLineTuple[1]
112 self.Message = Str
113 self.ToolName = 'FdfParser'
115 def __str__(self):
116 return self.Message
124 # @param self The object pointer
127 def __init__(self, FileName, Line):
128 self.FileName = FileName
129 self.DefinedAtLine = Line
130 self.MacroName = None
131 self.MacroValue = None
140 # @param self The object pointer
143 def __init__(self, FileName):
144 self.FileName = FileName
145 self.FileLinesList = []
149 self.FileLinesList = fsock.readlines()
156 self.InsertStartLineNumber = None
157 self.InsertAdjust = 0
166 # @param self The object pointer
169 def __init__(self, FileName):
170 self.FileLinesList = []
174 self.FileLinesList = fsock.readlines()
182 self.PcdDict = {}
183 self.InfList = []
185 self.PcdFileLineDict = {}
186 self.InfFileLineList = []
188 self.FdDict = {}
189 self.FdNameNotSet = False
190 self.FvDict = {}
191 self.CapsuleDict = {}
192 self.VtfList = []
193 self.RuleDict = {}
194 self.OptRomDict = {}
207 # @param self The object pointer
210 def __init__(self, FileName):
211 self.Profile = FileProfile(FileName)
212 self.FileName = FileName
213 self.CurrentLineNumber = 1
214 self.CurrentOffsetWithinLine = 0
215 self.CurrentFdName = None
216 self.CurrentFvName = None
217 self.__Token = ""
218 self.__SkippedChars = ""
221 self.__CurSection = []
224 self.__MacroDict = tdict(True, 3)
225 self.__PcdDict = {}
227 self.__WipeOffArea = []
235 # @param self The object pointer
240 def __IsWhiteSpace(self, Char):
250 # @param self The object pointer
253 def __SkipWhiteSpace(self):
255 while not self.__EndOfFile():
257 if self.__CurrentChar() in (T_CHAR_NULL, T_CHAR_CR, T_CHAR_LF, T_CHAR_SPACE, T_CHAR_TAB):
258 self.__SkippedChars += str(self.__CurrentChar())
259 self.__GetOneChar()
269 # @param self The object pointer
273 def __EndOfFile(self):
274 NumberOfLines = len(self.Profile.FileLinesList)
275 SizeOfLastLine = len(self.Profile.FileLinesList[-1])
276 if self.CurrentLineNumber == NumberOfLines and self.CurrentOffsetWithinLine >= SizeOfLastLine - 1:
278 elif self.CurrentLineNumber > NumberOfLines:
287 # @param self The object pointer
291 def __EndOfLine(self):
292 if self.CurrentLineNumber > len(self.Profile.FileLinesList):
294 SizeOfCurrentLine = len(self.Profile.FileLinesList[self.CurrentLineNumber - 1])
295 if self.CurrentOffsetWithinLine >= SizeOfCurrentLine:
304 # @param self The object pointer
306 def Rewind(self):
307 self.CurrentLineNumber = 1
308 self.CurrentOffsetWithinLine = 0
314 # @param self The object pointer
318 def __UndoOneChar(self):
320 if self.CurrentLineNumber == 1 and self.CurrentOffsetWithinLine == 0:
322 elif self.CurrentOffsetWithinLine == 0:
323 self.CurrentLineNumber -= 1
324 self.CurrentOffsetWithinLine = len(self.__CurrentLine()) - 1
326 self.CurrentOffsetWithinLine -= 1
333 # @param self The object pointer
335 def __GetOneChar(self):
336 if self.CurrentOffsetWithinLine == len(self.Profile.FileLinesList[self.CurrentLineNumber - 1]) - 1:
337 self.CurrentLineNumber += 1
338 self.CurrentOffsetWithinLine = 0
340 self.CurrentOffsetWithinLine += 1
346 # @param self The object pointer
349 def __CurrentChar(self):
350 return self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine]
356 # @param self The object pointer
359 def __NextChar(self):
360 if self.CurrentOffsetWithinLine == len(self.Profile.FileLinesList[self.CurrentLineNumber - 1]) - 1:
361 return self.Profile.FileLinesList[self.CurrentLineNumber][0]
363 return self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine + 1]
369 # @param self The object pointer
372 def __SetCurrentCharValue(self, Value):
373 self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine] = Value
379 # @param self The object pointer
382 def __CurrentLine(self):
383 return self.Profile.FileLinesList[self.CurrentLineNumber - 1]
385 def __StringToList(self):
386 self.Profile.FileLinesList = [list(s) for s in self.Profile.FileLinesList]
387 self.Profile.FileLinesList[-1].append(' ')
389 def __ReplaceFragment(self, StartPos, EndPos, Value = ' '):
393 self.Profile.FileLinesList[StartPos[0]][Offset] = Value
398 while self.Profile.FileLinesList[StartPos[0]][Offset] not in ('\r', '\n'):
399 self.Profile.FileLinesList[StartPos[0]][Offset] = Value
405 while self.Profile.FileLinesList[Line][Offset] not in ('\r', '\n'):
406 self.Profile.FileLinesList[Line][Offset] = Value
412 self.Profile.FileLinesList[EndPos[0]][Offset] = Value
416 def __GetMacroName(self):
417 if not self.__GetNextToken():
418 raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber)
419 MacroName = self.__Token
427 self.FileName, self.CurrentLineNumber)
431 def __SetMacroValue(self, Macro, Value):
432 if not self.__CurSection:
436 if not self.__MacroDict[self.__CurSection[0], self.__CurSection[1], self.__CurSection[2]]:
437 self.__MacroDict[self.__CurSection[0], self.__CurSection[1], self.__CurSection[2]] = MacroDict
439 MacroDict = self.__MacroDict[self.__CurSection[0], self.__CurSection[1], self.__CurSection[2]]
442 def __GetMacroValue(self, Macro):
449 if self.__CurSection:
450 MacroDict = self.__MacroDict[
451 self.__CurSection[0],
452 self.__CurSection[1],
453 self.__CurSection[2]
463 def __SectionHeaderParser(self, Section):
471 self.__CurSection = []
479 self.__CurSection = ['COMMON', 'COMMON', 'COMMON']
485 self.__CurSection = ['VTF', UiName, ItemList[1]]
487 self.__CurSection = [ItemList[0], ItemList[1], 'COMMON']
489 self.__CurSection = [ItemList[0], 'DUMMY', 'COMMON']
498 # @param self The object pointer
500 def PreprocessFile(self):
502 self.Rewind()
509 while not self.__EndOfFile():
511 if self.__CurrentChar() == T_CHAR_DOUBLE_QUOTE and not InComment:
514 if self.__CurrentChar() == T_CHAR_LF:
515 self.CurrentLineNumber += 1
516 self.CurrentOffsetWithinLine = 0
524 elif InComment and not DoubleSlashComment and not HashComment and self.__CurrentChar() == T_CHAR_STAR and self.__NextChar() == T_CHAR_SLASH:
525 self.__SetCurrentCharValue(T_CHAR_SPACE)
526 self.__GetOneChar()
527 self.__SetCurrentCharValue(T_CHAR_SPACE)
528 self.__GetOneChar()
532 self.__SetCurrentCharValue(T_CHAR_SPACE)
533 self.__GetOneChar()
535 elif self.__CurrentChar() == T_CHAR_SLASH and self.__NextChar() == T_CHAR_SLASH and not self.__EndOfLine():
539 elif self.__CurrentChar() == T_CHAR_HASH and not self.__EndOfLine() and not InString:
543 elif self.__CurrentChar() == T_CHAR_SLASH and self.__NextChar() == T_CHAR_STAR:
544 self.__SetCurrentCharValue( T_CHAR_SPACE)
545 self.__GetOneChar()
546 self.__SetCurrentCharValue( T_CHAR_SPACE)
547 self.__GetOneChar()
550 self.__GetOneChar()
553 self.Profile.FileLinesList = ["".join(list) for list in self.Profile.FileLinesList]
554 self.Rewind()
561 # @param self The object pointer
563 def PreprocessIncludeFile(self):
565 while self.__GetNextToken():
567 if self.__Token == '!include':
568 IncludeLine = self.CurrentLineNumber
569 IncludeOffset = self.CurrentOffsetWithinLine - len('!include')
570 if not self.__GetNextToken():
571 raise Warning("expected include file name", self.FileName, self.CurrentLineNumber)
572 IncFileName = self.__Token
575 MacroVal = self.__GetMacroValue(Macro)
584 self.FileName, self.CurrentLineNumber)
588 IncludedFile1 = PathClass(IncludedFile, os.path.dirname(self.FileName))
608 raise Warning("The include file does not exist under below directories: \n%s\n%s\n%s\n"%(os.path.dirname(self.FileName), PlatformDir, GlobalData.gWorkspace),
609 self.FileName, self.CurrentLineNumber)
613 CurrentLine = self.CurrentLineNumber
614 CurrentOffset = self.CurrentOffsetWithinLine
619 if self.__GetNextToken():
620 if self.CurrentLineNumber == CurrentLine:
621 RemainingLine = self.__CurrentLine()[CurrentOffset:]
622 self.Profile.FileLinesList.insert(self.CurrentLineNumber, RemainingLine)
624 self.CurrentLineNumber += 1
625 self.CurrentOffsetWithinLine = 0
628 self.Profile.FileLinesList.insert(InsertAtLine, Line)
629 self.CurrentLineNumber += 1
635 TempList = list(self.Profile.FileLinesList[IncludeLine - 1])
637 self.Profile.FileLinesList[IncludeLine - 1] = ''.join(TempList)
639 self.Rewind()
641 def __GetIfListCurrentItemStat(self, IfList):
656 # @param self The object pointer
658 def PreprocessConditionalStatement(self):
663 while self.__GetNextToken():
665 if self.__GetIfListCurrentItemStat(IfList):
666 if self.__Token.startswith('['):
667 Header = self.__Token
668 if not self.__Token.endswith(']'):
669 self.__SkipToToken(']')
670 Header += self.__SkippedChars
672 raise Warning("macro cannot be used in section header", self.FileName, self.CurrentLineNumber)
673 self.__SectionHeaderParser(Header)
676 elif self.__CurSection and ReplacedLine != self.CurrentLineNumber:
677 ReplacedLine = self.CurrentLineNumber
678 self.__UndoToken()
679 CurLine = self.Profile.FileLinesList[ReplacedLine - 1]
683 while StartPos != -1 and EndPos != -1 and self.__Token not in ['!ifdef', '!ifndef', '!if', '!elseif']:
685 MacorValue = self.__GetMacroValue(MacroName)
696 self.Profile.FileLinesList[ReplacedLine - 1] = CurLine
699 if self.__Token == 'DEFINE':
700 if self.__GetIfListCurrentItemStat(IfList):
701 if not self.__CurSection:
702 raise Warning("macro cannot be defined in Rule section or out of section", self.FileName, self.CurrentLineNumber)
703 DefineLine = self.CurrentLineNumber - 1
704 DefineOffset = self.CurrentOffsetWithinLine - len('DEFINE')
705 if not self.__GetNextToken():
706 raise Warning("expected Macro name", self.FileName, self.CurrentLineNumber)
707 Macro = self.__Token
708 if not self.__IsToken( "="):
709 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
711 Value = self.__GetExpression()
712 self.__SetMacroValue(Macro, Value)
713 self.__WipeOffArea.append(((DefineLine, DefineOffset), (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1)))
714 elif self.__Token == 'SET':
715 SetLine = self.CurrentLineNumber - 1
716 SetOffset = self.CurrentOffsetWithinLine - len('SET')
717 PcdPair = self.__GetNextPcdName()
719 if not self.__IsToken( "="):
720 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
722 Value = self.__GetExpression()
723 Value = self.__EvaluateConditional(Value, self.CurrentLineNumber, 'eval', True)
725 self.__PcdDict[PcdName] = Value
727 self.Profile.PcdDict[PcdPair] = Value
728 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
729 self.Profile.PcdFileLineDict[PcdPair] = FileLineTuple
731 self.__WipeOffArea.append(((SetLine, SetOffset), (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1)))
732 elif self.__Token in ('!ifdef', '!ifndef', '!if'):
733 IfStartPos = (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - len(self.__Token))
736 CondLabel = self.__Token
737 Expression = self.__GetExpression()
740 ConditionSatisfied = self.__EvaluateConditional(Expression, IfList[-1][0][0] + 1, 'eval')
742 ConditionSatisfied = self.__EvaluateConditional(Expression, IfList[-1][0][0] + 1, 'in')
749 self.__WipeOffArea.append((IfList[-1][0], (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1)))
750 elif self.__Token in ('!elseif', '!else'):
751 ElseStartPos = (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - len(self.__Token))
753 raise Warning("Missing !if statement", self.FileName, self.CurrentLineNumber)
757 self.__WipeOffArea.append((ElseStartPos, (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1)))
759 self.__WipeOffArea.append((IfList[-1][0], ElseStartPos))
761 if self.__Token == '!elseif':
762 Expression = self.__GetExpression()
763 ConditionSatisfied = self.__EvaluateConditional(Expression, IfList[-1][0][0] + 1, 'eval')
771 self.__WipeOffArea.append((IfList[-1][0], (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1)))
772 elif self.__Token == '!endif':
774 raise Warning("Missing !if statement", self.FileName, self.CurrentLineNumber)
776 self.__WipeOffArea.append(((self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - len('!endif')), (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1)))
778 self.__WipeOffArea.append((IfList[-1][0], (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1)))
782 if self.CurrentLineNumber <= RegionLayoutLine:
785 SetPcd = ShortcutPcdPattern.match(self.Profile.FileLinesList[self.CurrentLineNumber - 1])
787 self.__PcdDict[SetPcd.group('name')] = SetPcd.group('value')
788 RegionLayoutLine = self.CurrentLineNumber
790 RegionSize = RegionSizePattern.match(self.Profile.FileLinesList[self.CurrentLineNumber - 1])
792 RegionLayoutLine = self.CurrentLineNumber
794 RegionSizeGuid = RegionSizeGuidPattern.match(self.Profile.FileLinesList[self.CurrentLineNumber])
796 RegionLayoutLine = self.CurrentLineNumber + 1
798 self.__PcdDict[RegionSizeGuid.group('base')] = RegionSize.group('base')
799 self.__PcdDict[RegionSizeGuid.group('size')] = RegionSize.group('size')
800 RegionLayoutLine = self.CurrentLineNumber + 1
803 raise Warning("Missing !endif", self.FileName, self.CurrentLineNumber)
804 self.Rewind()
806 def __CollectMacroPcd(self):
811 MacroDict.update(self.__PcdDict)
816 if self.__CurSection:
818 ScopeMacro = self.__MacroDict['COMMON', 'COMMON', 'COMMON']
823 ScopeMacro = self.__MacroDict[
824 self.__CurSection[0],
825 self.__CurSection[1],
826 self.__CurSection[2]
837 def __EvaluateConditional(self, Expression, Line, Op = None, Value = None):
838 FileLineTuple = GetRealFileLine(self.FileName, Line)
839 MacroPcdDict = self.__CollectMacroPcd()
852 File=self.FileName, ExtraData=self.__CurrentLine(),
877 # If found, the string value is put into self.__Token
879 # @param self The object pointer
885 def __IsToken(self, String, IgnoreCase = False):
886 self.__SkipWhiteSpace()
889 StartPos = self.CurrentOffsetWithinLine
892 index = self.__CurrentLine()[self.CurrentOffsetWithinLine : ].upper().find(String.upper())
894 index = self.__CurrentLine()[self.CurrentOffsetWithinLine : ].find(String)
896 self.CurrentOffsetWithinLine += len(String)
897 self.__Token = self.__CurrentLine()[StartPos : self.CurrentOffsetWithinLine]
904 # If found, the string value is put into self.__Token
906 # @param self The object pointer
912 def __IsKeyword(self, KeyWord, IgnoreCase = False):
913 self.__SkipWhiteSpace()
916 StartPos = self.CurrentOffsetWithinLine
919 index = self.__CurrentLine()[self.CurrentOffsetWithinLine : ].upper().find(KeyWord.upper())
921 index = self.__CurrentLine()[self.CurrentOffsetWithinLine : ].find(KeyWord)
923 followingChar = self.__CurrentLine()[self.CurrentOffsetWithinLine + len(KeyWord)]
926 self.CurrentOffsetWithinLine += len(KeyWord)
927 self.__Token = self.__CurrentLine()[StartPos : self.CurrentOffsetWithinLine]
931 def __GetExpression(self):
932 Line = self.Profile.FileLinesList[self.CurrentLineNumber - 1]
936 ExpressionString = self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine:Index+1]
937 self.CurrentOffsetWithinLine += len(ExpressionString)
944 # If found, the string value is put into self.__Token
946 # @param self The object pointer
950 def __GetNextWord(self):
951 self.__SkipWhiteSpace()
952 if self.__EndOfFile():
955 TempChar = self.__CurrentChar()
956 StartPos = self.CurrentOffsetWithinLine
958 self.__GetOneChar()
959 while not self.__EndOfLine():
960 TempChar = self.__CurrentChar()
963 self.__GetOneChar()
968 self.__Token = self.__CurrentLine()[StartPos : self.CurrentOffsetWithinLine]
976 # If found, the string value is put into self.__Token
978 # @param self The object pointer
982 def __GetNextToken(self):
984 self.__SkipWhiteSpace()
985 if self.__EndOfFile():
988 StartPos = self.CurrentOffsetWithinLine
989 StartLine = self.CurrentLineNumber
990 while StartLine == self.CurrentLineNumber:
991 TempChar = self.__CurrentChar()
995 self.__GetOneChar()
998 elif StartPos == self.CurrentOffsetWithinLine and TempChar in SEPERATOR_TUPLE:
999 self.__GetOneChar()
1006 EndPos = self.CurrentOffsetWithinLine
1007 if self.CurrentLineNumber != StartLine:
1008 EndPos = len(self.Profile.FileLinesList[StartLine-1])
1009 self.__Token = self.Profile.FileLinesList[StartLine-1][StartPos : EndPos]
1010 if StartPos != self.CurrentOffsetWithinLine:
1015 def __GetNextOp(self):
1017 self.__SkipWhiteSpace()
1018 if self.__EndOfFile():
1021 StartPos = self.CurrentOffsetWithinLine
1022 while not self.__EndOfLine():
1023 TempChar = self.__CurrentChar()
1026 self.__GetOneChar()
1032 if StartPos != self.CurrentOffsetWithinLine:
1033 self.__Token = self.__CurrentLine()[StartPos : self.CurrentOffsetWithinLine]
1040 # If found, the GUID string is put into self.__Token
1042 # @param self The object pointer
1046 def __GetNextGuid(self):
1048 if not self.__GetNextToken():
1051 if p.match(self.__Token) != None:
1054 self.__UndoToken()
1061 # @param self The object pointer
1063 def __UndoToken(self):
1064 self.__UndoOneChar()
1065 while self.__CurrentChar().isspace():
1066 if not self.__UndoOneChar():
1067 self.__GetOneChar()
1071 StartPos = self.CurrentOffsetWithinLine
1072 CurrentLine = self.CurrentLineNumber
1073 while CurrentLine == self.CurrentLineNumber:
1075 TempChar = self.__CurrentChar()
1079 if not self.__UndoOneChar():
1083 elif StartPos == self.CurrentOffsetWithinLine and TempChar in SEPERATOR_TUPLE:
1088 self.__GetOneChar()
1094 # @param self The object pointer
1099 def __HexDigit(self, TempChar):
1106 def __IsHex(self, HexStr):
1109 if len(self.__Token) <= 2:
1111 charList = [c for c in HexStr[2 : ] if not self.__HexDigit( c)]
1119 # If found, the HEX data is put into self.__Token
1121 # @param self The object pointer
1125 def __GetNextHexNumber(self):
1126 if not self.__GetNextToken():
1128 if self.__IsHex(self.__Token):
1131 self.__UndoToken()
1137 # If found, the decimal data is put into self.__Token
1139 # @param self The object pointer
1143 def __GetNextDecimalNumber(self):
1144 if not self.__GetNextToken():
1146 if self.__Token.isdigit():
1149 self.__UndoToken()
1155 # If found, the decimal data is put into self.__Token
1157 # @param self The object pointer
1160 def __GetNextPcdName(self):
1161 if not self.__GetNextWord():
1162 raise Warning("expected format of <PcdTokenSpaceCName>.<PcdCName>", self.FileName, self.CurrentLineNumber)
1163 pcdTokenSpaceCName = self.__Token
1165 if not self.__IsToken( "."):
1166 raise Warning("expected format of <PcdTokenSpaceCName>.<PcdCName>", self.FileName, self.CurrentLineNumber)
1168 if not self.__GetNextWord():
1169 raise Warning("expected format of <PcdTokenSpaceCName>.<PcdCName>", self.FileName, self.CurrentLineNumber)
1170 pcdCName = self.__Token
1177 # If found, the decimal data is put into self.__Token
1179 # @param self The object pointer
1183 def __GetStringData(self):
1184 if self.__Token.startswith("\"") or self.__Token.startswith("L\""):
1185 self.__UndoToken()
1186 self.__SkipToToken("\"")
1187 currentLineNumber = self.CurrentLineNumber
1189 if not self.__SkipToToken("\""):
1190 raise Warning("Missing Quote \" for String", self.FileName, self.CurrentLineNumber)
1191 if currentLineNumber != self.CurrentLineNumber:
1192 raise Warning("Missing Quote \" for String", self.FileName, self.CurrentLineNumber)
1193 self.__Token = self.__SkippedChars.rstrip('\"')
1196 elif self.__Token.startswith("\'") or self.__Token.startswith("L\'"):
1197 self.__UndoToken()
1198 self.__SkipToToken("\'")
1199 currentLineNumber = self.CurrentLineNumber
1201 if not self.__SkipToToken("\'"):
1202 raise Warning("Missing Quote \' for String", self.FileName, self.CurrentLineNumber)
1203 if currentLineNumber != self.CurrentLineNumber:
1204 raise Warning("Missing Quote \' for String", self.FileName, self.CurrentLineNumber)
1205 self.__Token = self.__SkippedChars.rstrip('\'')
1214 # The skipped chars are put into self.__SkippedChars
1216 # @param self The object pointer
1222 def __SkipToToken(self, String, IgnoreCase = False):
1223 StartPos = self.GetFileBufferPos()
1225 self.__SkippedChars = ""
1226 while not self.__EndOfFile():
1229 index = self.__CurrentLine()[self.CurrentOffsetWithinLine : ].upper().find(String.upper())
1231 index = self.__CurrentLine()[self.CurrentOffsetWithinLine : ].find(String)
1233 self.CurrentOffsetWithinLine += len(String)
1234 self.__SkippedChars += String
1236 self.__SkippedChars += str(self.__CurrentChar())
1237 self.__GetOneChar()
1239 self.SetFileBufferPos( StartPos)
1240 self.__SkippedChars = ""
1247 # @param self The object pointer
1250 def GetFileBufferPos(self):
1251 return (self.CurrentLineNumber, self.CurrentOffsetWithinLine)
1257 # @param self The object pointer
1260 def SetFileBufferPos(self, Pos):
1261 (self.CurrentLineNumber, self.CurrentOffsetWithinLine) = Pos
1268 # @param self The object pointer
1270 def Preprocess(self):
1271 self.__StringToList()
1272 self.PreprocessFile()
1273 self.PreprocessIncludeFile()
1274 self.__StringToList()
1275 self.PreprocessFile()
1276 self.PreprocessConditionalStatement()
1277 self.__StringToList()
1278 for Pos in self.__WipeOffArea:
1279 self.__ReplaceFragment(Pos[0], Pos[1])
1280 self.Profile.FileLinesList = ["".join(list) for list in self.Profile.FileLinesList]
1282 while self.__GetDefines():
1290 # @param self The object pointer
1292 def ParseFile(self):
1295 self.Preprocess()
1296 while self.__GetFd():
1299 while self.__GetFv():
1302 while self.__GetCapsule():
1305 while self.__GetVtf():
1308 while self.__GetRule():
1311 while self.__GetOptionRom():
1315 self.__UndoToken()
1316 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
1317 #'\n\tGot Token: \"%s\" from File %s\n' % (self.__Token, FileLineTuple[0]) + \
1319 % (FileLineTuple[1], self.CurrentOffsetWithinLine + 1, self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine :].rstrip('\n').rstrip('\r'))
1326 # @param self The object pointer
1330 def __GetDefines(self):
1332 if not self.__GetNextToken():
1335 S = self.__Token.upper()
1339 raise Warning("Unknown section or section appear sequence error (The correct sequence should be [DEFINES], [FD.], [FV.], [Capsule.], [VTF.], [Rule.], [OptionRom.])", self.FileName, self.CurrentLineNumber)
1340 self.__UndoToken()
1343 self.__UndoToken()
1344 if not self.__IsToken("[DEFINES", True):
1345 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
1347 # % (self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine :], FileLineTuple[0], FileLineTuple[1], self.CurrentOffsetWithinLine)
1348 raise Warning("expected [DEFINES", self.FileName, self.CurrentLineNumber)
1350 if not self.__IsToken( "]"):
1351 raise Warning("expected ']'", self.FileName, self.CurrentLineNumber)
1353 while self.__GetNextWord():
1355 if self.__Token == 'SET':
1356 self.__UndoToken()
1357 self.__GetSetStatement(None)
1360 Macro = self.__Token
1362 if not self.__IsToken("="):
1363 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1364 if not self.__GetNextToken() or self.__Token.startswith('['):
1365 raise Warning("expected MACRO value", self.FileName, self.CurrentLineNumber)
1366 Value = self.__Token
1372 # Get FD section contents and store its data into FD dictionary of self.Profile
1374 # @param self The object pointer
1378 def __GetFd(self):
1380 if not self.__GetNextToken():
1383 S = self.__Token.upper()
1387 raise Warning("Unknown section", self.FileName, self.CurrentLineNumber)
1388 self.__UndoToken()
1391 self.__UndoToken()
1392 if not self.__IsToken("[FD.", True):
1393 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
1395 # % (self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine :], FileLineTuple[0], FileLineTuple[1], self.CurrentOffsetWithinLine)
1396 raise Warning("expected [FD.]", self.FileName, self.CurrentLineNumber)
1398 FdName = self.__GetUiName()
1400 if len (self.Profile.FdDict) == 0:
1404 self.Profile.FdNameNotSet = True
1406 raise Warning("expected FdName in [FD.] section", self.FileName, self.CurrentLineNumber)
1407 self.CurrentFdName = FdName.upper()
1409 if self.CurrentFdName in self.Profile.FdDict:
1410 raise Warning("Unexpected the same FD name", self.FileName, self.CurrentLineNumber)
1412 if not self.__IsToken( "]"):
1413 raise Warning("expected ']'", self.FileName, self.CurrentLineNumber)
1416 FdObj.FdUiName = self.CurrentFdName
1417 self.Profile.FdDict[self.CurrentFdName] = FdObj
1419 if len (self.Profile.FdDict) > 1 and self.Profile.FdNameNotSet:
1420 raise Warning("expected all FDs have their name", self.FileName, self.CurrentLineNumber)
1422 Status = self.__GetCreateFile(FdObj)
1424 raise Warning("FD name error", self.FileName, self.CurrentLineNumber)
1426 self.__GetTokenStatements(FdObj)
1428 self.__GetDefineStatements(FdObj)
1430 self.__GetSetStatements(FdObj)
1432 if not self.__GetRegionLayout(FdObj):
1433 raise Warning("expected region layout", self.FileName, self.CurrentLineNumber)
1435 while self.__GetRegionLayout(FdObj):
1443 # @param self The object pointer
1446 def __GetUiName(self):
1448 if self.__GetNextWord():
1449 Name = self.__Token
1457 # @param self The object pointer
1461 def __GetCreateFile(self, Obj):
1463 if self.__IsKeyword( "CREATE_FILE"):
1464 if not self.__IsToken( "="):
1465 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1467 if not self.__GetNextToken():
1468 raise Warning("expected file name", self.FileName, self.CurrentLineNumber)
1470 FileName = self.__Token
1479 # @param self The object pointer
1482 def __GetTokenStatements(self, Obj):
1483 if not self.__IsKeyword( "BaseAddress"):
1484 raise Warning("BaseAddress missing", self.FileName, self.CurrentLineNumber)
1486 if not self.__IsToken( "="):
1487 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1489 if not self.__GetNextHexNumber():
1490 raise Warning("expected Hex base address", self.FileName, self.CurrentLineNumber)
1492 Obj.BaseAddress = self.__Token
1494 if self.__IsToken( "|"):
1495 pcdPair = self.__GetNextPcdName()
1497 self.Profile.PcdDict[pcdPair] = Obj.BaseAddress
1498 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
1499 self.Profile.PcdFileLineDict[pcdPair] = FileLineTuple
1501 if not self.__IsKeyword( "Size"):
1502 raise Warning("Size missing", self.FileName, self.CurrentLineNumber)
1504 if not self.__IsToken( "="):
1505 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1507 if not self.__GetNextHexNumber():
1508 raise Warning("expected Hex size", self.FileName, self.CurrentLineNumber)
1511 Size = self.__Token
1512 if self.__IsToken( "|"):
1513 pcdPair = self.__GetNextPcdName()
1515 self.Profile.PcdDict[pcdPair] = Size
1516 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
1517 self.Profile.PcdFileLineDict[pcdPair] = FileLineTuple
1520 if not self.__IsKeyword( "ErasePolarity"):
1521 raise Warning("ErasePolarity missing", self.FileName, self.CurrentLineNumber)
1523 if not self.__IsToken( "="):
1524 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1526 if not self.__GetNextToken():
1527 raise Warning("expected Erase Polarity", self.FileName, self.CurrentLineNumber)
1529 if self.__Token != "1" and self.__Token != "0":
1530 raise Warning("expected 1 or 0 Erase Polarity", self.FileName, self.CurrentLineNumber)
1532 Obj.ErasePolarity = self.__Token
1534 self.__GetBlockStatements(Obj)
1540 # @param self The object pointer
1545 def __GetAddressStatements(self, Obj):
1547 if self.__IsKeyword("BsBaseAddress"):
1548 if not self.__IsToken( "="):
1549 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1551 if not self.__GetNextDecimalNumber() and not self.__GetNextHexNumber():
1552 raise Warning("expected address", self.FileName, self.CurrentLineNumber)
1554 BsAddress = long(self.__Token, 0)
1557 if self.__IsKeyword("RtBaseAddress"):
1558 if not self.__IsToken( "="):
1559 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1561 if not self.__GetNextDecimalNumber() and not self.__GetNextHexNumber():
1562 raise Warning("expected address", self.FileName, self.CurrentLineNumber)
1564 RtAddress = long(self.__Token, 0)
1571 # @param self The object pointer
1574 def __GetBlockStatements(self, Obj):
1576 if not self.__GetBlockStatement(Obj):
1581 while self.__GetBlockStatement(Obj):
1586 raise Warning("expected block statement", self.FileName, self.CurrentLineNumber)
1592 # @param self The object pointer
1597 def __GetBlockStatement(self, Obj):
1598 if not self.__IsKeyword( "BlockSize"):
1601 if not self.__IsToken( "="):
1602 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1604 if not self.__GetNextHexNumber() and not self.__GetNextDecimalNumber():
1605 raise Warning("expected Hex or Integer block size", self.FileName, self.CurrentLineNumber)
1607 BlockSize = self.__Token
1609 if self.__IsToken( "|"):
1610 PcdPair = self.__GetNextPcdName()
1612 self.Profile.PcdDict[PcdPair] = BlockSize
1613 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
1614 self.Profile.PcdFileLineDict[PcdPair] = FileLineTuple
1618 if self.__IsKeyword( "NumBlocks"):
1619 if not self.__IsToken( "="):
1620 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1622 if not self.__GetNextDecimalNumber() and not self.__GetNextHexNumber():
1623 raise Warning("expected block numbers", self.FileName, self.CurrentLineNumber)
1625 BlockNumber = long(self.__Token, 0)
1634 # @param self The object pointer
1639 def __GetDefineStatements(self, Obj):
1640 while self.__GetDefineStatement( Obj):
1647 # @param self The object pointer
1652 def __GetDefineStatement(self, Obj):
1653 if self.__IsKeyword("DEFINE"):
1654 self.__GetNextToken()
1655 Macro = self.__Token
1656 if not self.__IsToken( "="):
1657 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1659 if not self.__GetNextToken():
1660 raise Warning("expected value", self.FileName, self.CurrentLineNumber)
1662 Value = self.__Token
1673 # @param self The object pointer
1678 def __GetSetStatements(self, Obj):
1679 while self.__GetSetStatement(Obj):
1686 # @param self The object pointer
1691 def __GetSetStatement(self, Obj):
1692 if self.__IsKeyword("SET"):
1693 PcdPair = self.__GetNextPcdName()
1695 if not self.__IsToken( "="):
1696 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1698 Value = self.__GetExpression()
1699 Value = self.__EvaluateConditional(Value, self.CurrentLineNumber, 'eval', True)
1703 self.Profile.PcdDict[PcdPair] = Value
1704 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
1705 self.Profile.PcdFileLineDict[PcdPair] = FileLineTuple
1714 # @param self The object pointer
1719 def __GetRegionLayout(self, Fd):
1720 if not self.__GetNextHexNumber():
1724 RegionObj.Offset = long(self.__Token, 0)
1727 if not self.__IsToken( "|"):
1728 raise Warning("expected '|'", self.FileName, self.CurrentLineNumber)
1730 if not self.__GetNextHexNumber():
1731 raise Warning("expected Region Size", self.FileName, self.CurrentLineNumber)
1732 RegionObj.Size = long(self.__Token, 0)
1734 if not self.__GetNextWord():
1737 if not self.__Token in ("SET", "FV", "FILE", "DATA", "CAPSULE"):
1738 self.__UndoToken()
1739 RegionObj.PcdOffset = self.__GetNextPcdName()
1740 self.Profile.PcdDict[RegionObj.PcdOffset] = "0x%08X" % (RegionObj.Offset + long(Fd.BaseAddress, 0))
1741 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
1742 self.Profile.PcdFileLineDict[RegionObj.PcdOffset] = FileLineTuple
1743 if self.__IsToken( "|"):
1744 RegionObj.PcdSize = self.__GetNextPcdName()
1745 self.Profile.PcdDict[RegionObj.PcdSize] = "0x%08X" % RegionObj.Size
1746 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
1747 self.Profile.PcdFileLineDict[RegionObj.PcdSize] = FileLineTuple
1749 if not self.__GetNextWord():
1752 if self.__Token == "SET":
1753 self.__UndoToken()
1754 self.__GetSetStatements( RegionObj)
1755 if not self.__GetNextWord():
1758 elif self.__Token == "FV":
1759 self.__UndoToken()
1760 self.__GetRegionFvType( RegionObj)
1762 elif self.__Token == "CAPSULE":
1763 self.__UndoToken()
1764 self.__GetRegionCapType( RegionObj)
1766 elif self.__Token == "FILE":
1767 self.__UndoToken()
1768 self.__GetRegionFileType( RegionObj)
1770 elif self.__Token == "DATA":
1771 self.__UndoToken()
1772 self.__GetRegionDataType( RegionObj)
1776 self.FileName, self.CurrentLineNumber)
1784 # @param self The object pointer
1787 def __GetRegionFvType(self, RegionObj):
1789 if not self.__IsKeyword( "FV"):
1790 raise Warning("expected Keyword 'FV'", self.FileName, self.CurrentLineNumber)
1792 if not self.__IsToken( "="):
1793 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1795 if not self.__GetNextToken():
1796 raise Warning("expected FV name", self.FileName, self.CurrentLineNumber)
1799 RegionObj.RegionDataList.append(self.__Token)
1801 while self.__IsKeyword( "FV"):
1803 if not self.__IsToken( "="):
1804 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1806 if not self.__GetNextToken():
1807 raise Warning("expected FV name", self.FileName, self.CurrentLineNumber)
1809 RegionObj.RegionDataList.append(self.__Token)
1815 # @param self The object pointer
1818 def __GetRegionCapType(self, RegionObj):
1820 if not self.__IsKeyword("CAPSULE"):
1821 raise Warning("expected Keyword 'CAPSULE'", self.FileName, self.CurrentLineNumber)
1823 if not self.__IsToken("="):
1824 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1826 if not self.__GetNextToken():
1827 raise Warning("expected CAPSULE name", self.FileName, self.CurrentLineNumber)
1830 RegionObj.RegionDataList.append(self.__Token)
1832 while self.__IsKeyword("CAPSULE"):
1834 if not self.__IsToken("="):
1835 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1837 if not self.__GetNextToken():
1838 raise Warning("expected CAPSULE name", self.FileName, self.CurrentLineNumber)
1840 RegionObj.RegionDataList.append(self.__Token)
1846 # @param self The object pointer
1849 def __GetRegionFileType(self, RegionObj):
1851 if not self.__IsKeyword( "FILE"):
1852 raise Warning("expected Keyword 'FILE'", self.FileName, self.CurrentLineNumber)
1854 if not self.__IsToken( "="):
1855 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1857 if not self.__GetNextToken():
1858 raise Warning("expected File name", self.FileName, self.CurrentLineNumber)
1861 RegionObj.RegionDataList.append( self.__Token)
1863 while self.__IsKeyword( "FILE"):
1865 if not self.__IsToken( "="):
1866 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1868 if not self.__GetNextToken():
1869 raise Warning("expected FILE name", self.FileName, self.CurrentLineNumber)
1871 RegionObj.RegionDataList.append(self.__Token)
1877 # @param self The object pointer
1880 def __GetRegionDataType(self, RegionObj):
1882 if not self.__IsKeyword( "DATA"):
1883 raise Warning("expected Region Data type", self.FileName, self.CurrentLineNumber)
1885 if not self.__IsToken( "="):
1886 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1888 if not self.__IsToken( "{"):
1889 raise Warning("expected '{'", self.FileName, self.CurrentLineNumber)
1891 if not self.__GetNextHexNumber():
1892 raise Warning("expected Hex byte", self.FileName, self.CurrentLineNumber)
1894 if len(self.__Token) > 18:
1895 raise Warning("Hex string can't be converted to a valid UINT64 value", self.FileName, self.CurrentLineNumber)
1898 AllString = self.__Token
1907 if len (self.__Token) <= 4:
1908 while self.__IsToken(","):
1909 if not self.__GetNextHexNumber():
1910 raise Warning("Invalid Hex number", self.FileName, self.CurrentLineNumber)
1911 if len(self.__Token) > 4:
1912 raise Warning("Hex byte(must be 2 digits) too long", self.FileName, self.CurrentLineNumber)
1913 DataString += self.__Token
1916 if not self.__IsToken( "}"):
1917 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
1923 while self.__IsKeyword( "DATA"):
1925 if not self.__IsToken( "="):
1926 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
1928 if not self.__IsToken( "{"):
1929 raise Warning("expected '{'", self.FileName, self.CurrentLineNumber)
1931 if not self.__GetNextHexNumber():
1932 raise Warning("expected Hex byte", self.FileName, self.CurrentLineNumber)
1934 if len(self.__Token) > 18:
1935 raise Warning("Hex string can't be converted to a valid UINT64 value", self.FileName, self.CurrentLineNumber)
1938 AllString = self.__Token
1947 if len (self.__Token) <= 4:
1948 while self.__IsToken(","):
1949 if not self.__GetNextHexNumber():
1950 raise Warning("Invalid Hex number", self.FileName, self.CurrentLineNumber)
1951 if len(self.__Token) > 4:
1952 raise Warning("Hex byte(must be 2 digits) too long", self.FileName, self.CurrentLineNumber)
1953 DataString += self.__Token
1956 if not self.__IsToken( "}"):
1957 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
1964 # Get FV section contents and store its data into FV dictionary of self.Profile
1966 # @param self The object pointer
1970 def __GetFv(self):
1971 if not self.__GetNextToken():
1974 S = self.__Token.upper()
1978 raise Warning("Unknown section or section appear sequence error (The correct sequence should be [FD.], [FV.], [Capsule.], [VTF.], [Rule.], [OptionRom.])", self.FileName, self.CurrentLineNumber)
1979 self.__UndoToken()
1982 self.__UndoToken()
1983 if not self.__IsToken("[FV.", True):
1984 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
1986 # % (self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine :], FileLineTuple[0], FileLineTuple[1], self.CurrentOffsetWithinLine)
1987 raise Warning("Unknown Keyword '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
1989 FvName = self.__GetUiName()
1990 self.CurrentFvName = FvName.upper()
1992 if not self.__IsToken( "]"):
1993 raise Warning("expected ']'", self.FileName, self.CurrentLineNumber)
1996 FvObj.UiFvName = self.CurrentFvName
1997 self.Profile.FvDict[self.CurrentFvName] = FvObj
1999 Status = self.__GetCreateFile(FvObj)
2001 raise Warning("FV name error", self.FileName, self.CurrentLineNumber)
2003 self.__GetDefineStatements(FvObj)
2005 self.__GetAddressStatements(FvObj)
2007 while self.__GetBlockStatement(FvObj):
2010 self.__GetSetStatements(FvObj)
2012 self.__GetFvBaseAddress(FvObj)
2014 self.__GetFvForceRebase(FvObj)
2016 self.__GetFvAlignment(FvObj)
2018 self.__GetFvAttributes(FvObj)
2020 self.__GetFvNameGuid(FvObj)
2026 isFvExtEntry = self.__GetFvExtEntryStatement(FvObj)
2030 self.__GetAprioriSection(FvObj, FvObj.DefineVarDict.copy())
2031 self.__GetAprioriSection(FvObj, FvObj.DefineVarDict.copy())
2034 isInf = self.__GetInfStatement(FvObj, MacroDict = FvObj.DefineVarDict.copy())
2035 isFile = self.__GetFileStatement(FvObj, MacroDict = FvObj.DefineVarDict.copy())
2045 # @param self The object pointer
2050 def __GetFvAlignment(self, Obj):
2052 if not self.__IsKeyword( "FvAlignment"):
2055 if not self.__IsToken( "="):
2056 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2058 if not self.__GetNextToken():
2059 raise Warning("expected alignment value", self.FileName, self.CurrentLineNumber)
2061 if self.__Token.upper() not in ("1", "2", "4", "8", "16", "32", "64", "128", "256", "512", \
2065 raise Warning("Unknown alignment value '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
2066 Obj.FvAlignment = self.__Token
2073 # @param self The object pointer
2078 def __GetFvBaseAddress(self, Obj):
2080 if not self.__IsKeyword("FvBaseAddress"):
2083 if not self.__IsToken( "="):
2084 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2086 if not self.__GetNextToken():
2087 raise Warning("expected FV base address value", self.FileName, self.CurrentLineNumber)
2091 if not IsValidBaseAddrValue.match(self.__Token.upper()):
2092 raise Warning("Unknown FV base address value '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
2093 Obj.FvBaseAddress = self.__Token
2100 # @param self The object pointer
2105 def __GetFvForceRebase(self, Obj):
2107 if not self.__IsKeyword("FvForceRebase"):
2110 if not self.__IsToken( "="):
2111 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2113 if not self.__GetNextToken():
2114 raise Warning("expected FvForceRebase value", self.FileName, self.CurrentLineNumber)
2116 if self.__Token.upper() not in ["TRUE", "FALSE", "0", "0X0", "0X00", "1", "0X1", "0X01"]:
2117 raise Warning("Unknown FvForceRebase value '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
2119 if self.__Token.upper() in ["TRUE", "1", "0X1", "0X01"]:
2121 elif self.__Token.upper() in ["FALSE", "0", "0X0", "0X00"]:
2133 # @param self The object pointer
2137 def __GetFvAttributes(self, FvObj):
2139 while self.__GetNextWord():
2140 name = self.__Token
2147 self.__UndoToken()
2150 if not self.__IsToken( "="):
2151 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2153 if not self.__GetNextToken() or self.__Token.upper() not in ("TRUE", "FALSE", "1", "0"):
2154 raise Warning("expected TRUE/FALSE (1/0)", self.FileName, self.CurrentLineNumber)
2156 FvObj.FvAttributeDict[name] = self.__Token
2164 # @param self The object pointer
2168 def __GetFvNameGuid(self, FvObj):
2170 if not self.__IsKeyword( "FvNameGuid"):
2173 if not self.__IsToken( "="):
2174 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2176 if not self.__GetNextGuid():
2177 raise Warning("expected FV GUID value", self.FileName, self.CurrentLineNumber)
2179 FvObj.FvNameGuid = self.__Token
2183 def __GetFvExtEntryStatement(self, FvObj):
2185 if not self.__IsKeyword( "FV_EXT_ENTRY"):
2188 if not self.__IsKeyword ("TYPE"):
2189 raise Warning("expected 'TYPE'", self.FileName, self.CurrentLineNumber)
2191 if not self.__IsToken( "="):
2192 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2194 if not self.__GetNextHexNumber() and not self.__GetNextDecimalNumber():
2195 raise Warning("expected Hex FV extension entry type value At Line ", self.FileName, self.CurrentLineNumber)
2197 FvObj.FvExtEntryTypeValue += [self.__Token]
2199 if not self.__IsToken( "{"):
2200 raise Warning("expected '{'", self.FileName, self.CurrentLineNumber)
2202 if not self.__IsKeyword ("FILE") and not self.__IsKeyword ("DATA"):
2203 raise Warning("expected 'FILE' or 'DATA'", self.FileName, self.CurrentLineNumber)
2205 FvObj.FvExtEntryType += [self.__Token]
2207 if self.__Token == 'DATA':
2209 if not self.__IsToken( "="):
2210 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2212 if not self.__IsToken( "{"):
2213 raise Warning("expected '{'", self.FileName, self.CurrentLineNumber)
2215 if not self.__GetNextHexNumber():
2216 raise Warning("expected Hex byte", self.FileName, self.CurrentLineNumber)
2218 if len(self.__Token) > 4:
2219 raise Warning("Hex byte(must be 2 digits) too long", self.FileName, self.CurrentLineNumber)
2221 DataString = self.__Token
2224 while self.__IsToken(","):
2225 if not self.__GetNextHexNumber():
2226 raise Warning("Invalid Hex number", self.FileName, self.CurrentLineNumber)
2227 if len(self.__Token) > 4:
2228 raise Warning("Hex byte(must be 2 digits) too long", self.FileName, self.CurrentLineNumber)
2229 DataString += self.__Token
2232 if not self.__IsToken( "}"):
2233 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
2235 if not self.__IsToken( "}"):
2236 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
2241 if self.__Token == 'FILE':
2243 if not self.__IsToken( "="):
2244 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2246 if not self.__GetNextToken():
2247 raise Warning("expected FV Extension Entry file path At Line ", self.FileName, self.CurrentLineNumber)
2249 FvObj.FvExtEntryData += [self.__Token]
2251 if not self.__IsToken( "}"):
2252 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
2260 # @param self The object pointer
2266 def __GetAprioriSection(self, FvObj, MacroDict = {}):
2268 if not self.__IsKeyword( "APRIORI"):
2271 if not self.__IsKeyword("PEI") and not self.__IsKeyword("DXE"):
2272 raise Warning("expected Apriori file type", self.FileName, self.CurrentLineNumber)
2273 AprType = self.__Token
2275 if not self.__IsToken( "{"):
2276 raise Warning("expected '{'", self.FileName, self.CurrentLineNumber)
2281 self.__GetDefineStatements(AprSectionObj)
2285 IsInf = self.__GetInfStatement( AprSectionObj, MacroDict = MacroDict)
2286 IsFile = self.__GetFileStatement( AprSectionObj)
2290 if not self.__IsToken( "}"):
2291 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
2300 # @param self The object pointer
2306 def __GetInfStatement(self, Obj, ForCapsule = False, MacroDict = {}):
2308 if not self.__IsKeyword( "INF"):
2312 self.__GetInfOptions( ffsInf)
2314 if not self.__GetNextToken():
2315 raise Warning("expected INF file path", self.FileName, self.CurrentLineNumber)
2316 ffsInf.InfFileName = self.__Token
2318 ffsInf.CurrentLineNum = self.CurrentLineNumber
2319 ffsInf.CurrentLineContent = self.__CurrentLine()
2327 if not ffsInf.InfFileName in self.Profile.InfList:
2328 self.Profile.InfList.append(ffsInf.InfFileName)
2329 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
2330 self.Profile.InfFileLineList.append(FileLineTuple)
2332 if self.__IsToken('|'):
2333 if self.__IsKeyword('RELOCS_STRIPPED'):
2335 elif self.__IsKeyword('RELOCS_RETAINED'):
2338 raise Warning("Unknown reloc strip flag '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
2352 # @param self The object pointer
2355 def __GetInfOptions(self, FfsInfObj):
2357 if self.__IsKeyword( "RuleOverride"):
2358 if not self.__IsToken( "="):
2359 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2360 if not self.__GetNextToken():
2361 raise Warning("expected Rule name", self.FileName, self.CurrentLineNumber)
2362 FfsInfObj.Rule = self.__Token
2364 if self.__IsKeyword( "VERSION"):
2365 if not self.__IsToken( "="):
2366 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2367 if not self.__GetNextToken():
2368 raise Warning("expected Version", self.FileName, self.CurrentLineNumber)
2370 if self.__GetStringData():
2371 FfsInfObj.Version = self.__Token
2373 if self.__IsKeyword( "UI"):
2374 if not self.__IsToken( "="):
2375 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2376 if not self.__GetNextToken():
2377 raise Warning("expected UI name", self.FileName, self.CurrentLineNumber)
2379 if self.__GetStringData():
2380 FfsInfObj.Ui = self.__Token
2382 if self.__IsKeyword( "USE"):
2383 if not self.__IsToken( "="):
2384 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2385 if not self.__GetNextToken():
2386 raise Warning("expected ARCH name", self.FileName, self.CurrentLineNumber)
2387 FfsInfObj.UseArch = self.__Token
2390 if self.__GetNextToken():
2392 if p.match(self.__Token):
2393 FfsInfObj.KeyStringList.append(self.__Token)
2394 if not self.__IsToken(","):
2397 self.__UndoToken()
2400 while self.__GetNextToken():
2401 if not p.match(self.__Token):
2402 raise Warning("expected KeyString \"Target_Tag_Arch\"", self.FileName, self.CurrentLineNumber)
2403 FfsInfObj.KeyStringList.append(self.__Token)
2405 if not self.__IsToken(","):
2412 # @param self The object pointer
2418 def __GetFileStatement(self, Obj, ForCapsule = False, MacroDict = {}):
2420 if not self.__IsKeyword( "FILE"):
2423 if not self.__GetNextWord():
2424 raise Warning("expected FFS type", self.FileName, self.CurrentLineNumber)
2426 if ForCapsule and self.__Token == 'DATA':
2427 self.__UndoToken()
2428 self.__UndoToken()
2432 FfsFileObj.FvFileType = self.__Token
2434 if not self.__IsToken( "="):
2435 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2437 if not self.__GetNextGuid():
2438 if not self.__GetNextWord():
2439 raise Warning("expected File GUID", self.FileName, self.CurrentLineNumber)
2440 if self.__Token == 'PCD':
2441 if not self.__IsToken( "("):
2442 raise Warning("expected '('", self.FileName, self.CurrentLineNumber)
2443 PcdPair = self.__GetNextPcdName()
2444 if not self.__IsToken( ")"):
2445 raise Warning("expected ')'", self.FileName, self.CurrentLineNumber)
2446 self.__Token = 'PCD('+PcdPair[1]+'.'+PcdPair[0]+')'
2448 FfsFileObj.NameGuid = self.__Token
2450 self.__GetFilePart( FfsFileObj, MacroDict.copy())
2465 # @param self The object pointer
2471 def __FileCouldHaveRelocFlag (self, FileType):
2481 # @param self The object pointer
2487 def __SectionCouldHaveRelocFlag (self, SectionType):
2497 # @param self The object pointer
2501 def __GetFilePart(self, FfsFileObj, MacroDict = {}):
2503 self.__GetFileOpts( FfsFileObj)
2505 if not self.__IsToken("{"):
2506 # if self.__IsKeyword('RELOCS_STRIPPED') or self.__IsKeyword('RELOCS_RETAINED'):
2507 # if self.__FileCouldHaveRelocFlag(FfsFileObj.FvFileType):
2508 # if self.__Token == 'RELOCS_STRIPPED':
2513 # raise Warning("File type %s could not have reloc strip flag%d" % (FfsFileObj.FvFileType, self.CurrentLineNumber), self.FileName, self.CurrentLineNumber)
2515 # if not self.__IsToken("{"):
2516 raise Warning("expected '{'", self.FileName, self.CurrentLineNumber)
2518 if not self.__GetNextToken():
2519 raise Warning("expected File name or section data", self.FileName, self.CurrentLineNumber)
2521 if self.__Token == "FV":
2522 if not self.__IsToken( "="):
2523 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2524 if not self.__GetNextToken():
2525 raise Warning("expected FV name", self.FileName, self.CurrentLineNumber)
2526 FfsFileObj.FvName = self.__Token
2528 elif self.__Token == "FD":
2529 if not self.__IsToken( "="):
2530 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2531 if not self.__GetNextToken():
2532 raise Warning("expected FD name", self.FileName, self.CurrentLineNumber)
2533 FfsFileObj.FdName = self.__Token
2535 elif self.__Token in ("DEFINE", "APRIORI", "SECTION"):
2536 self.__UndoToken()
2537 self.__GetSectionData( FfsFileObj, MacroDict)
2539 FfsFileObj.CurrentLineNum = self.CurrentLineNumber
2540 FfsFileObj.CurrentLineContent = self.__CurrentLine()
2541 FfsFileObj.FileName = self.__Token
2552 if not self.__GetMacroValue("OUTPUT_DIRECTORY") in FfsFileObj.FileName:
2559 if not self.__IsToken( "}"):
2560 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
2566 # @param self The object pointer
2569 def __GetFileOpts(self, FfsFileObj):
2571 if self.__GetNextToken():
2573 if Pattern.match(self.__Token):
2574 FfsFileObj.KeyStringList.append(self.__Token)
2575 if self.__IsToken(","):
2576 while self.__GetNextToken():
2577 if not Pattern.match(self.__Token):
2578 raise Warning("expected KeyString \"Target_Tag_Arch\"", self.FileName, self.CurrentLineNumber)
2579 FfsFileObj.KeyStringList.append(self.__Token)
2581 if not self.__IsToken(","):
2585 self.__UndoToken()
2587 if self.__IsKeyword( "FIXED", True):
2590 if self.__IsKeyword( "CHECKSUM", True):
2593 if self.__GetAlignment():
2594 if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
2595 raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
2597 if not self.__Token == "Auto":
2598 FfsFileObj.Alignment = self.__Token
2604 # @param self The object pointer
2608 def __GetAlignment(self):
2609 if self.__IsKeyword( "Align", True):
2610 if not self.__IsToken( "="):
2611 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2613 if not self.__GetNextToken():
2614 raise Warning("expected alignment value", self.FileName, self.CurrentLineNumber)
2623 # @param self The object pointer
2627 def __GetSectionData(self, FfsFileObj, MacroDict = {}):
2631 self.__GetDefineStatements(FfsFileObj)
2634 self.__GetAprioriSection(FfsFileObj, Dict.copy())
2635 self.__GetAprioriSection(FfsFileObj, Dict.copy())
2638 IsLeafSection = self.__GetLeafSection(FfsFileObj, Dict)
2639 IsEncapSection = self.__GetEncapsulationSec(FfsFileObj)
2647 # @param self The object pointer
2653 def __GetLeafSection(self, Obj, MacroDict = {}):
2655 OldPos = self.GetFileBufferPos()
2657 if not self.__IsKeyword( "SECTION"):
2659 raise Warning("expected SECTION", self.FileName, self.CurrentLineNumber)
2664 if self.__GetAlignment():
2665 if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
2666 raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
2667 AlignValue = self.__Token
2670 if self.__IsKeyword( "BUILD_NUM"):
2671 if not self.__IsToken( "="):
2672 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2674 if not self.__GetNextToken():
2675 raise Warning("expected Build number value", self.FileName, self.CurrentLineNumber)
2677 BuildNum = self.__Token
2679 if self.__IsKeyword( "VERSION"):
2681 raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
2682 if not self.__IsToken( "="):
2683 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2684 if not self.__GetNextToken():
2685 raise Warning("expected version", self.FileName, self.CurrentLineNumber)
2689 if self.__GetStringData():
2690 VerSectionObj.StringData = self.__Token
2692 VerSectionObj.FileName = self.__Token
2695 elif self.__IsKeyword( "UI"):
2697 raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
2698 if not self.__IsToken( "="):
2699 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2700 if not self.__GetNextToken():
2701 raise Warning("expected UI", self.FileName, self.CurrentLineNumber)
2704 if self.__GetStringData():
2705 UiSectionObj.StringData = self.__Token
2707 UiSectionObj.FileName = self.__Token
2710 elif self.__IsKeyword( "FV_IMAGE"):
2712 raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
2713 if not self.__IsToken( "="):
2714 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2715 if not self.__GetNextToken():
2716 raise Warning("expected FV name or FV file path", self.FileName, self.CurrentLineNumber)
2718 FvName = self.__Token
2721 if self.__IsToken( "{"):
2724 self.__GetDefineStatements(FvObj)
2726 self.__GetBlockStatement(FvObj)
2727 self.__GetSetStatements(FvObj)
2728 self.__GetFvAlignment(FvObj)
2729 self.__GetFvAttributes(FvObj)
2730 self.__GetAprioriSection(FvObj, MacroDict.copy())
2731 self.__GetAprioriSection(FvObj, MacroDict.copy())
2734 IsInf = self.__GetInfStatement(FvObj, MacroDict.copy())
2735 IsFile = self.__GetFileStatement(FvObj, MacroDict.copy())
2739 if not self.__IsToken( "}"):
2740 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
2753 elif self.__IsKeyword("PEI_DEPEX_EXP") or self.__IsKeyword("DXE_DEPEX_EXP") or self.__IsKeyword("SMM_DEPEX_EXP"):
2755 raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
2758 DepexSectionObj.DepexType = self.__Token
2760 if not self.__IsToken( "="):
2761 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2762 if not self.__IsToken( "{"):
2763 raise Warning("expected '{'", self.FileName, self.CurrentLineNumber)
2764 if not self.__SkipToToken( "}"):
2765 raise Warning("expected Depex expression ending '}'", self.FileName, self.CurrentLineNumber)
2767 DepexSectionObj.Expression = self.__SkippedChars.rstrip('}')
2771 if not self.__GetNextWord():
2772 raise Warning("expected section type", self.FileName, self.CurrentLineNumber)
2775 if self.__Token == "COMPRESS" or self.__Token == "GUIDED":
2776 self.SetFileBufferPos(OldPos)
2779 if self.__Token not in ("COMPAT16", "PE32", "PIC", "TE", "FV_IMAGE", "RAW", "DXE_DEPEX",\
2781 raise Warning("Unknown section type '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
2782 if AlignValue == 'Auto'and (not self.__Token == 'PE32') and (not self.__Token == 'TE'):
2783 raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
2788 DataSectionObj.SecType = self.__Token
2790 if self.__IsKeyword('RELOCS_STRIPPED') or self.__IsKeyword('RELOCS_RETAINED'):
2791 if self.__FileCouldHaveRelocFlag(Obj.FvFileType) and self.__SectionCouldHaveRelocFlag(DataSectionObj.SecType):
2792 if self.__Token == 'RELOCS_STRIPPED':
2797 raise Warning("File type %s, section type %s, could not have reloc strip flag%d" % (Obj.FvFileType, DataSectionObj.SecType, self.CurrentLineNumber), self.FileName, self.CurrentLineNumber)
2799 if self.__IsToken("="):
2800 if not self.__GetNextToken():
2801 raise Warning("expected section file path", self.FileName, self.CurrentLineNumber)
2802 DataSectionObj.SectFileName = self.__Token
2809 if not self.__GetCglSection(DataSectionObj):
2820 # @param self The object pointer
2826 def __GetCglSection(self, Obj, AlignValue = None):
2828 if self.__IsKeyword( "COMPRESS"):
2830 if self.__IsKeyword("PI_STD") or self.__IsKeyword("PI_NONE"):
2831 type = self.__Token
2833 if not self.__IsToken("{"):
2834 raise Warning("expected '{'", self.FileName, self.CurrentLineNumber)
2841 IsLeafSection = self.__GetLeafSection(CompressSectionObj)
2842 IsEncapSection = self.__GetEncapsulationSec(CompressSectionObj)
2847 if not self.__IsToken( "}"):
2848 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
2856 elif self.__IsKeyword( "GUIDED"):
2858 if self.__GetNextGuid():
2859 GuidValue = self.__Token
2861 AttribDict = self.__GetGuidAttrib()
2862 if not self.__IsToken("{"):
2863 raise Warning("expected '{'", self.FileName, self.CurrentLineNumber)
2873 IsLeafSection = self.__GetLeafSection(GuidSectionObj)
2874 IsEncapSection = self.__GetEncapsulationSec(GuidSectionObj)
2878 if not self.__IsToken( "}"):
2879 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
2890 # @param self The object pointer
2893 def __GetGuidAttrib(self):
2899 while self.__IsKeyword("PROCESSING_REQUIRED") or self.__IsKeyword("AUTH_STATUS_VALID") \
2900 or self.__IsKeyword("EXTRA_HEADER_SIZE"):
2901 AttribKey = self.__Token
2903 if not self.__IsToken("="):
2904 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2906 if not self.__GetNextToken():
2907 raise Warning("expected TRUE(1)/FALSE(0)/Number", self.FileName, self.CurrentLineNumber)
2910 if self.__Token[0:2].upper() == "0X":
2913 AttribDict[AttribKey] = int(self.__Token, Base)
2916 raise Warning("expected Number", self.FileName, self.CurrentLineNumber)
2917 elif self.__Token.upper() not in ("TRUE", "FALSE", "1", "0"):
2918 raise Warning("expected TRUE/FALSE (1/0)", self.FileName, self.CurrentLineNumber)
2919 AttribDict[AttribKey] = self.__Token
2927 # @param self The object pointer
2932 def __GetEncapsulationSec(self, FfsFileObj):
2934 OldPos = self.GetFileBufferPos()
2935 if not self.__IsKeyword( "SECTION"):
2937 raise Warning("expected SECTION", self.FileName, self.CurrentLineNumber)
2942 if self.__GetAlignment():
2943 if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
2944 raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
2945 AlignValue = self.__Token
2947 if not self.__GetCglSection(FfsFileObj, AlignValue):
2948 self.SetFileBufferPos(OldPos)
2955 # Get capsule section contents and store its data into capsule list of self.Profile
2957 # @param self The object pointer
2961 def __GetCapsule(self):
2963 if not self.__GetNextToken():
2966 S = self.__Token.upper()
2969 raise Warning("Unknown section or section appear sequence error (The correct sequence should be [FD.], [FV.], [Capsule.], [VTF.], [Rule.], [OptionRom.])", self.FileName, self.CurrentLineNumber)
2970 self.__UndoToken()
2973 self.__UndoToken()
2974 if not self.__IsToken("[CAPSULE.", True):
2975 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
2977 # % (self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine :], FileLineTuple[0], FileLineTuple[1], self.CurrentOffsetWithinLine)
2978 raise Warning("expected [Capsule.]", self.FileName, self.CurrentLineNumber)
2982 CapsuleName = self.__GetUiName()
2984 raise Warning("expected capsule name", self.FileName, self.CurrentLineNumber)
2988 if not self.__IsToken( "]"):
2989 raise Warning("expected ']'", self.FileName, self.CurrentLineNumber)
2991 if self.__IsKeyword("CREATE_FILE"):
2992 if not self.__IsToken( "="):
2993 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
2995 if not self.__GetNextToken():
2996 raise Warning("expected file name", self.FileName, self.CurrentLineNumber)
2998 CapsuleObj.CreateFile = self.__Token
3000 self.__GetCapsuleStatements(CapsuleObj)
3001 self.Profile.CapsuleDict[CapsuleObj.UiCapsuleName] = CapsuleObj
3008 # @param self The object pointer
3011 def __GetCapsuleStatements(self, Obj):
3012 self.__GetCapsuleTokens(Obj)
3013 self.__GetDefineStatements(Obj)
3014 self.__GetSetStatements(Obj)
3015 self.__GetCapsuleData(Obj)
3021 # @param self The object pointer
3024 def __GetCapsuleTokens(self, Obj):
3025 if not self.__GetNextToken():
3027 while self.__Token in ("CAPSULE_GUID", "CAPSULE_HEADER_SIZE", "CAPSULE_FLAGS"):
3028 Name = self.__Token.strip()
3029 if not self.__IsToken("="):
3030 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3031 if not self.__GetNextToken():
3032 raise Warning("expected value", self.FileName, self.CurrentLineNumber)
3034 if not self.__Token in ("PersistAcrossReset", "PopulateSystemTable", "InitiateReset"):
3035 raise Warning("expected PersistAcrossReset, PopulateSystemTable, or InitiateReset", self.FileName, self.CurrentLineNumber)
3036 Value = self.__Token.strip()
3037 while self.__IsToken(","):
3039 if not self.__GetNextToken():
3040 raise Warning("expected value", self.FileName, self.CurrentLineNumber)
3041 if not self.__Token in ("PersistAcrossReset", "PopulateSystemTable", "InitiateReset"):
3042 raise Warning("expected PersistAcrossReset, PopulateSystemTable, or InitiateReset", self.FileName, self.CurrentLineNumber)
3043 Value += self.__Token.strip()
3045 Value = self.__Token.strip()
3047 if not self.__GetNextToken():
3049 self.__UndoToken()
3055 # @param self The object pointer
3058 def __GetCapsuleData(self, Obj):
3061 IsInf = self.__GetInfStatement(Obj, True)
3062 IsFile = self.__GetFileStatement(Obj, True)
3063 IsFv = self.__GetFvStatement(Obj)
3064 IsFd = self.__GetFdStatement(Obj)
3065 IsAnyFile = self.__GetAnyFileStatement(Obj)
3073 # @param self The object pointer
3078 def __GetFvStatement(self, CapsuleObj):
3080 if not self.__IsKeyword("FV"):
3083 if not self.__IsToken("="):
3084 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3086 if not self.__GetNextToken():
3087 raise Warning("expected FV name", self.FileName, self.CurrentLineNumber)
3089 if self.__Token.upper() not in self.Profile.FvDict.keys():
3090 raise Warning("FV name does not exist", self.FileName, self.CurrentLineNumber)
3093 CapsuleFv.FvName = self.__Token
3101 # @param self The object pointer
3106 def __GetFdStatement(self, CapsuleObj):
3108 if not self.__IsKeyword("FD"):
3111 if not self.__IsToken("="):
3112 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3114 if not self.__GetNextToken():
3115 raise Warning("expected FD name", self.FileName, self.CurrentLineNumber)
3117 if self.__Token.upper() not in self.Profile.FdDict.keys():
3118 raise Warning("FD name does not exist", self.FileName, self.CurrentLineNumber)
3121 CapsuleFd.FdName = self.__Token
3129 # @param self The object pointer
3134 def __GetAnyFileStatement(self, CapsuleObj):
3136 if not self.__IsKeyword("FILE"):
3139 if not self.__IsKeyword("DATA"):
3140 self.__UndoToken()
3143 if not self.__IsToken("="):
3144 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3146 if not self.__GetNextToken():
3147 raise Warning("expected File name", self.FileName, self.CurrentLineNumber)
3149 AnyFileName = self.__Token
3152 raise Warning("File %s not exists"%AnyFileName, self.FileName, self.CurrentLineNumber)
3161 # Get Rule section contents and store its data into rule list of self.Profile
3163 # @param self The object pointer
3167 def __GetRule(self):
3169 if not self.__GetNextToken():
3172 S = self.__Token.upper()
3175 raise Warning("Unknown section or section appear sequence error (The correct sequence should be [FD.], [FV.], [Capsule.], [VTF.], [Rule.], [OptionRom.])", self.FileName, self.CurrentLineNumber)
3176 self.__UndoToken()
3178 self.__UndoToken()
3179 if not self.__IsToken("[Rule.", True):
3180 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
3182 # % (self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine :], FileLineTuple[0], FileLineTuple[1], self.CurrentOffsetWithinLine)
3183 raise Warning("expected [Rule.]", self.FileName, self.CurrentLineNumber)
3185 if not self.__SkipToToken("."):
3186 raise Warning("expected '.'", self.FileName, self.CurrentLineNumber)
3188 Arch = self.__SkippedChars.rstrip(".")
3190 raise Warning("Unknown Arch '%s'" % Arch, self.FileName, self.CurrentLineNumber)
3192 ModuleType = self.__GetModuleType()
3195 if self.__IsToken("."):
3196 if not self.__GetNextWord():
3197 raise Warning("expected template name", self.FileName, self.CurrentLineNumber)
3198 TemplateName = self.__Token
3200 if not self.__IsToken( "]"):
3201 raise Warning("expected ']'", self.FileName, self.CurrentLineNumber)
3203 RuleObj = self.__GetRuleFileStatements()
3208 self.Profile.RuleDict['RULE' + \
3214 self.Profile.RuleDict['RULE' + \
3221 # self.Profile.RuleList.append(rule)
3228 # @param self The object pointer
3231 def __GetModuleType(self):
3233 if not self.__GetNextWord():
3234 raise Warning("expected Module type", self.FileName, self.CurrentLineNumber)
3235 if self.__Token.upper() not in ("SEC", "PEI_CORE", "PEIM", "DXE_CORE", \
3241 raise Warning("Unknown Module type '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3242 return self.__Token
3248 # @param self The object pointer
3251 def __GetFileExtension(self):
3252 if not self.__IsToken("."):
3253 raise Warning("expected '.'", self.FileName, self.CurrentLineNumber)
3256 if self.__GetNextToken():
3258 if Pattern.match(self.__Token):
3259 Ext = self.__Token
3262 raise Warning("Unknown file extension '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3265 raise Warning("expected file extension", self.FileName, self.CurrentLineNumber)
3271 # @param self The object pointer
3274 def __GetRuleFileStatements(self):
3276 if not self.__IsKeyword("FILE"):
3277 raise Warning("expected FILE", self.FileName, self.CurrentLineNumber)
3279 if not self.__GetNextWord():
3280 raise Warning("expected FFS type", self.FileName, self.CurrentLineNumber)
3282 Type = self.__Token.strip().upper()
3285 raise Warning("Unknown FV type '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3287 if not self.__IsToken("="):
3288 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3290 if not self.__IsKeyword("$(NAMED_GUID)"):
3291 if not self.__GetNextWord():
3292 raise Warning("expected $(NAMED_GUID)", self.FileName, self.CurrentLineNumber)
3293 if self.__Token == 'PCD':
3294 if not self.__IsToken( "("):
3295 raise Warning("expected '('", self.FileName, self.CurrentLineNumber)
3296 PcdPair = self.__GetNextPcdName()
3297 if not self.__IsToken( ")"):
3298 raise Warning("expected ')'", self.FileName, self.CurrentLineNumber)
3299 self.__Token = 'PCD('+PcdPair[1]+'.'+PcdPair[0]+')'
3301 NameGuid = self.__Token
3304 if self.__IsKeyword('RELOCS_STRIPPED') or self.__IsKeyword('RELOCS_RETAINED'):
3305 if self.__FileCouldHaveRelocFlag(Type):
3306 if self.__Token == 'RELOCS_STRIPPED':
3311 raise Warning("File type %s could not have reloc strip flag%d" % (Type, self.CurrentLineNumber), self.FileName, self.CurrentLineNumber)
3314 if self.__GetNextToken():
3316 if Pattern.match(self.__Token):
3317 KeyStringList.append(self.__Token)
3318 if self.__IsToken(","):
3319 while self.__GetNextToken():
3320 if not Pattern.match(self.__Token):
3321 raise Warning("expected KeyString \"Target_Tag_Arch\"", self.FileName, self.CurrentLineNumber)
3322 KeyStringList.append(self.__Token)
3324 if not self.__IsToken(","):
3328 self.__UndoToken()
3332 if self.__IsKeyword("Fixed", True):
3336 if self.__IsKeyword("CheckSum", True):
3340 if self.__GetAlignment():
3341 if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
3342 raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3344 if not self.__Token == "Auto":
3345 AlignValue = self.__Token
3347 if self.__IsToken("{"):
3360 IsEncapsulate = self.__GetRuleEncapsulationSection(Rule)
3361 IsLeaf = self.__GetEfiSection(Rule)
3365 if not self.__IsToken("}"):
3366 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
3372 if not self.__GetNextWord():
3373 raise Warning("expected leaf section type", self.FileName, self.CurrentLineNumber)
3375 SectionName = self.__Token
3379 raise Warning("Unknown leaf section name '%s'" % SectionName, self.FileName, self.CurrentLineNumber)
3382 if self.__IsKeyword("Fixed", True):
3385 if self.__IsKeyword("CheckSum", True):
3389 if self.__GetAlignment():
3390 if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
3391 raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3392 if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):
3393 raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
3394 SectAlignment = self.__Token
3397 if self.__IsToken('|'):
3398 Ext = self.__GetFileExtension()
3399 elif not self.__GetNextToken():
3400 raise Warning("expected File name", self.FileName, self.CurrentLineNumber)
3414 Rule.FileName = self.__Token
3421 # @param self The object pointer
3426 def __GetEfiSection(self, Obj):
3428 OldPos = self.GetFileBufferPos()
3429 if not self.__GetNextWord():
3431 SectionName = self.__Token
3435 self.__UndoToken()
3440 if self.__IsKeyword("FV_IMAGE"):
3442 if self.__IsToken( "{"):
3444 self.__GetDefineStatements(FvObj)
3445 self.__GetBlockStatement(FvObj)
3446 self.__GetSetStatements(FvObj)
3447 self.__GetFvAlignment(FvObj)
3448 self.__GetFvAttributes(FvObj)
3449 self.__GetAprioriSection(FvObj)
3450 self.__GetAprioriSection(FvObj)
3453 IsInf = self.__GetInfStatement(FvObj)
3454 IsFile = self.__GetFileStatement(FvObj)
3458 if not self.__IsToken( "}"):
3459 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
3464 if not self.__IsKeyword("FV"):
3465 raise Warning("expected 'FV'", self.FileName, self.CurrentLineNumber)
3466 FvImageSectionObj.FvFileType = self.__Token
3468 if self.__GetAlignment():
3469 if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
3470 raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3471 FvImageSectionObj.Alignment = self.__Token
3473 if self.__IsToken('|'):
3474 FvImageSectionObj.FvFileExtension = self.__GetFileExtension()
3475 elif self.__GetNextToken():
3476 if self.__Token not in ("}", "COMPAT16", "PE32", "PIC", "TE", "FV_IMAGE", "RAW", "DXE_DEPEX",\
3478 FvImageSectionObj.FvFileName = self.__Token
3480 self.__UndoToken()
3482 raise Warning("expected FV file name", self.FileName, self.CurrentLineNumber)
3490 if not self.__GetNextToken():
3491 raise Warning("expected file type", self.FileName, self.CurrentLineNumber)
3493 if self.__Token == "STRING":
3494 if not self.__RuleSectionCouldHaveString(EfiSectionObj.SectionType):
3495 raise Warning("%s section could NOT have string data%d" % (EfiSectionObj.SectionType, self.CurrentLineNumber), self.FileName, self.CurrentLineNumber)
3497 if not self.__IsToken('='):
3498 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3500 if not self.__GetNextToken():
3501 raise Warning("expected Quoted String", self.FileName, self.CurrentLineNumber)
3503 if self.__GetStringData():
3504 EfiSectionObj.StringData = self.__Token
3506 if self.__IsKeyword("BUILD_NUM"):
3507 if not self.__RuleSectionCouldHaveBuildNum(EfiSectionObj.SectionType):
3508 raise Warning("%s section could NOT have BUILD_NUM%d" % (EfiSectionObj.SectionType, self.CurrentLineNumber), self.FileName, self.CurrentLineNumber)
3510 if not self.__IsToken("="):
3511 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3512 if not self.__GetNextToken():
3513 raise Warning("expected Build number", self.FileName, self.CurrentLineNumber)
3514 EfiSectionObj.BuildNum = self.__Token
3517 EfiSectionObj.FileType = self.__Token
3518 self.__CheckRuleSectionFileType(EfiSectionObj.SectionType, EfiSectionObj.FileType)
3520 if self.__IsKeyword("Optional"):
3521 if not self.__RuleSectionCouldBeOptional(EfiSectionObj.SectionType):
3522 raise Warning("%s section could NOT be optional%d" % (EfiSectionObj.SectionType, self.CurrentLineNumber), self.FileName, self.CurrentLineNumber)
3525 if self.__IsKeyword("BUILD_NUM"):
3526 if not self.__RuleSectionCouldHaveBuildNum(EfiSectionObj.SectionType):
3527 raise Warning("%s section could NOT have BUILD_NUM%d" % (EfiSectionObj.SectionType, self.CurrentLineNumber), self.FileName, self.CurrentLineNumber)
3529 if not self.__IsToken("="):
3530 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3531 if not self.__GetNextToken():
3532 raise Warning("expected Build number", self.FileName, self.CurrentLineNumber)
3533 EfiSectionObj.BuildNum = self.__Token
3535 if self.__GetAlignment():
3536 if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"):
3537 raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3538 if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'):
3539 raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber)
3540 EfiSectionObj.Alignment = self.__Token
3542 if self.__IsKeyword('RELOCS_STRIPPED') or self.__IsKeyword('RELOCS_RETAINED'):
3543 if self.__SectionCouldHaveRelocFlag(EfiSectionObj.SectionType):
3544 if self.__Token == 'RELOCS_STRIPPED':
3549 raise Warning("Section type %s has reloc strip flag conflict with Rule" % EfiSectionObj.SectionType, self.FileName, self.CurrentLineNumber)
3551 raise Warning("Section type %s could not have reloc strip flag" % EfiSectionObj.SectionType, self.FileName, self.CurrentLineNumber)
3554 if self.__IsToken('|'):
3555 EfiSectionObj.FileExtension = self.__GetFileExtension()
3556 elif self.__GetNextToken():
3557 if self.__Token not in ("}", "COMPAT16", "PE32", "PIC", "TE", "FV_IMAGE", "RAW", "DXE_DEPEX",\
3560 if self.__Token.startswith('PCD'):
3561 self.__UndoToken()
3562 self.__GetNextWord()
3564 if self.__Token == 'PCD':
3565 if not self.__IsToken( "("):
3566 raise Warning("expected '('", self.FileName, self.CurrentLineNumber)
3567 PcdPair = self.__GetNextPcdName()
3568 if not self.__IsToken( ")"):
3569 raise Warning("expected ')'", self.FileName, self.CurrentLineNumber)
3570 self.__Token = 'PCD('+PcdPair[1]+'.'+PcdPair[0]+')'
3572 EfiSectionObj.FileName = self.__Token
3575 self.__UndoToken()
3577 raise Warning("expected section file name", self.FileName, self.CurrentLineNumber)
3586 # @param self The object pointer
3591 def __RuleSectionCouldBeOptional(self, SectionType):
3601 # @param self The object pointer
3606 def __RuleSectionCouldHaveBuildNum(self, SectionType):
3616 # @param self The object pointer
3621 def __RuleSectionCouldHaveString(self, SectionType):
3631 # @param self The object pointer
3635 def __CheckRuleSectionFileType(self, SectionType, FileType):
3638 raise Warning("Incorrect section file type '%s'" % FileType, self.FileName, self.CurrentLineNumber)
3641 raise Warning("Incorrect section file type '%s'" % FileType, self.FileName, self.CurrentLineNumber)
3644 raise Warning("Incorrect section file type '%s'" % FileType, self.FileName, self.CurrentLineNumber)
3647 raise Warning("Incorrect section file type '%s'" % FileType, self.FileName, self.CurrentLineNumber)
3650 raise Warning("Incorrect section file type '%s'" % FileType, self.FileName, self.CurrentLineNumber)
3653 raise Warning("Incorrect section file type '%s'" % FileType, self.FileName, self.CurrentLineNumber)
3656 raise Warning("Incorrect section file type '%s'" % FileType, self.FileName, self.CurrentLineNumber)
3659 raise Warning("Incorrect section file type '%s'" % FileType, self.FileName, self.CurrentLineNumber)
3662 raise Warning("Incorrect section file type '%s'" % FileType, self.FileName, self.CurrentLineNumber)
3665 raise Warning("Incorrect section file type '%s'" % FileType, self.FileName, self.CurrentLineNumber)
3671 # @param self The object pointer
3676 def __GetRuleEncapsulationSection(self, Rule):
3678 if self.__IsKeyword( "COMPRESS"):
3680 if self.__IsKeyword("PI_STD") or self.__IsKeyword("PI_NONE"):
3681 Type = self.__Token
3683 if not self.__IsToken("{"):
3684 raise Warning("expected '{'", self.FileName, self.CurrentLineNumber)
3691 IsEncapsulate = self.__GetRuleEncapsulationSection(CompressSectionObj)
3692 IsLeaf = self.__GetEfiSection(CompressSectionObj)
3696 if not self.__IsToken( "}"):
3697 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
3702 elif self.__IsKeyword( "GUIDED"):
3704 if self.__GetNextGuid():
3705 GuidValue = self.__Token
3707 if self.__IsKeyword( "$(NAMED_GUID)"):
3708 GuidValue = self.__Token
3710 AttribDict = self.__GetGuidAttrib()
3712 if not self.__IsToken("{"):
3713 raise Warning("expected '{'", self.FileName, self.CurrentLineNumber)
3723 IsEncapsulate = self.__GetRuleEncapsulationSection(GuidSectionObj)
3724 IsLeaf = self.__GetEfiSection(GuidSectionObj)
3728 if not self.__IsToken( "}"):
3729 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
3738 # Get VTF section contents and store its data into VTF list of self.Profile
3740 # @param self The object pointer
3744 def __GetVtf(self):
3746 if not self.__GetNextToken():
3749 S = self.__Token.upper()
3752 raise Warning("Unknown section or section appear sequence error (The correct sequence should be [FD.], [FV.], [Capsule.], [VTF.], [Rule.], [OptionRom.])", self.FileName, self.CurrentLineNumber)
3753 self.__UndoToken()
3756 self.__UndoToken()
3757 if not self.__IsToken("[VTF.", True):
3758 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
3760 # % (self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine :], FileLineTuple[0], FileLineTuple[1], self.CurrentOffsetWithinLine)
3761 raise Warning("expected [VTF.]", self.FileName, self.CurrentLineNumber)
3763 if not self.__SkipToToken("."):
3764 raise Warning("expected '.'", self.FileName, self.CurrentLineNumber)
3766 Arch = self.__SkippedChars.rstrip(".").upper()
3768 raise Warning("Unknown Arch '%s'" % Arch, self.FileName, self.CurrentLineNumber)
3770 if not self.__GetNextWord():
3771 raise Warning("expected VTF name", self.FileName, self.CurrentLineNumber)
3772 Name = self.__Token.upper()
3778 if self.__IsToken(","):
3779 if not self.__GetNextWord():
3780 raise Warning("expected Arch list", self.FileName, self.CurrentLineNumber)
3781 if self.__Token.upper() not in ("IA32", "X64", "IPF", "ARM"):
3782 raise Warning("Unknown Arch '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3783 VtfObj.ArchList = self.__Token.upper()
3785 if not self.__IsToken( "]"):
3786 raise Warning("expected ']'", self.FileName, self.CurrentLineNumber)
3788 if self.__IsKeyword("IA32_RST_BIN"):
3789 if not self.__IsToken("="):
3790 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3792 if not self.__GetNextToken():
3793 raise Warning("expected Reset file", self.FileName, self.CurrentLineNumber)
3795 VtfObj.ResetBin = self.__Token
3802 while self.__GetComponentStatement(VtfObj):
3805 self.Profile.VtfList.append(VtfObj)
3812 # @param self The object pointer
3817 def __GetComponentStatement(self, VtfObj):
3819 if not self.__IsKeyword("COMP_NAME"):
3822 if not self.__IsToken("="):
3823 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3825 if not self.__GetNextWord():
3826 raise Warning("expected Component Name", self.FileName, self.CurrentLineNumber)
3829 CompStatementObj.CompName = self.__Token
3831 if not self.__IsKeyword("COMP_LOC"):
3832 raise Warning("expected COMP_LOC", self.FileName, self.CurrentLineNumber)
3834 if not self.__IsToken("="):
3835 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3838 if self.__GetNextWord():
3839 CompStatementObj.CompLoc = self.__Token
3840 if self.__IsToken('|'):
3841 if not self.__GetNextWord():
3842 raise Warning("Expected Region Name", self.FileName, self.CurrentLineNumber)
3844 if self.__Token not in ("F", "N", "S"): #, "H", "L", "PH", "PL"): not support
3845 raise Warning("Unknown location type '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3847 CompStatementObj.FilePos = self.__Token
3849 self.CurrentLineNumber += 1
3850 self.CurrentOffsetWithinLine = 0
3852 if not self.__IsKeyword("COMP_TYPE"):
3853 raise Warning("expected COMP_TYPE", self.FileName, self.CurrentLineNumber)
3855 if not self.__IsToken("="):
3856 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3858 if not self.__GetNextToken():
3859 raise Warning("expected Component type", self.FileName, self.CurrentLineNumber)
3860 if self.__Token not in ("FIT", "PAL_B", "PAL_A", "OEM"):
3861 if not self.__Token.startswith("0x") or len(self.__Token) < 3 or len(self.__Token) > 4 or \
3862 not self.__HexDigit(self.__Token[2]) or not self.__HexDigit(self.__Token[-1]):
3863 raise Warning("Unknown location type '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3864 CompStatementObj.CompType = self.__Token
3866 if not self.__IsKeyword("COMP_VER"):
3867 raise Warning("expected COMP_VER", self.FileName, self.CurrentLineNumber)
3869 if not self.__IsToken("="):
3870 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3872 if not self.__GetNextToken():
3873 raise Warning("expected Component version", self.FileName, self.CurrentLineNumber)
3876 if Pattern.match(self.__Token) == None:
3877 raise Warning("Unknown version format '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3878 CompStatementObj.CompVer = self.__Token
3880 if not self.__IsKeyword("COMP_CS"):
3881 raise Warning("expected COMP_CS", self.FileName, self.CurrentLineNumber)
3883 if not self.__IsToken("="):
3884 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3886 if not self.__GetNextToken():
3887 raise Warning("expected Component CS", self.FileName, self.CurrentLineNumber)
3888 if self.__Token not in ("1", "0"):
3889 raise Warning("Unknown Component CS '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3890 CompStatementObj.CompCs = self.__Token
3893 if not self.__IsKeyword("COMP_BIN"):
3894 raise Warning("expected COMP_BIN", self.FileName, self.CurrentLineNumber)
3896 if not self.__IsToken("="):
3897 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3899 if not self.__GetNextToken():
3900 raise Warning("expected Component file", self.FileName, self.CurrentLineNumber)
3902 CompStatementObj.CompBin = self.__Token
3909 if not self.__IsKeyword("COMP_SYM"):
3910 raise Warning("expected COMP_SYM", self.FileName, self.CurrentLineNumber)
3912 if not self.__IsToken("="):
3913 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3915 if not self.__GetNextToken():
3916 raise Warning("expected Component symbol file", self.FileName, self.CurrentLineNumber)
3918 CompStatementObj.CompSym = self.__Token
3925 if not self.__IsKeyword("COMP_SIZE"):
3926 raise Warning("expected COMP_SIZE", self.FileName, self.CurrentLineNumber)
3928 if not self.__IsToken("="):
3929 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
3931 if self.__IsToken("-"):
3932 CompStatementObj.CompSize = self.__Token
3933 elif self.__GetNextDecimalNumber():
3934 CompStatementObj.CompSize = self.__Token
3935 elif self.__GetNextHexNumber():
3936 CompStatementObj.CompSize = self.__Token
3938 raise Warning("Unknown size '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3945 # Get OptionROM section contents and store its data into OptionROM list of self.Profile
3947 # @param self The object pointer
3951 def __GetOptionRom(self):
3953 if not self.__GetNextToken():
3956 S = self.__Token.upper()
3958 raise Warning("Unknown section or section appear sequence error (The correct sequence should be [FD.], [FV.], [Capsule.], [VTF.], [Rule.], [OptionRom.])", self.FileName, self.CurrentLineNumber)
3960 self.__UndoToken()
3961 if not self.__IsToken("[OptionRom.", True):
3962 raise Warning("Unknown Keyword '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)
3964 OptRomName = self.__GetUiName()
3966 if not self.__IsToken( "]"):
3967 raise Warning("expected ']'", self.FileName, self.CurrentLineNumber)
3971 self.Profile.OptRomDict[OptRomName] = OptRomObj
3974 isInf = self.__GetOptRomInfStatement(OptRomObj)
3975 isFile = self.__GetOptRomFileStatement(OptRomObj)
3985 # @param self The object pointer
3990 def __GetOptRomInfStatement(self, Obj):
3992 if not self.__IsKeyword( "INF"):
3996 self.__GetInfOptions( ffsInf)
3998 if not self.__GetNextToken():
3999 raise Warning("expected INF file path", self.FileName, self.CurrentLineNumber)
4000 ffsInf.InfFileName = self.__Token
4007 if not ffsInf.InfFileName in self.Profile.InfList:
4008 self.Profile.InfList.append(ffsInf.InfFileName)
4009 FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)
4010 self.Profile.InfFileLineList.append(FileLineTuple)
4013 self.__GetOptRomOverrides (ffsInf)
4022 # @param self The object pointer
4025 def __GetOptRomOverrides(self, Obj):
4026 if self.__IsToken('{'):
4029 if self.__IsKeyword( "PCI_VENDOR_ID"):
4030 if not self.__IsToken( "="):
4031 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
4032 if not self.__GetNextHexNumber():
4033 raise Warning("expected Hex vendor id", self.FileName, self.CurrentLineNumber)
4034 Overrides.PciVendorId = self.__Token
4037 if self.__IsKeyword( "PCI_CLASS_CODE"):
4038 if not self.__IsToken( "="):
4039 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
4040 if not self.__GetNextHexNumber():
4041 raise Warning("expected Hex class code", self.FileName, self.CurrentLineNumber)
4042 Overrides.PciClassCode = self.__Token
4045 if self.__IsKeyword( "PCI_DEVICE_ID"):
4046 if not self.__IsToken( "="):
4047 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
4048 if not self.__GetNextHexNumber():
4049 raise Warning("expected Hex device id", self.FileName, self.CurrentLineNumber)
4051 Overrides.PciDeviceId = self.__Token
4054 if self.__IsKeyword( "PCI_REVISION"):
4055 if not self.__IsToken( "="):
4056 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
4057 if not self.__GetNextHexNumber():
4058 raise Warning("expected Hex revision", self.FileName, self.CurrentLineNumber)
4059 Overrides.PciRevision = self.__Token
4062 if self.__IsKeyword( "PCI_COMPRESS"):
4063 if not self.__IsToken( "="):
4064 raise Warning("expected '='", self.FileName, self.CurrentLineNumber)
4065 if not self.__GetNextToken():
4066 raise Warning("expected TRUE/FALSE for compress", self.FileName, self.CurrentLineNumber)
4067 Overrides.NeedCompress = self.__Token.upper() == 'TRUE'
4070 if self.__IsToken( "}"):
4073 EdkLogger.error("FdfParser", FORMAT_INVALID, File=self.FileName, Line=self.CurrentLineNumber)
4081 # @param self The object pointer
4086 def __GetOptRomFileStatement(self, Obj):
4088 if not self.__IsKeyword( "FILE"):
4093 if not self.__IsKeyword("EFI") and not self.__IsKeyword("BIN"):
4094 raise Warning("expected Binary type (EFI/BIN)", self.FileName, self.CurrentLineNumber)
4095 FfsFileObj.FileType = self.__Token
4097 if not self.__GetNextToken():
4098 raise Warning("expected File path", self.FileName, self.CurrentLineNumber)
4099 FfsFileObj.FileName = self.__Token
4107 self.__GetOptRomOverrides(FfsFileObj)
4117 # @param self The object pointer
4121 def __GetCapInFd (self, FdName):
4124 if FdName.upper() in self.Profile.FdDict.keys():
4125 FdObj = self.Profile.FdDict[FdName.upper()]
4139 # @param self The object pointer
4144 def __GetReferencedFdCapTuple(self, CapObj, RefFdList = [], RefFvList = []):
4158 self.__GetReferencedFdFvTupleFromSection(CapsuleDataObj.Ffs, RefFdList, RefFvList)
4164 # @param self The object pointer
4168 def __GetFvInFd (self, FdName):
4171 if FdName.upper() in self.Profile.FdDict.keys():
4172 FdObj = self.Profile.FdDict[FdName.upper()]
4186 # @param self The object pointer
4191 def __GetReferencedFdFvTuple(self, FvObj, RefFdList = [], RefFvList = []):
4200 self.__GetReferencedFdFvTupleFromSection(FfsObj, RefFdList, RefFvList)
4206 # @param self The object pointer
4211 def __GetReferencedFdFvTupleFromSection(self, FfsFile, FdList = [], FvList = []):
4222 self.__GetReferencedFdFvTuple(SectionObj.Fv, FdList, FvList)
4231 # @param self The object pointer
4235 def CycleReferenceCheck(self):
4239 MaxLength = len (self.Profile.FvDict)
4240 for FvName in self.Profile.FvDict.keys():
4250 if FvNameFromStack.upper() in self.Profile.FvDict.keys():
4251 FvObj = self.Profile.FvDict[FvNameFromStack.upper()]
4257 self.__GetReferencedFdFvTuple(FvObj, RefFdList, RefFvList)
4264 FvInFdList = self.__GetFvInFd(RefFdName)
4288 MaxLength = len (self.Profile.CapsuleDict)
4289 for CapName in self.Profile.CapsuleDict.keys():
4303 if CapNameFromStack.upper() in self.Profile.CapsuleDict.keys():
4304 CapObj = self.Profile.CapsuleDict[CapNameFromStack.upper()]
4310 self.__GetReferencedFdCapTuple(CapObj, RefFdList, RefFvList)
4320 CapInFdList = self.__GetCapInFd(RefFdName)
4331 FvInFdList = self.__GetFvInFd(RefFdName)
4348 if RefFvName.upper() in self.Profile.FvDict.keys():
4349 FvObj = self.Profile.FvDict[RefFvName.upper()]
4352 self.__GetReferencedFdFvTuple(FvObj, RefFdList, RefFvList)