You can subscribe to this list here.
2010 |
Jan
(18) |
Feb
(75) |
Mar
(40) |
Apr
(18) |
May
(12) |
Jun
(13) |
Jul
(17) |
Aug
(25) |
Sep
(31) |
Oct
(16) |
Nov
(20) |
Dec
(13) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2011 |
Jan
(5) |
Feb
(7) |
Mar
(6) |
Apr
(21) |
May
(12) |
Jun
(35) |
Jul
(29) |
Aug
(56) |
Sep
(64) |
Oct
(43) |
Nov
(60) |
Dec
(26) |
2012 |
Jan
(6) |
Feb
(12) |
Mar
(17) |
Apr
(10) |
May
(11) |
Jun
(13) |
Jul
(6) |
Aug
(2) |
Sep
(3) |
Oct
(9) |
Nov
(1) |
Dec
(2) |
2013 |
Jan
(5) |
Feb
(5) |
Mar
(1) |
Apr
(3) |
May
(3) |
Jun
(3) |
Jul
(8) |
Aug
(7) |
Sep
(2) |
Oct
(4) |
Nov
(14) |
Dec
(10) |
2014 |
Jan
(22) |
Feb
(7) |
Mar
(3) |
Apr
(4) |
May
(1) |
Jun
(6) |
Jul
(4) |
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
From: <yd...@us...> - 2013-12-18 08:52:09
|
Revision: 2628 http://sourceforge.net/p/edk2-buildtools/code/2628 Author: ydong10 Date: 2013-12-18 08:52:05 +0000 (Wed, 18 Dec 2013) Log Message: ----------- Update vfrcompile referenced uefi spec version from 2.3.1 to 2.4. Signed-off-by: Eric Dong <eri...@in...> Reviewed-by: Liming Gao <lim...@in...> Modified Paths: -------------- trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h Modified: trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp =================================================================== --- trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp 2013-12-16 07:30:08 UTC (rev 2627) +++ trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp 2013-12-18 08:52:05 UTC (rev 2628) @@ -406,7 +406,7 @@ UINT32 Index; CONST CHAR8 *Help[] = { " ", - "VfrCompile version " VFR_COMPILER_VERSION __BUILD_VERSION VFR_COMPILER_UPDATE_TIME, + "VfrCompile version " VFR_COMPILER_VERSION __BUILD_VERSION, "Copyright (c) 2004-2013 Intel Corporation. All rights reserved.", " ", "Usage: VfrCompile [options] VfrFile", Modified: trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h =================================================================== --- trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h 2013-12-16 07:30:08 UTC (rev 2627) +++ trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h 2013-12-18 08:52:05 UTC (rev 2628) @@ -23,8 +23,7 @@ #include "ParseInf.h" #define PROGRAM_NAME "VfrCompile" -#define VFR_COMPILER_VERSION " 2.00 (UEFI 2.3.1)" -#define VFR_COMPILER_UPDATE_TIME " updated on 2011/07/15" +#define VFR_COMPILER_VERSION " 2.00 (UEFI 2.4) " // // This is how we invoke the C preprocessor on the VFR source file // to resolve #defines, #includes, etc. To make C source files This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hc...@us...> - 2013-12-16 07:30:13
|
Revision: 2627 http://sourceforge.net/p/edk2-buildtools/code/2627 Author: hchen30 Date: 2013-12-16 07:30:08 +0000 (Mon, 16 Dec 2013) Log Message: ----------- 1. Deploy a full check for file header issues to make sure that the same checkpoints on different file types keep consistent. Signed-off-by: Hess Chen <hes...@in...> Reviewed-by: Liu, Yingke D <yin...@in...> Reviewed-by: Feng, Bob C <bob...@in...> Modified Paths: -------------- trunk/BaseTools/Source/Python/UPT/Library/DataType.py trunk/BaseTools/Source/Python/UPT/Logger/StringTable.py trunk/BaseTools/Source/Python/UPT/Parser/DecParser.py trunk/BaseTools/Source/Python/UPT/Parser/InfParser.py Modified: trunk/BaseTools/Source/Python/UPT/Library/DataType.py =================================================================== --- trunk/BaseTools/Source/Python/UPT/Library/DataType.py 2013-12-11 07:49:55 UTC (rev 2626) +++ trunk/BaseTools/Source/Python/UPT/Library/DataType.py 2013-12-16 07:30:08 UTC (rev 2627) @@ -1,7 +1,7 @@ ## @file # This file is used to define class for data type structure # -# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR> +# Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR> # # This program and the accompanying materials are licensed and made available # under the terms and conditions of the BSD License which accompanies this @@ -340,6 +340,7 @@ TAB_BACK_SLASH = '/' TAB_SPECIAL_COMMENT = '##' TAB_HEADER_COMMENT = '@file' +TAB_BINARY_HEADER_COMMENT = '@BinaryHeader' TAB_STAR = "*" TAB_EDK_SOURCE = '$(EDK_SOURCE)' @@ -735,7 +736,12 @@ TAB_INF_PCD = 'Pcd' TAB_INF_PCD_EX = 'PcdEx' TAB_INF_GUIDTYPE_VAR = 'Variable' - +TAB_INF_ABSTRACT = 'STR_MODULE_ABSTRACT' +TAB_INF_DESCRIPTION = 'STR_MODULE_DESCRIPTION' +TAB_INF_LICENSE = 'STR_MODULE_LICENSE' +TAB_INF_BINARY_ABSTRACT = 'STR_MODULE_BINARY_ABSTRACT' +TAB_INF_BINARY_DESCRIPTION = 'STR_MODULE_BINARY_DESCRIPTION' +TAB_INF_BINARY_LICENSE = 'STR_MODULE_BINARY_LICENSE' # # Dec Definitions # @@ -745,7 +751,12 @@ TAB_DEC_DEFINES_PACKAGE_GUID = 'PACKAGE_GUID' TAB_DEC_DEFINES_PACKAGE_VERSION = 'PACKAGE_VERSION' TAB_DEC_DEFINES_PKG_UNI_FILE = 'PKG_UNI_FILE' - +TAB_DEC_PACKAGE_ABSTRACT = 'STR_PACKAGE_ABSTRACT' +TAB_DEC_PACKAGE_DESCRIPTION = 'STR_PACKAGE_DESCRIPTION' +TAB_DEC_PACKAGE_LICENSE = 'STR_PACKAGE_LICENSE' +TAB_DEC_BINARY_ABSTRACT = 'STR_PACKAGE_BINARY_ABSTRACT' +TAB_DEC_BINARY_DESCRIPTION = 'STR_PACKAGE_BINARY_DESCRIPTION' +TAB_DEC_BINARY_LICENSE = 'STR_PACKAGE_ASBUILT_LICENSE' # # Dsc Definitions # @@ -814,6 +825,8 @@ TAB_HEADER_DESCRIPTION = 'Description' TAB_HEADER_COPYRIGHT = 'Copyright' TAB_HEADER_LICENSE = 'License' +TAB_BINARY_HEADER_IDENTIFIER = 'BinaryHeader' +TAB_BINARY_HEADER_USERID = 'TianoCore' # # Build database path # Modified: trunk/BaseTools/Source/Python/UPT/Logger/StringTable.py =================================================================== --- trunk/BaseTools/Source/Python/UPT/Logger/StringTable.py 2013-12-11 07:49:55 UTC (rev 2626) +++ trunk/BaseTools/Source/Python/UPT/Logger/StringTable.py 2013-12-16 07:30:08 UTC (rev 2627) @@ -530,6 +530,10 @@ _("Header comment section must have copyright information") ERR_LICENSE_MISSING = \ _("Header comment section must have license information") +ERR_INVALID_BINARYHEADER_FORMAT = \ +_("Binary Header comment section must have abstract,description,copyright,license information") +ERR_MULTIPLE_BINARYHEADER_EXIST = \ +_("the inf file at most support one BinaryHeader at the fileheader section.") ERR_INVALID_COMMENT_FORMAT = _("Comment must start with #") ERR_USER_ABORT = _("User has stopped the application") ERR_DIST_EXT_ERROR = \ @@ -547,6 +551,8 @@ ERR_NOT_SUPPORTED_SA_MODULE = _("Stand-alone module distribution does not allow EDK 1 INF") ERR_INSTALL_DIST_NOT_FOUND = \ _("Distribution file to be installed is not found in current working directory or workspace: %s") +ERR_BINARY_HEADER_ORDER = _("Binary header must follow the file header.") +ERR_NO_SOURCE_HEADER = _("File header statement \"## @file\" must exist at the first place.") # # Expression error message Modified: trunk/BaseTools/Source/Python/UPT/Parser/DecParser.py =================================================================== --- trunk/BaseTools/Source/Python/UPT/Parser/DecParser.py 2013-12-11 07:49:55 UTC (rev 2626) +++ trunk/BaseTools/Source/Python/UPT/Parser/DecParser.py 2013-12-16 07:30:08 UTC (rev 2627) @@ -1,7 +1,7 @@ ## @file # This file is used to parse DEC file. It will consumed by DecParser # -# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR> +# Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR> # # This program and the accompanying materials are licensed and made available # under the terms and conditions of the BSD License which accompanies this @@ -19,6 +19,7 @@ from Logger.ToolError import FILE_PARSE_FAILURE from Logger.ToolError import FILE_OPEN_FAILURE from Logger import StringTable as ST +from Logger.ToolError import FORMAT_INVALID import Library.DataType as DT from Library.ParserValidate import IsValidToken @@ -735,6 +736,7 @@ _DecComments.__init__(self) _DecBase.__init__(self, RawData) + self.BinaryHeadComment = [] self._Define = _DecDefine(RawData) self._Include = _DecInclude(RawData) self._Guid = _DecGuid(RawData) @@ -778,8 +780,13 @@ # Parse DEC file # def ParseDecComment(self): + IsFileHeader = False + IsBinaryHeader = False + FileHeaderLineIndex = -1 + BinaryHeaderLineIndex = -1 while not self._RawData.IsEndOfFile(): Line, Comment = CleanString(self._RawData.GetNextLine()) + # # Header must be pure comment # @@ -787,14 +794,55 @@ self._RawData.UndoNextLine() break - if Comment: + if Comment and Comment.startswith(DT.TAB_SPECIAL_COMMENT) and Comment.find(DT.TAB_HEADER_COMMENT) > 0 \ + and not Comment[2:Comment.find(DT.TAB_HEADER_COMMENT)].strip(): + IsFileHeader = True + IsBinaryHeader = False + FileHeaderLineIndex = self._RawData.LineIndex + + # + # Get license information before '@file' + # + if not IsFileHeader and not IsBinaryHeader and Comment and Comment.startswith(DT.TAB_COMMENT_SPLIT) and \ + DT.TAB_BINARY_HEADER_COMMENT not in Comment: self._HeadComment.append((Comment, self._RawData.LineIndex)) + + if Comment and IsFileHeader and \ + not(Comment.startswith(DT.TAB_SPECIAL_COMMENT) \ + and Comment.find(DT.TAB_BINARY_HEADER_COMMENT) > 0): + self._HeadComment.append((Comment, self._RawData.LineIndex)) # # Double '#' indicates end of header comments # - if not Comment or Comment == DT.TAB_SPECIAL_COMMENT: + if (not Comment or Comment == DT.TAB_SPECIAL_COMMENT) and IsFileHeader: + IsFileHeader = False + continue + + if Comment and Comment.startswith(DT.TAB_SPECIAL_COMMENT) \ + and Comment.find(DT.TAB_BINARY_HEADER_COMMENT) > 0: + IsBinaryHeader = True + IsFileHeader = False + BinaryHeaderLineIndex = self._RawData.LineIndex + + if Comment and IsBinaryHeader: + self.BinaryHeadComment.append((Comment, self._RawData.LineIndex)) + # + # Double '#' indicates end of header comments + # + if (not Comment or Comment == DT.TAB_SPECIAL_COMMENT) and IsBinaryHeader: + IsBinaryHeader = False break - + + if FileHeaderLineIndex > -1 and not IsFileHeader and not IsBinaryHeader: + break + + if FileHeaderLineIndex > BinaryHeaderLineIndex and FileHeaderLineIndex > -1 and BinaryHeaderLineIndex > -1: + self._LoggerError(ST.ERR_BINARY_HEADER_ORDER) + + if FileHeaderLineIndex == -1: + Logger.Error(TOOL_NAME, FORMAT_INVALID, + ST.ERR_NO_SOURCE_HEADER, + File=self._RawData.Filename) return def _StopCurrentParsing(self, Line): Modified: trunk/BaseTools/Source/Python/UPT/Parser/InfParser.py =================================================================== --- trunk/BaseTools/Source/Python/UPT/Parser/InfParser.py 2013-12-11 07:49:55 UTC (rev 2626) +++ trunk/BaseTools/Source/Python/UPT/Parser/InfParser.py 2013-12-16 07:30:08 UTC (rev 2627) @@ -1,7 +1,7 @@ ## @file # This file contained the parser for INF file # -# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR> +# Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR> # # This program and the accompanying materials are licensed and made available # under the terms and conditions of the BSD License which accompanies this @@ -128,6 +128,10 @@ # HeaderCommentStart = False HeaderCommentEnd = False + HeaderStarLineNo = -1 + BinaryHeaderCommentStart = False + BinaryHeaderCommentEnd = False + BinaryHeaderStarLineNo = -1 # # While Section ends. parse whole section contents. @@ -196,22 +200,16 @@ # if Line.startswith(DT.TAB_SPECIAL_COMMENT) and \ (Line.find(DT.TAB_HEADER_COMMENT) > -1) and \ - not HeaderCommentStart: - if CurrentSection != DT.MODEL_UNKNOWN: - Logger.Error("Parser", - PARSER_ERROR, - ST.ERR_INF_PARSER_HEADER_FILE, - File=Filename, - Line=LineNo, - RaiseError = Logger.IS_RAISE_ERROR) - else: - CurrentSection = DT.MODEL_META_DATA_FILE_HEADER - # - # Append the first line to section lines. - # - SectionLines.append((Line, LineNo)) - HeaderCommentStart = True - continue + not HeaderCommentStart and not HeaderCommentEnd: + + CurrentSection = DT.MODEL_META_DATA_FILE_HEADER + # + # Append the first line to section lines. + # + HeaderStarLineNo = LineNo + SectionLines.append((Line, LineNo)) + HeaderCommentStart = True + continue # # Collect Header content. @@ -226,17 +224,72 @@ # if (Line.startswith(DT.TAB_SPECIAL_COMMENT) or not Line.strip().startswith("#")) and HeaderCommentStart \ and not HeaderCommentEnd: - SectionLines.append((Line, LineNo)) + HeaderCommentEnd = True + BinaryHeaderCommentStart = False + BinaryHeaderCommentEnd = False HeaderCommentStart = False + if Line.find(DT.TAB_BINARY_HEADER_COMMENT) > -1: + self.InfHeaderParser(SectionLines, self.InfHeader, self.FileName) + SectionLines = [] + else: + SectionLines.append((Line, LineNo)) # # Call Header comment parser. # self.InfHeaderParser(SectionLines, self.InfHeader, self.FileName) SectionLines = [] + continue + + # + # check whether binary header comment section started + # + if Line.startswith(DT.TAB_SPECIAL_COMMENT) and \ + (Line.find(DT.TAB_BINARY_HEADER_COMMENT) > -1) and \ + not BinaryHeaderCommentStart: + SectionLines = [] + CurrentSection = DT.MODEL_META_DATA_FILE_HEADER + # + # Append the first line to section lines. + # + BinaryHeaderStarLineNo = LineNo + SectionLines.append((Line, LineNo)) + BinaryHeaderCommentStart = True HeaderCommentEnd = True continue # + # check whether there are more than one binary header exist + # + if Line.startswith(DT.TAB_SPECIAL_COMMENT) and BinaryHeaderCommentStart and \ + not BinaryHeaderCommentEnd and (Line.find(DT.TAB_BINARY_HEADER_COMMENT) > -1): + Logger.Error('Parser', + FORMAT_INVALID, + ST.ERR_MULTIPLE_BINARYHEADER_EXIST, + File=Filename) + + # + # Collect Binary Header content. + # + if (Line.startswith(DT.TAB_COMMENT_SPLIT) and CurrentSection == DT.MODEL_META_DATA_FILE_HEADER) and\ + BinaryHeaderCommentStart and not Line.startswith(DT.TAB_SPECIAL_COMMENT) and not\ + BinaryHeaderCommentEnd and NextLine != '': + SectionLines.append((Line, LineNo)) + continue + # + # Binary Header content end + # + if (Line.startswith(DT.TAB_SPECIAL_COMMENT) or not Line.strip().startswith(DT.TAB_COMMENT_SPLIT)) and \ + BinaryHeaderCommentStart and not BinaryHeaderCommentEnd: + SectionLines.append((Line, LineNo)) + BinaryHeaderCommentStart = False + # + # Call Binary Header comment parser. + # + self.InfHeaderParser(SectionLines, self.InfBinaryHeader, self.FileName, True) + SectionLines = [] + BinaryHeaderCommentEnd = True + continue + # # Find a new section tab # Or at the last line of INF file, # need to process the last section. @@ -255,6 +308,10 @@ # if (Line.startswith(DT.TAB_SECTION_START) and \ Line.find(DT.TAB_SECTION_END) > -1) or LastSectionFalg: + + HeaderCommentEnd = True + BinaryHeaderCommentEnd = True + if not LastSectionFalg: # # check to prevent '#' inside section header @@ -333,18 +390,17 @@ # Clear section lines # SectionLines = [] - # - # End of for - # - # - # Found the first section, No file header. - # - if DefineSectionParsedFlag and not HeaderCommentEnd: + + if HeaderStarLineNo == -1: Logger.Error("InfParser", FORMAT_INVALID, - ST.ERR_INF_PARSER_HEADER_MISSGING, + ST.ERR_NO_SOURCE_HEADER, File=self.FullPath) - + if BinaryHeaderStarLineNo > -1 and HeaderStarLineNo > -1 and HeaderStarLineNo > BinaryHeaderStarLineNo: + Logger.Error("InfParser", + FORMAT_INVALID, + ST.ERR_BINARY_HEADER_ORDER, + File=self.FullPath) # # EDKII INF should not have EDKI style comment # @@ -627,4 +683,4 @@ SectionType = gINF_SECTION_DEF[SectionName.upper()] return SectionType - \ No newline at end of file + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yi...@us...> - 2013-12-11 07:49:58
|
Revision: 2626 http://sourceforge.net/p/edk2-buildtools/code/2626 Author: yingke Date: 2013-12-11 07:49:55 +0000 (Wed, 11 Dec 2013) Log Message: ----------- 1. Only HEX value was allowed by OEM_CAPSULE_FLAGS. 2. The value of offset PCD is only the offset not including base address in expression which is used by region offset and size. Reviewed-by: Hesheng Chen <hes...@in...> Signed-off-by: Yingke Liu <yin...@in...> Modified Paths: -------------- trunk/BaseTools/Source/Python/GenFds/FdfParser.py Modified: trunk/BaseTools/Source/Python/GenFds/FdfParser.py =================================================================== --- trunk/BaseTools/Source/Python/GenFds/FdfParser.py 2013-12-10 07:35:47 UTC (rev 2625) +++ trunk/BaseTools/Source/Python/GenFds/FdfParser.py 2013-12-11 07:49:55 UTC (rev 2626) @@ -1732,8 +1732,7 @@ try: return long( ValueExpression(Expr, - dict(['%s.%s' % (Pcd[1], Pcd[0]), Val] - for Pcd, Val in self.Profile.PcdDict.iteritems()) + self.__CollectMacroPcd() )(True),0) except Exception: self.SetFileBufferPos(StartPos) @@ -1772,11 +1771,13 @@ self.__UndoToken() RegionObj.PcdOffset = self.__GetNextPcdName() self.Profile.PcdDict[RegionObj.PcdOffset] = "0x%08X" % (RegionObj.Offset + long(Fd.BaseAddress, 0)) + self.__PcdDict['%s.%s' % (RegionObj.PcdOffset[1], RegionObj.PcdOffset[0])] = "0x%x" % RegionObj.Offset FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber) self.Profile.PcdFileLineDict[RegionObj.PcdOffset] = FileLineTuple if self.__IsToken( "|"): RegionObj.PcdSize = self.__GetNextPcdName() self.Profile.PcdDict[RegionObj.PcdSize] = "0x%08X" % RegionObj.Size + self.__PcdDict['%s.%s' % (RegionObj.PcdSize[1], RegionObj.PcdSize[0])] = "0x%x" % RegionObj.Size FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber) self.Profile.PcdFileLineDict[RegionObj.PcdSize] = FileLineTuple @@ -3063,12 +3064,14 @@ Value += self.__Token.strip() elif Name == 'OEM_CAPSULE_FLAGS': Value = self.__Token.strip() + if not Value.upper().startswith('0X'): + raise Warning("expected hex value between 0x0000 and 0xFFFF", self.FileName, self.CurrentLineNumber) try: Value = int(Value, 0) except ValueError: - raise Warning("expected integer value between 0x0000 and 0xFFFF", self.FileName, self.CurrentLineNumber) + raise Warning("expected hex value between 0x0000 and 0xFFFF", self.FileName, self.CurrentLineNumber) if not 0x0000 <= Value <= 0xFFFF: - raise Warning("expected integer value between 0x0000 and 0xFFFF", self.FileName, self.CurrentLineNumber) + raise Warning("expected hex value between 0x0000 and 0xFFFF", self.FileName, self.CurrentLineNumber) Value = self.__Token.strip() else: Value = self.__Token.strip() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yi...@us...> - 2013-12-10 07:35:50
|
Revision: 2625 http://sourceforge.net/p/edk2-buildtools/code/2625 Author: yingke Date: 2013-12-10 07:35:47 +0000 (Tue, 10 Dec 2013) Log Message: ----------- A minor change to UPT XML to obey UDP spec. Reviewed-by: Hesheng Chen <hes...@in...> Signed-off-by: Yingke Liu <yin...@in...> Modified Paths: -------------- trunk/BaseTools/Source/Python/UPT/Xml/CommonXml.py Modified: trunk/BaseTools/Source/Python/UPT/Xml/CommonXml.py =================================================================== --- trunk/BaseTools/Source/Python/UPT/Xml/CommonXml.py 2013-12-10 02:19:07 UTC (rev 2624) +++ trunk/BaseTools/Source/Python/UPT/Xml/CommonXml.py 2013-12-10 07:35:47 UTC (rev 2625) @@ -1,7 +1,7 @@ ## @file # This file is used to parse a PCD file of .PKG file # -# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR> +# Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR> # # This program and the accompanying materials are licensed and made available # under the terms and conditions of the BSD License which accompanies this @@ -357,8 +357,10 @@ Executable = XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'Executable') if Executable.upper() == "TRUE": Executable = True + elif Executable.upper() == "FALSE": + Executable = False else: - Executable = False + Executable = '' self.Files.append([Filename, Executable]) MiscFile = MiscFileObject() @@ -392,8 +394,10 @@ OsType = XmlAttribute(XmlNode(SubItem, '%s/Filename' % Key), 'OS') if Executable.upper() == "TRUE": Executable = True + elif Executable.upper() == "FALSE": + Executable = False else: - Executable = False + Executable = '' self.Files.append([Filename, Executable, OsType]) MiscFile = MiscFileObject() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yd...@us...> - 2013-12-10 02:19:11
|
Revision: 2624 http://sourceforge.net/p/edk2-buildtools/code/2624 Author: ydong10 Date: 2013-12-10 02:19:07 +0000 (Tue, 10 Dec 2013) Log Message: ----------- Update the logic, when vfr reference a not defined varstore, report error. Signed-off-by: Eric Dong <eri...@in...> Reviewed-by: Liming Gao <lim...@in...> Modified Paths: -------------- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp =================================================================== --- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2013-12-06 02:52:50 UTC (rev 2623) +++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2013-12-10 02:19:07 UTC (rev 2624) @@ -855,17 +855,6 @@ // Get VarStoreType // ReturnCode = lCVfrDataStorage.GetVarStoreId (FName, &Info.mVarStoreId); - if (ReturnCode == VFR_RETURN_UNDEFINED) { - lCVfrDataStorage.DeclareBufferVarStore ( - FName, - LocalFormSetGuid, - &lCVfrVarDataTypeDB, - FName, - EFI_VARSTORE_ID_INVALID, - FALSE - ); - ReturnCode = lCVfrDataStorage.GetVarStoreId (FName, &Info.mVarStoreId, LocalFormSetGuid); - } if (ReturnCode != VFR_RETURN_SUCCESS) { gCVfrErrorHandle.PrintMsg (pNode->mLineNo, FName, "Error", "Var Store Type is not defined"); return ReturnCode; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lg...@us...> - 2013-12-06 02:52:53
|
Revision: 2623 http://sourceforge.net/p/edk2-buildtools/code/2623 Author: lgao4 Date: 2013-12-06 02:52:50 +0000 (Fri, 06 Dec 2013) Log Message: ----------- 1. Fixed the error of get incorrect pcd value of DynamicHii type. 2. Fix build.exe '-x skuid' option error 3. Fixed the data with 2 bytes alignment in the stringtable of External PCD Database 4. Fixed the issue that Patchable Pcd does not list in AsBuildInf file Signed-off-by: Feng, Bob C <bob...@in...> Reviewed-by: Liu, Yingke D <yin...@in...> Reviewed-by: Chen, Hesheng hes...@in... Modified Paths: -------------- trunk/BaseTools/Source/Python/AutoGen/GenPcdDb.py trunk/BaseTools/Source/Python/Common/String.py trunk/BaseTools/Source/Python/CommonDataClass/DataClass.py trunk/BaseTools/Source/Python/GenFds/FfsInfStatement.py trunk/BaseTools/Source/Python/Workspace/MetaFileParser.py trunk/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py Modified: trunk/BaseTools/Source/Python/AutoGen/GenPcdDb.py =================================================================== --- trunk/BaseTools/Source/Python/AutoGen/GenPcdDb.py 2013-12-06 01:44:58 UTC (rev 2622) +++ trunk/BaseTools/Source/Python/AutoGen/GenPcdDb.py 2013-12-06 02:52:50 UTC (rev 2623) @@ -842,6 +842,7 @@ # resolve variable table offset for VariableEntries in VariableTable: + skuindex = 0 for VariableEntryPerSku in VariableEntries: (VariableHeadGuidIndex, VariableHeadStringIndex, SKUVariableOffset, VariableOffset, VariableRefTable) = VariableEntryPerSku[:] DbIndex = 0 @@ -853,7 +854,9 @@ DbOffset += DbItemTotal[DbIndex].GetListSize() else: assert(False) - + if isinstance(VariableRefTable[0],list): + DbOffset += skuindex * 4 + skuindex += 1 if DbIndex >= InitTableNum: assert(False) @@ -995,10 +998,6 @@ DbFile.write(PcdDbBuffer) Changed = SaveFileOnChange(DbFileName, DbFile.getvalue(), True) - -def CArrayToArray(carray): - return "{%s, 0x00}" % ", ".join(["0x%02x" % ord(C) for C in carray]) - ## Create PCD database in DXE or PEI phase # # @param Platform The platform object @@ -1094,6 +1093,8 @@ Dict['PCD_TOKENSPACE_MAP'] = [] Dict['PCD_NAME_OFFSET'] = [] + PCD_STRING_INDEX_MAP = {} + StringTableIndex = 0 StringTableSize = 0 NumberOfLocalTokens = 0 @@ -1172,10 +1173,7 @@ Pcd.TokenTypeList += ['PCD_TYPE_HII'] Pcd.InitString = 'INIT' # store VariableName to stringTable and calculate the VariableHeadStringIndex - if Sku.VariableName.startswith('{'): - VariableNameStructure = CArrayToArray(Sku.VariableName) - else: - VariableNameStructure = StringToArray(Sku.VariableName) + VariableNameStructure = StringToArray(Sku.VariableName) if VariableNameStructure not in Dict['STRING_TABLE_VALUE']: Dict['STRING_TABLE_CNAME'].append(CName) Dict['STRING_TABLE_GUID'].append(TokenSpaceGuid) @@ -1183,11 +1181,15 @@ Dict['STRING_TABLE_INDEX'].append('') else: Dict['STRING_TABLE_INDEX'].append('_%d' % StringTableIndex) - - Dict['STRING_TABLE_LENGTH'].append((len(Sku.VariableName) - 3 + 1) * 2 ) + VarNameSize = len(VariableNameStructure.replace(',',' ').split()) + Dict['STRING_TABLE_LENGTH'].append(VarNameSize ) Dict['STRING_TABLE_VALUE'].append(VariableNameStructure) + StringHeadOffsetList.append(str(StringTableSize) + 'U') + VarStringDbOffsetList = [] + VarStringDbOffsetList.append(StringTableSize) + Dict['STRING_DB_VALUE'].append(VarStringDbOffsetList) StringTableIndex += 1 - StringTableSize += (len(Sku.VariableName) - 3 + 1) * 2 + StringTableSize += len(VariableNameStructure.replace(',',' ').split()) VariableHeadStringIndex = 0 for Index in range(Dict['STRING_TABLE_VALUE'].index(VariableNameStructure)): VariableHeadStringIndex += Dict['STRING_TABLE_LENGTH'][Index] @@ -1246,7 +1248,7 @@ # the Pcd default value was filled before VariableOffset = len(Dict['VARDEF_DB_VALUE_' + Pcd.DatumType]) - 1 VariableRefTable = Dict['VARDEF_DB_VALUE_' + Pcd.DatumType] - VariableDbValueList.append([VariableHeadGuidIndex, VariableHeadStringIndex, Sku.VariableOffset, VariableOffset, VariableRefTable]) + VariableDbValueList.append([VariableHeadGuidIndex, VariableHeadStringIndex, Sku.VariableOffset, VariableOffset, VariableRefTable]) elif Sku.VpdOffset != '': Pcd.TokenTypeList += ['PCD_TYPE_VPD'] @@ -1278,26 +1280,31 @@ else: Dict['STRING_TABLE_INDEX'].append('_%d' % StringTableIndex) if Sku.DefaultValue[0] == 'L': - Size = (len(Sku.DefaultValue) - 3 + 1) * 2 - Dict['STRING_TABLE_VALUE'].append(StringToArray(Sku.DefaultValue)) + DefaultValueBinStructure = StringToArray(Sku.DefaultValue) + Size = len(DefaultValueBinStructure.replace(',',' ').split()) + Dict['STRING_TABLE_VALUE'].append(DefaultValueBinStructure) elif Sku.DefaultValue[0] == '"': - Size = len(Sku.DefaultValue) - 2 + 1 - Dict['STRING_TABLE_VALUE'].append(StringToArray(Sku.DefaultValue)) + DefaultValueBinStructure = StringToArray(Sku.DefaultValue) + Size = len(DefaultValueBinStructure.replace(',',' ').split()) + Dict['STRING_TABLE_VALUE'].append(DefaultValueBinStructure) elif Sku.DefaultValue[0] == '{': - Size = len(Sku.DefaultValue.replace(',',' ').split()) - Dict['STRING_TABLE_VALUE'].append(Sku.DefaultValue) + DefaultValueBinStructure = StringToArray(Sku.DefaultValue) + Size = len(DefaultValueBinStructure.replace(',',' ').split()) + Dict['STRING_TABLE_VALUE'].append(DefaultValueBinStructure) StringHeadOffsetList.append(str(StringTableSize) + 'U') StringDbOffsetList.append(StringTableSize) Dict['SIZE_TABLE_CNAME'].append(CName) - Dict['SIZE_TABLE_GUID'].append(TokenSpaceGuid) - Dict['SIZE_TABLE_CURRENT_LENGTH'].append(str(Size) + 'U') - Dict['SIZE_TABLE_MAXIMUM_LENGTH'].append(str(Pcd.MaxDatumSize) + 'U') + Dict['SIZE_TABLE_GUID'].append(TokenSpaceGuid) if Pcd.MaxDatumSize != '': MaxDatumSize = int(Pcd.MaxDatumSize, 0) if MaxDatumSize < Size: MaxDatumSize = Size Size = MaxDatumSize + if Size % 2: + Size += 1 + Dict['SIZE_TABLE_CURRENT_LENGTH'].append(str(Size) + 'U') + Dict['SIZE_TABLE_MAXIMUM_LENGTH'].append(str(Pcd.MaxDatumSize) + 'U') Dict['STRING_TABLE_LENGTH'].append(Size) StringTableIndex += 1 StringTableSize += (Size) @@ -1352,6 +1359,7 @@ Dict['STRING_HEAD_NUMSKUS_DECL'].append(len(Pcd.SkuInfoList)) Dict['STRING_HEAD_VALUE'].append(', '.join(StringHeadOffsetList)) Dict['STRING_DB_VALUE'].append(StringDbOffsetList) + PCD_STRING_INDEX_MAP[len(Dict['STRING_HEAD_CNAME_DECL']) -1 ] = len(Dict['STRING_DB_VALUE']) -1 if 'PCD_TYPE_DATA' in Pcd.TokenTypeList: Dict[Pcd.InitString+'_CNAME_DECL_'+Pcd.DatumType].append(CName) Dict[Pcd.InitString+'_GUID_DECL_'+Pcd.DatumType].append(TokenSpaceGuid) @@ -1405,11 +1413,12 @@ TokenSpaceGuidCNameArray = StringToArray('"' + TokenSpaceGuidCName + '"' ) if TokenSpaceGuidCNameArray not in Dict['PCD_TOKENSPACE']: Dict['PCD_TOKENSPACE'].append(TokenSpaceGuidCNameArray) - Dict['PCD_TOKENSPACE_LENGTH'].append( len(TokenSpaceGuidCName) + 1 ) + Dict['PCD_TOKENSPACE_LENGTH'].append( len(TokenSpaceGuidCNameArray.split(",")) ) Dict['PCD_TOKENSPACE_MAP'][GeneratedTokenNumber] = Dict['PCD_TOKENSPACE'].index(TokenSpaceGuidCNameArray) - Dict['PCD_CNAME'][GeneratedTokenNumber] = StringToArray('"' + CName + '"' ) + CNameBinArray = StringToArray('"' + CName + '"' ) + Dict['PCD_CNAME'][GeneratedTokenNumber] = CNameBinArray - Dict['PCD_CNAME_LENGTH'][GeneratedTokenNumber] = len(CName) + 1 + Dict['PCD_CNAME_LENGTH'][GeneratedTokenNumber] = len(CNameBinArray.split(",")) Pcd.TokenTypeList = list(set(Pcd.TokenTypeList)) @@ -1427,6 +1436,7 @@ if 'PCD_TYPE_STRING' in Pcd.TokenTypeList and 'PCD_TYPE_HII' not in Pcd.TokenTypeList: # Find index by CName, TokenSpaceGuid Offset = GetMatchedIndex(CName, Dict['STRING_HEAD_CNAME_DECL'], TokenSpaceGuid, Dict['STRING_HEAD_GUID_DECL']) + Offset = PCD_STRING_INDEX_MAP[Offset] assert(Offset != -1) Table = Dict['STRING_DB_VALUE'] if 'PCD_TYPE_DATA' in Pcd.TokenTypeList: @@ -1475,13 +1485,13 @@ Dict['PCD_TOKENSPACE_OFFSET'].append(TokenSpaceIndex) for index in range(len(Dict['PCD_TOKENSPACE'])): StringTableSize += Dict['PCD_TOKENSPACE_LENGTH'][index] - + StringTableIndex += 1 for index in range(len(Dict['PCD_CNAME'])): Dict['PCD_CNAME_OFFSET'].append(StringTableSize) Dict['PCD_NAME_OFFSET'].append(Dict['PCD_TOKENSPACE_OFFSET'][index]) Dict['PCD_NAME_OFFSET'].append(StringTableSize) StringTableSize += Dict['PCD_CNAME_LENGTH'][index] - + StringTableIndex += 1 if GuidList != []: Dict['GUID_TABLE_EMPTY'] = 'FALSE' Dict['GUID_TABLE_SIZE'] = str(len(GuidList)) + 'U' Modified: trunk/BaseTools/Source/Python/Common/String.py =================================================================== --- trunk/BaseTools/Source/Python/Common/String.py 2013-12-06 01:44:58 UTC (rev 2622) +++ trunk/BaseTools/Source/Python/Common/String.py 2013-12-06 02:52:50 UTC (rev 2623) @@ -801,11 +801,25 @@ return "{%s, 0x00, 0x00}" % ", ".join(["0x%02x, 0x00" % ord(C) for C in String[2:-1]]) elif String.startswith('"'): if String == "\"\"": - return "{0x00}"; + return "{0x00,0x00}" else: - return "{%s, 0x00}" % ", ".join(["0x%02x" % ord(C) for C in String[1:-1]]) + StringLen = len(String[1:-1]) + if StringLen % 2: + return "{%s, 0x00}" % ", ".join(["0x%02x" % ord(C) for C in String[1:-1]]) + else: + return "{%s, 0x00,0x00}" % ", ".join(["0x%02x" % ord(C) for C in String[1:-1]]) + elif String.startswith('{'): + StringLen = len(String[1:-1]) + if StringLen % 2: + return "{%s, 0x00}" % ", ".join([ C for C in String[1:-1].split(',')]) + else: + return "{%s}" % ", ".join([ C for C in String[1:-1].split(',')]) + else: - return '{%s, 0}' % ', '.join(String.split()) + if len(String.split()) % 2: + return '{%s, 0}' % ', '.join(String.split()) + else: + return '{%s, 0,0}' % ', '.join(String.split()) def StringArrayLength(String): if isinstance(String, unicode): Modified: trunk/BaseTools/Source/Python/CommonDataClass/DataClass.py =================================================================== --- trunk/BaseTools/Source/Python/CommonDataClass/DataClass.py 2013-12-06 01:44:58 UTC (rev 2622) +++ trunk/BaseTools/Source/Python/CommonDataClass/DataClass.py 2013-12-06 02:52:50 UTC (rev 2623) @@ -97,6 +97,7 @@ MODEL_META_DATA_GLOBAL_DEFINE = 5017 MODEL_META_DATA_SECTION_HEADER = 5100 MODEL_META_DATA_SUBSECTION_HEADER = 5200 +MODEL_META_DATA_TAIL_COMMENT = 5300 MODEL_EXTERNAL_DEPENDENCY = 10000 Modified: trunk/BaseTools/Source/Python/GenFds/FfsInfStatement.py =================================================================== --- trunk/BaseTools/Source/Python/GenFds/FfsInfStatement.py 2013-12-06 01:44:58 UTC (rev 2622) +++ trunk/BaseTools/Source/Python/GenFds/FfsInfStatement.py 2013-12-06 02:52:50 UTC (rev 2623) @@ -43,6 +43,8 @@ # # class FfsInfStatement(FfsInfStatementClassObject): + ## The mapping dictionary from datum type to its maximum number. + _MAX_SIZE_TYPE = {"BOOLEAN":0x01, "UINT8":0xFF, "UINT16":0xFFFF, "UINT32":0xFFFFFFFF, "UINT64":0xFFFFFFFFFFFFFFFF} ## The constructor # # @param self The object pointer @@ -204,10 +206,15 @@ if Inf._Defs != None and len(Inf._Defs) > 0: self.OptRomDefs.update(Inf._Defs) + self.PatchPcds = [] InfPcds = Inf.Pcds Platform = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, self.CurrentArch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] FdfPcdDict = GenFdsGlobalVariable.FdfParser.Profile.PcdDict + + # Workaround here: both build and GenFds tool convert the workspace path to lower case + # But INF file path in FDF and DSC file may have real case characters. + # Try to convert the path to lower case to see if PCDs value are override by DSC. DscModules = {} for DscModule in Platform.Modules: DscModules[str(DscModule).lower()] = Platform.Modules[DscModule] @@ -217,6 +224,7 @@ continue if Pcd.Type != 'PatchableInModule': continue + # Override Patchable PCD value by the value from DSC PatchPcd = None InfLowerPath = str(PathClassObj).lower() if InfLowerPath in DscModules and PcdKey in DscModules[InfLowerPath].Pcds: @@ -227,16 +235,22 @@ if PatchPcd and Pcd.Type == PatchPcd.Type: DefaultValue = PatchPcd.DefaultValue DscOverride = True + + # Override Patchable PCD value by the value from FDF FdfOverride = False if PcdKey in FdfPcdDict: DefaultValue = FdfPcdDict[PcdKey] FdfOverride = True + if not DscOverride and not FdfOverride: continue + # Check value, if value are equal, no need to patch if Pcd.DatumType == "VOID*": if Pcd.DefaultValue == DefaultValue or DefaultValue in [None, '']: continue + # Get the string size from FDF or DSC if DefaultValue[0] == 'L': + # Remove L"", but the '\0' must be appended MaxDatumSize = str((len(DefaultValue) - 2) * 2) elif DefaultValue[0] == '{': MaxDatumSize = str(len(DefaultValue.split(','))) @@ -244,6 +258,7 @@ MaxDatumSize = str(len(DefaultValue) - 1) if DscOverride: Pcd.MaxDatumSize = PatchPcd.MaxDatumSize + # If no defined the maximum size in DSC, try to get current size from INF if Pcd.MaxDatumSize in ['', None]: Pcd.MaxDatumSize = str(len(Pcd.DefaultValue.split(','))) else: @@ -259,6 +274,7 @@ continue except: continue + # Check the Pcd size and data type if Pcd.DatumType == "VOID*": if int(MaxDatumSize) > int(Pcd.MaxDatumSize): EdkLogger.error("GenFds", GENFDS_ERROR, "The size of VOID* type PCD '%s.%s' exceeds its maximum size %d bytes." \ @@ -306,7 +322,7 @@ return EfiFile Basename = os.path.basename(EfiFile) Output = os.path.join(self.OutputPath, Basename) - CopyLongFilePath(EfiFile, Output) + shutil.copy(EfiFile, Output) for Pcd in self.PatchPcds: RetVal, RetStr = PatchBinaryFile(Output, int(Pcd.Offset, 0), Pcd.DatumType, Pcd.DefaultValue, Pcd.MaxDatumSize) if RetVal: Modified: trunk/BaseTools/Source/Python/Workspace/MetaFileParser.py =================================================================== --- trunk/BaseTools/Source/Python/Workspace/MetaFileParser.py 2013-12-06 01:44:58 UTC (rev 2622) +++ trunk/BaseTools/Source/Python/Workspace/MetaFileParser.py 2013-12-06 02:52:50 UTC (rev 2623) @@ -499,6 +499,8 @@ # parse the file line by line IsFindBlockComment = False GetHeaderComment = False + TailComments = [] + SectionComments = [] Comments = [] for Index in range(0, len(Content)): @@ -510,6 +512,9 @@ if Line == '': if Comment: Comments.append((Comment, Index + 1)) + elif GetHeaderComment: + SectionComments.extend(Comments) + Comments = [] continue if Line.find(DataType.TAB_COMMENT_EDK_START) > -1: IsFindBlockComment = True @@ -530,6 +535,8 @@ self._Store(MODEL_META_DATA_HEADER_COMMENT, Cmt, '', '', 'COMMON', 'COMMON', self._Owner[-1], LNo, -1, LNo, -1, 0) GetHeaderComment = True + else: + TailComments.extend(SectionComments + Comments) Comments = [] self._SectionHeaderParser() # Check invalid sections @@ -605,9 +612,16 @@ self._Store(MODEL_META_DATA_COMMENT, Comment, '', '', Arch, Platform, LastItem, LineNo, -1, LineNo, -1, 0) Comments = [] + SectionComments = [] + TailComments.extend(SectionComments + Comments) if IsFindBlockComment: EdkLogger.error("Parser", FORMAT_INVALID, "Open block comments (starting with /*) are expected to end with */", File=self.MetaFile) + + # If there are tail comments in INF file, save to database whatever the comments are + for Comment in TailComments: + self._Store(MODEL_META_DATA_TAIL_COMMENT, Comment[0], '', '', 'COMMON', + 'COMMON', self._Owner[-1], -1, -1, -1, -1, 0) self._Done() ## Data parser for the format in which there's path Modified: trunk/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py =================================================================== --- trunk/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py 2013-12-06 01:44:58 UTC (rev 2622) +++ trunk/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py 2013-12-06 02:52:50 UTC (rev 2623) @@ -328,6 +328,8 @@ return False def _GetSkuIdentifier(self): + if self._SkuName: + return self._SkuName if self._SkuIdentifier == None: if self._Header == None: self._GetHeaderInfo() @@ -337,16 +339,14 @@ if self._SkuName == None: if self._Header == None: self._GetHeaderInfo() - if self._SkuName == None or self._SkuName not in self.SkuIds: + if (self._SkuName == None or self._SkuName not in self.SkuIds): self._SkuName = 'DEFAULT' return self._SkuName ## Override SKUID_IDENTIFIER def _SetSkuName(self, Value): - if Value in self.SkuIds: - self._SkuName = Value - # Needs to re-retrieve the PCD information - self._Pcds = None + self._SkuName = Value + self._Pcds = None def _GetFdfFile(self): if self._FlashDefinition == None: @@ -829,8 +829,8 @@ ) for pcd in Pcds.values(): - if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys(): - pcdDecObject = self._DecPcds[pcd.TokenCName,pcd.TokenSpaceGuidCName] + pcdDecObject = self._DecPcds[pcd.TokenCName,pcd.TokenSpaceGuidCName] + if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys(): valuefromDec = pcdDecObject.DefaultValue SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '', '', '', valuefromDec) pcd.SkuInfoList['DEFAULT'] = SkuInfo @@ -844,14 +844,24 @@ pcd.SkuInfoList[SkuObj.SystemSkuId] = pcd.SkuInfoList['DEFAULT'] del(pcd.SkuInfoList['DEFAULT']) - if SkuObj.SkuUsageType == SkuObj.MULTIPLE: - if pcd.DatumType == "VOID*": - MaxSize = int(pcd.MaxDatumSize,0) - for (skuname,skuobj) in pcd.SkuInfoList.items(): - datalen = len(skuobj.DefaultValue) - if datalen>MaxSize: - MaxSize = datalen - pcd.MaxDatumSize = str(MaxSize) + + if pcd.MaxDatumSize.strip(): + MaxSize = int(pcd.MaxDatumSize,0) + else: + MaxSize = 0 + if pcdDecObject.DatumType == 'VOID*': + for (skuname,skuobj) in pcd.SkuInfoList.items(): + if skuobj.DefaultValue.startswith("L"): + datalen = len(skuobj.DefaultValue) * 2 + elif skuobj.DefaultValue.startswith("{"): + datalen = len(skuobj.DefaultValue.split(",")) + else: + datalen = len(skuobj.DefaultValue) + if datalen>MaxSize: + MaxSize = datalen + if MaxSize % 2: + MaxSize += 1 + pcd.MaxDatumSize = str(MaxSize) return Pcds @@ -911,8 +921,8 @@ for pcd in Pcds.values(): SkuInfoObj = pcd.SkuInfoList.values()[0] - if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys(): - pcdDecObject = self._DecPcds[pcd.TokenCName,pcd.TokenSpaceGuidCName] + pcdDecObject = self._DecPcds[pcd.TokenCName,pcd.TokenSpaceGuidCName] + if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys(): valuefromDec = pcdDecObject.DefaultValue SkuInfo = SkuInfoClass('DEFAULT', '0', SkuInfoObj.VariableName, SkuInfoObj.VariableGuid, SkuInfoObj.VariableOffset, valuefromDec) pcd.SkuInfoList['DEFAULT'] = SkuInfo @@ -926,6 +936,25 @@ if 'DEFAULT' in pcd.SkuInfoList.keys() and SkuObj.SystemSkuId not in pcd.SkuInfoList.keys(): pcd.SkuInfoList[SkuObj.SystemSkuId] = pcd.SkuInfoList['DEFAULT'] del(pcd.SkuInfoList['DEFAULT']) + + + if pcd.MaxDatumSize.strip(): + MaxSize = int(pcd.MaxDatumSize,0) + else: + MaxSize = 0 + if pcdDecObject.DatumType == 'VOID*': + for (skuname,skuobj) in pcd.SkuInfoList.items(): + if skuobj.DefaultValue.startswith("L"): + datalen = len(skuobj.DefaultValue) * 2 + elif skuobj.DefaultValue.startswith("{"): + datalen = len(skuobj.DefaultValue.split(",")) + else: + datalen = len(skuobj.DefaultValue) + if datalen>MaxSize: + MaxSize = datalen + if MaxSize % 2: + MaxSize += 1 + pcd.MaxDatumSize = str(MaxSize) return Pcds ## Retrieve dynamic VPD PCD settings @@ -987,8 +1016,8 @@ ) for pcd in Pcds.values(): SkuInfoObj = pcd.SkuInfoList.values()[0] + pcdDecObject = self._DecPcds[pcd.TokenCName,pcd.TokenSpaceGuidCName] if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys(): - pcdDecObject = self._DecPcds[pcd.TokenCName,pcd.TokenSpaceGuidCName] valuefromDec = pcdDecObject.DefaultValue SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '','',SkuInfoObj.VpdOffset, valuefromDec) pcd.SkuInfoList['DEFAULT'] = SkuInfo @@ -1002,14 +1031,23 @@ pcd.SkuInfoList[SkuObj.SystemSkuId] = pcd.SkuInfoList['DEFAULT'] del(pcd.SkuInfoList['DEFAULT']) - if SkuObj.SkuUsageType == SkuObj.MULTIPLE: - if pcd.MaxDatumSize.strip(): - MaxSize = int(pcd.MaxDatumSize,0) - for (skuname,skuobj) in pcd.SkuInfoList.items(): - datalen = len(skuobj.DefaultValue) - if datalen>MaxSize: - MaxSize = datalen - pcd.MaxDatumSize = str(MaxSize) + if pcd.MaxDatumSize.strip(): + MaxSize = int(pcd.MaxDatumSize,0) + else: + MaxSize = 0 + if pcdDecObject.DatumType == 'VOID*': + for (skuname,skuobj) in pcd.SkuInfoList.items(): + if skuobj.DefaultValue.startswith("L"): + datalen = len(skuobj.DefaultValue) * 2 + elif skuobj.DefaultValue.startswith("{"): + datalen = len(skuobj.DefaultValue.split(",")) + else: + datalen = len(skuobj.DefaultValue) + if datalen>MaxSize: + MaxSize = datalen + if MaxSize % 2: + MaxSize += 1 + pcd.MaxDatumSize = str(MaxSize) return Pcds ## Add external modules @@ -1516,6 +1554,7 @@ ## Set all internal used members of InfBuildData to None def _Clear(self): self._HeaderComments = None + self._TailComments = None self._Header_ = None self._AutoGenVersion = None self._BaseName = None @@ -1608,7 +1647,13 @@ for Record in RecordList: self._HeaderComments.append(Record[0]) return self._HeaderComments - + def _GetTailComments(self): + if not self._TailComments: + self._TailComments = [] + RecordList = self._RawData[MODEL_META_DATA_TAIL_COMMENT] + for Record in RecordList: + self._TailComments.append(Record[0]) + return self._TailComments ## Retrieve all information in [Defines] section # # (Retriving all [Defines] information in one-shot is just to save time.) @@ -2443,6 +2488,7 @@ Platform = property(_GetPlatform, _SetPlatform) HeaderComments = property(_GetHeaderComments) + TailComments = property(_GetTailComments) AutoGenVersion = property(_GetInfVersion) BaseName = property(_GetBaseName) ModuleType = property(_GetModuleType) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yi...@us...> - 2013-12-06 01:45:03
|
Revision: 2622 http://sourceforge.net/p/edk2-buildtools/code/2622 Author: yingke Date: 2013-12-06 01:44:58 +0000 (Fri, 06 Dec 2013) Log Message: ----------- A workaround to fix the issue about option ROM generation of EFI image without compression. Reviewed-by: Liming Gao <lim...@in...> Reviewed-by: Guo Dong <guo...@in...> Signed-off-by: Yingke Liu <yin...@in...> Modified Paths: -------------- trunk/BaseTools/Source/C/EfiRom/EfiRom.c Modified: trunk/BaseTools/Source/C/EfiRom/EfiRom.c =================================================================== --- trunk/BaseTools/Source/C/EfiRom/EfiRom.c 2013-12-03 10:37:37 UTC (rev 2621) +++ trunk/BaseTools/Source/C/EfiRom/EfiRom.c 2013-12-06 01:44:58 UTC (rev 2622) @@ -1,6 +1,6 @@ /** @file -Copyright (c) 1999 - 2011, Intel Corporation. All rights reserved.<BR> +Copyright (c) 1999 - 2013, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -237,6 +237,7 @@ PCI_3_0_DATA_STRUCTURE *PciDs30; UINT32 Index; UINT8 ByteCheckSum; + UINT16 CodeType; PciDs23 = NULL; PciDs30 = NULL; @@ -337,8 +338,10 @@ // if (mOptions.Pci23 == 1) { PciDs23->ImageLength = (UINT16) (TotalSize / 512); + CodeType = PciDs23->CodeType; } else { PciDs30->ImageLength = (UINT16) (TotalSize / 512); + CodeType = PciDs30->CodeType; } // @@ -359,14 +362,16 @@ } } - ByteCheckSum = 0; - for (Index = 0; Index < FileSize - 1; Index++) { - ByteCheckSum = (UINT8) (ByteCheckSum + Buffer[Index]); - } + if (CodeType != PCI_CODE_TYPE_EFI_IMAGE) { + ByteCheckSum = 0; + for (Index = 0; Index < FileSize - 1; Index++) { + ByteCheckSum = (UINT8) (ByteCheckSum + Buffer[Index]); + } - Buffer[FileSize - 1] = (UINT8) ((~ByteCheckSum) + 1); - if (mOptions.Verbose) { - VerboseMsg(" Checksum = %02x\n\n", Buffer[FileSize - 1]); + Buffer[FileSize - 1] = (UINT8) ((~ByteCheckSum) + 1); + if (mOptions.Verbose) { + VerboseMsg(" Checksum = %02x\n\n", Buffer[FileSize - 1]); + } } // @@ -449,6 +454,8 @@ UINT16 MachineType; UINT16 SubSystem; UINT32 HeaderPadBytes; + UINT32 PadBytesBeforeImage; + UINT32 PadBytesAfterImage; // // Try to open the input file @@ -559,6 +566,18 @@ TotalSize = (TotalSize + 0x200) &~0x1ff; } // + // Workaround: + // If compressed, put the pad bytes after the image, + // else put the pad bytes before the image. + // + if ((InFile->FileFlags & FILE_FLAG_COMPRESS) != 0) { + PadBytesBeforeImage = 0; + PadBytesAfterImage = TotalSize - (FileSize + HeaderSize); + } else { + PadBytesBeforeImage = TotalSize - (FileSize + HeaderSize); + PadBytesAfterImage = 0; + } + // // Check size // if (TotalSize > MAX_OPTION_ROM_SIZE) { @@ -581,7 +600,7 @@ RomHdr.EfiSignature = EFI_PCI_EXPANSION_ROM_HEADER_EFISIGNATURE; RomHdr.EfiSubsystem = SubSystem; RomHdr.EfiMachineType = MachineType; - RomHdr.EfiImageHeaderOffset = (UINT16) HeaderSize; + RomHdr.EfiImageHeaderOffset = (UINT16) (HeaderSize + PadBytesBeforeImage); RomHdr.PcirOffset = (UINT16) (sizeof (RomHdr) + HeaderPadBytes); // // Set image as compressed or not @@ -686,11 +705,18 @@ goto BailOut; } } + // - // Keep track of how many bytes left to write + // Pad head to make it a multiple of 512 bytes // - TotalSize -= HeaderSize; - + while (PadBytesBeforeImage > 0) { + if (putc (~0, OutFptr) == EOF) { + Error (NULL, 0, 2000, "Failed to write trailing pad bytes output file!", NULL); + Status = STATUS_ERROR; + goto BailOut; + } + PadBytesBeforeImage--; + } // // Now dump the input file's contents to the output file // @@ -700,18 +726,17 @@ goto BailOut; } - TotalSize -= FileSize; // // Pad the rest of the image to make it a multiple of 512 bytes // - while (TotalSize > 0) { + while (PadBytesAfterImage > 0) { if (putc (~0, OutFptr) == EOF) { Error (NULL, 0, 2000, "Failed to write trailing pad bytes output file!", NULL); Status = STATUS_ERROR; goto BailOut; } - TotalSize--; + PadBytesAfterImage--; } BailOut: @@ -1205,7 +1230,7 @@ // // Copyright declaration // - fprintf (stdout, "Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.\n\n"); + fprintf (stdout, "Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.\n\n"); // // Details Option This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <oli...@us...> - 2013-12-03 10:37:39
|
Revision: 2621 http://sourceforge.net/p/edk2-buildtools/code/2621 Author: oliviermartin Date: 2013-12-03 10:37:37 +0000 (Tue, 03 Dec 2013) Log Message: ----------- BaseTools/build_rule.template: Removing unrecognized 'ULL' from assembly files These characters might be introduced when using 64bit Fixed Pcd into assembly code. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <oli...@ar...> Modified Paths: -------------- trunk/BaseTools/Conf/build_rule.template Modified: trunk/BaseTools/Conf/build_rule.template =================================================================== --- trunk/BaseTools/Conf/build_rule.template 2013-11-27 10:18:34 UTC (rev 2620) +++ trunk/BaseTools/Conf/build_rule.template 2013-12-03 10:37:37 UTC (rev 2621) @@ -166,7 +166,7 @@ <Command.GCC, Command.RVCT> "$(PP)" $(PP_FLAGS) $(INC) ${src} > ${d_path}(+)${s_base}.i - Trim --source-code -o ${d_path}(+)${s_base}.iii ${d_path}(+)${s_base}.i + Trim --trim-long --source-code -o ${d_path}(+)${s_base}.iii ${d_path}(+)${s_base}.i # For RVCTCYGWIN ASM_FLAGS must be first to work around pathing issues "$(ASM)" $(ASM_FLAGS) -o ${dst} $(INC) ${d_path}(+)${s_base}.iii This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <oli...@us...> - 2013-11-27 10:18:38
|
Revision: 2620 http://sourceforge.net/p/edk2-buildtools/code/2620 Author: oliviermartin Date: 2013-11-27 10:18:34 +0000 (Wed, 27 Nov 2013) Log Message: ----------- BaseTools/tools_def.template: Added GCC 4.8 toolchain Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <oli...@ar...> Reviewed-by: Jordan Justen <jor...@in...> Modified Paths: -------------- trunk/BaseTools/Conf/tools_def.template Modified: trunk/BaseTools/Conf/tools_def.template =================================================================== --- trunk/BaseTools/Conf/tools_def.template 2013-11-27 10:15:34 UTC (rev 2619) +++ trunk/BaseTools/Conf/tools_def.template 2013-11-27 10:18:34 UTC (rev 2620) @@ -159,6 +159,9 @@ DEFINE GCC47_IA32_PREFIX = /usr/bin/ DEFINE GCC47_X64_PREFIX = /usr/bin/ +DEFINE GCC48_IA32_PREFIX = /usr/bin/ +DEFINE GCC48_X64_PREFIX = /usr/bin/ + DEFINE UNIX_IASL_BIN = /usr/bin/iasl #DEFINE UNIX_IASL_BIN = $(HOME)/programs/iasl DEFINE WIN_ASL_BIN_DIR = C:\ASL @@ -304,6 +307,12 @@ # Required to build platforms or ACPI tables: # Intel(r) ACPI Compiler v20101013 from # http://www.acpica.org/downloads/previous_releases.php +# GCC48 -Linux- Requires: +# GCC 4.8 +# Optional: +# Required to build platforms or ACPI tables: +# Intel(r) ACPI Compiler v20101013 from +# http://www.acpica.org/downloads/previous_releases.php # ELFGCC -Linux- Requires: # GCC(this tool chain uses whatever version of gcc and binutils that is installed in /usr/bin) # Optional: @@ -3195,6 +3204,22 @@ DEFINE GCC47_ARM_ASLDLINK_FLAGS = DEF(GCC46_ARM_ASLDLINK_FLAGS) DEFINE GCC47_AARCH64_ASLDLINK_FLAGS = DEF(GCC_ARM_AARCH64_ASLDLINK_FLAGS) +DEFINE GCC48_IA32_CC_FLAGS = DEF(GCC47_IA32_CC_FLAGS) +DEFINE GCC48_X64_CC_FLAGS = DEF(GCC47_X64_CC_FLAGS) +DEFINE GCC48_IA32_X64_DLINK_COMMON = DEF(GCC47_IA32_X64_DLINK_COMMON) +DEFINE GCC48_IA32_X64_ASLDLINK_FLAGS = DEF(GCC47_IA32_X64_ASLDLINK_FLAGS) +DEFINE GCC48_IA32_X64_DLINK_FLAGS = DEF(GCC47_IA32_X64_DLINK_FLAGS) +DEFINE GCC48_X64_DLINK_FLAGS = DEF(GCC47_X64_DLINK_FLAGS) +DEFINE GCC48_ASM_FLAGS = DEF(GCC47_ASM_FLAGS) +DEFINE GCC48_ARM_ASM_FLAGS = DEF(GCC47_ARM_ASM_FLAGS) +DEFINE GCC48_AARCH64_ASM_FLAGS = DEF(GCC47_AARCH64_ASM_FLAGS) +DEFINE GCC48_ARM_CC_FLAGS = DEF(GCC47_ARM_CC_FLAGS) +DEFINE GCC48_AARCH64_CC_FLAGS = DEF(GCC47_AARCH64_CC_FLAGS) +DEFINE GCC48_ARM_DLINK_FLAGS = DEF(GCC47_ARM_DLINK_FLAGS) +DEFINE GCC48_AARCH64_DLINK_FLAGS = DEF(GCC_ARM_AARCH64_DLINK_COMMON) +DEFINE GCC48_ARM_ASLDLINK_FLAGS = DEF(GCC47_ARM_ASLDLINK_FLAGS) +DEFINE GCC48_AARCH64_ASLDLINK_FLAGS = DEF(GCC_ARM_AARCH64_ASLDLINK_FLAGS) + #################################################################################### # # Unix GCC And Intel Linux ACPI Compiler @@ -3628,6 +3653,126 @@ #################################################################################### # +# GCC 4.8 - This configuration is used to compile under Linux to produce +# PE/COFF binaries using GCC 4.8. +# +#################################################################################### +*_GCC48_*_*_FAMILY = GCC + +*_GCC48_*_MAKE_PATH = make +*_GCC48_*_ASL_PATH = DEF(UNIX_IASL_BIN) + +*_GCC48_*_PP_FLAGS = DEF(GCC_PP_FLAGS) +*_GCC48_*_ASLPP_FLAGS = DEF(GCC_ASLPP_FLAGS) +*_GCC48_*_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) +*_GCC48_*_VFRPP_FLAGS = DEF(GCC_VFRPP_FLAGS) +*_GCC48_*_APP_FLAGS = +*_GCC48_*_ASL_FLAGS = DEF(IASL_FLAGS) +*_GCC48_*_ASL_OUTFLAGS = DEF(IASL_OUTFLAGS) + +################## +# GCC48 IA32 definitions +################## +*_GCC48_IA32_OBJCOPY_PATH = DEF(GCC48_IA32_PREFIX)objcopy +*_GCC48_IA32_CC_PATH = DEF(GCC48_IA32_PREFIX)gcc +*_GCC48_IA32_SLINK_PATH = DEF(GCC48_IA32_PREFIX)ar +*_GCC48_IA32_DLINK_PATH = DEF(GCC48_IA32_PREFIX)ld +*_GCC48_IA32_ASLDLINK_PATH = DEF(GCC48_IA32_PREFIX)ld +*_GCC48_IA32_ASM_PATH = DEF(GCC48_IA32_PREFIX)gcc +*_GCC48_IA32_PP_PATH = DEF(GCC48_IA32_PREFIX)gcc +*_GCC48_IA32_VFRPP_PATH = DEF(GCC48_IA32_PREFIX)gcc +*_GCC48_IA32_ASLCC_PATH = DEF(GCC48_IA32_PREFIX)gcc +*_GCC48_IA32_ASLPP_PATH = DEF(GCC48_IA32_PREFIX)gcc +*_GCC48_IA32_RC_PATH = DEF(GCC48_IA32_PREFIX)objcopy + +*_GCC48_IA32_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m32 +*_GCC48_IA32_ASLDLINK_FLAGS = DEF(GCC48_IA32_X64_ASLDLINK_FLAGS) -m elf_i386 +*_GCC48_IA32_ASM_FLAGS = DEF(GCC48_ASM_FLAGS) -m32 -march=i386 +*_GCC48_IA32_CC_FLAGS = DEF(GCC48_IA32_CC_FLAGS) -Os +*_GCC48_IA32_DLINK_FLAGS = DEF(GCC48_IA32_X64_DLINK_FLAGS) -m elf_i386 --oformat=elf32-i386 +*_GCC48_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS) +*_GCC48_IA32_OBJCOPY_FLAGS = + +################## +# GCC48 X64 definitions +################## +*_GCC48_X64_OBJCOPY_PATH = DEF(GCC48_X64_PREFIX)objcopy +*_GCC48_X64_CC_PATH = DEF(GCC48_X64_PREFIX)gcc +*_GCC48_X64_SLINK_PATH = DEF(GCC48_X64_PREFIX)ar +*_GCC48_X64_DLINK_PATH = DEF(GCC48_X64_PREFIX)ld +*_GCC48_X64_ASLDLINK_PATH = DEF(GCC48_X64_PREFIX)ld +*_GCC48_X64_ASM_PATH = DEF(GCC48_X64_PREFIX)gcc +*_GCC48_X64_PP_PATH = DEF(GCC48_X64_PREFIX)gcc +*_GCC48_X64_VFRPP_PATH = DEF(GCC48_X64_PREFIX)gcc +*_GCC48_X64_ASLCC_PATH = DEF(GCC48_X64_PREFIX)gcc +*_GCC48_X64_ASLPP_PATH = DEF(GCC48_X64_PREFIX)gcc +*_GCC48_X64_RC_PATH = DEF(GCC48_X64_PREFIX)objcopy + +*_GCC48_X64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m64 +*_GCC48_X64_ASLDLINK_FLAGS = DEF(GCC48_IA32_X64_ASLDLINK_FLAGS) -m elf_x86_64 +*_GCC48_X64_ASM_FLAGS = DEF(GCC48_ASM_FLAGS) -m64 +*_GCC48_X64_CC_FLAGS = DEF(GCC48_X64_CC_FLAGS) +*_GCC48_X64_DLINK_FLAGS = DEF(GCC48_X64_DLINK_FLAGS) +*_GCC48_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS) +*_GCC48_X64_OBJCOPY_FLAGS = + +################## +# GCC48 ARM definitions +################## +*_GCC48_ARM_CC_PATH = ENV(GCC48_ARM_PREFIX)gcc +*_GCC48_ARM_SLINK_PATH = ENV(GCC48_ARM_PREFIX)ar +*_GCC48_ARM_DLINK_PATH = ENV(GCC48_ARM_PREFIX)ld +*_GCC48_ARM_ASLDLINK_PATH = ENV(GCC48_ARM_PREFIX)ld +*_GCC48_ARM_ASM_PATH = ENV(GCC48_ARM_PREFIX)gcc +*_GCC48_ARM_PP_PATH = ENV(GCC48_ARM_PREFIX)gcc +*_GCC48_ARM_VFRPP_PATH = ENV(GCC48_ARM_PREFIX)gcc +*_GCC48_ARM_ASLCC_PATH = ENV(GCC48_ARM_PREFIX)gcc +*_GCC48_ARM_ASLPP_PATH = ENV(GCC48_ARM_PREFIX)gcc +*_GCC48_ARM_RC_PATH = ENV(GCC48_ARM_PREFIX)objcopy + +*_GCC48_ARM_ARCHCC_FLAGS = -mthumb +*_GCC48_ARM_PLATFORM_FLAGS = -march=armv7-a + +*_GCC48_ARM_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) +*_GCC48_ARM_ASLDLINK_FLAGS = DEF(GCC48_ARM_ASLDLINK_FLAGS) +*_GCC48_ARM_ASM_FLAGS = DEF(GCC48_ARM_ASM_FLAGS) +*_GCC48_ARM_DLINK_FLAGS = DEF(GCC48_ARM_DLINK_FLAGS) +*_GCC48_ARM_PLATFORM_FLAGS = -march=armv7-a +*_GCC48_ARM_PP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_PP_FLAGS) +*_GCC48_ARM_RC_FLAGS = DEF(GCC_ARM_RC_FLAGS) +*_GCC48_ARM_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_VFRPP_FLAGS) + + DEBUG_GCC48_ARM_CC_FLAGS = DEF(GCC48_ARM_CC_FLAGS) -O0 +RELEASE_GCC48_ARM_CC_FLAGS = DEF(GCC48_ARM_CC_FLAGS) -Wno-unused-but-set-variable + +################## +# GCC48 AARCH64 definitions +################## +*_GCC48_AARCH64_CC_PATH = ENV(GCC48_AARCH64_PREFIX)gcc +*_GCC48_AARCH64_SLINK_PATH = ENV(GCC48_AARCH64_PREFIX)ar +*_GCC48_AARCH64_DLINK_PATH = ENV(GCC48_AARCH64_PREFIX)ld +*_GCC48_AARCH64_ASLDLINK_PATH = ENV(GCC48_AARCH64_PREFIX)ld +*_GCC48_AARCH64_ASM_PATH = ENV(GCC48_AARCH64_PREFIX)gcc +*_GCC48_AARCH64_PP_PATH = ENV(GCC48_AARCH64_PREFIX)gcc +*_GCC48_AARCH64_VFRPP_PATH = ENV(GCC48_AARCH64_PREFIX)gcc +*_GCC48_AARCH64_ASLCC_PATH = ENV(GCC48_AARCH64_PREFIX)gcc +*_GCC48_AARCH64_ASLPP_PATH = ENV(GCC48_AARCH64_PREFIX)gcc +*_GCC48_AARCH64_RC_PATH = ENV(GCC48_AARCH64_PREFIX)objcopy + +*_GCC48_AARCH64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) +*_GCC48_AARCH64_ASLDLINK_FLAGS = DEF(GCC48_AARCH64_ASLDLINK_FLAGS) +*_GCC48_AARCH64_ASM_FLAGS = DEF(GCC48_AARCH64_ASM_FLAGS) +*_GCC48_AARCH64_DLINK_FLAGS = DEF(GCC48_AARCH64_DLINK_FLAGS) +*_GCC48_AARCH64_PLATFORM_FLAGS = +*_GCC48_AARCH64_PP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_PP_FLAGS) +*_GCC48_AARCH64_RC_FLAGS = DEF(GCC_AARCH64_RC_FLAGS) +*_GCC48_AARCH64_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_VFRPP_FLAGS) + + DEBUG_GCC48_AARCH64_CC_FLAGS = DEF(GCC48_AARCH64_CC_FLAGS) -O0 +RELEASE_GCC48_AARCH64_CC_FLAGS = DEF(GCC48_AARCH64_CC_FLAGS) -Wno-unused-but-set-variable + +#################################################################################### +# # Cygwin GCC And Intel ACPI Compiler # #################################################################################### This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <oli...@us...> - 2013-11-27 10:15:37
|
Revision: 2619 http://sourceforge.net/p/edk2-buildtools/code/2619 Author: oliviermartin Date: 2013-11-27 10:15:34 +0000 (Wed, 27 Nov 2013) Log Message: ----------- BaseTools/tools_def.template: Added support to build ACPI Tables with ARM and AARCH64 GCC Toolchains Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <oli...@ar...> Reviewed-by: Yingke Liu <yin...@in...> Modified Paths: -------------- trunk/BaseTools/Conf/tools_def.template Modified: trunk/BaseTools/Conf/tools_def.template =================================================================== --- trunk/BaseTools/Conf/tools_def.template 2013-11-27 10:13:14 UTC (rev 2618) +++ trunk/BaseTools/Conf/tools_def.template 2013-11-27 10:15:34 UTC (rev 2619) @@ -3133,6 +3133,7 @@ DEFINE GCC_IA32_X64_DLINK_COMMON = DEF(GCC_DLINK_FLAGS_COMMON) --gc-sections DEFINE GCC_ARM_AARCH64_DLINK_COMMON= -Ttext=0x0 --emit-relocs -nostdlib -u $(IMAGE_ENTRY_POINT) -e $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEFINE GCC_IA32_X64_ASLDLINK_FLAGS = DEF(GCC_IA32_X64_DLINK_COMMON) --entry _ReferenceAcpiTable -u $(IMAGE_ENTRY_POINT) +DEFINE GCC_ARM_AARCH64_ASLDLINK_FLAGS = DEF(GCC_ARM_AARCH64_DLINK_COMMON) --entry ReferenceAcpiTable -u $(IMAGE_ENTRY_POINT) DEFINE GCC_IA32_X64_DLINK_FLAGS = DEF(GCC_IA32_X64_DLINK_COMMON) --entry _$(IMAGE_ENTRY_POINT) --file-alignment 0x20 --section-alignment 0x20 -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEFINE GCC_IPF_DLINK_FLAGS = -nostdlib -O2 --gc-sections --dll -static --entry $(IMAGE_ENTRY_POINT) --undefined $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEFINE GCC_IPF_OBJCOPY_FLAGS = -I elf64-ia64-little -O efi-bsdrv-ia64 @@ -3176,6 +3177,7 @@ DEFINE GCC46_ARM_ASM_FLAGS = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_ASM_FLAGS) -mlittle-endian DEFINE GCC46_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC44_ALL_CC_FLAGS) -mword-relocations -mlittle-endian -mabi=aapcs -mapcs -fno-short-enums -save-temps -fsigned-char -mno-unaligned-access -Wno-address -fomit-frame-pointer DEFINE GCC46_ARM_DLINK_FLAGS = DEF(GCC_ARM_AARCH64_DLINK_COMMON) --oformat=elf32-littlearm +DEFINE GCC46_ARM_ASLDLINK_FLAGS = DEF(GCC_ARM_AARCH64_ASLDLINK_FLAGS) --oformat=elf32-littlearm DEFINE GCC47_IA32_CC_FLAGS = DEF(GCC46_IA32_CC_FLAGS) DEFINE GCC47_X64_CC_FLAGS = DEF(GCC46_X64_CC_FLAGS) @@ -3190,6 +3192,8 @@ DEFINE GCC47_AARCH64_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC44_ALL_CC_FLAGS) -mcmodel=large -mlittle-endian -fno-short-enums -save-temps -fverbose-asm -fsigned-char -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-builtin -Wno-address DEFINE GCC47_ARM_DLINK_FLAGS = DEF(GCC46_ARM_DLINK_FLAGS) DEFINE GCC47_AARCH64_DLINK_FLAGS = DEF(GCC_ARM_AARCH64_DLINK_COMMON) +DEFINE GCC47_ARM_ASLDLINK_FLAGS = DEF(GCC46_ARM_ASLDLINK_FLAGS) +DEFINE GCC47_AARCH64_ASLDLINK_FLAGS = DEF(GCC_ARM_AARCH64_ASLDLINK_FLAGS) #################################################################################### # @@ -3490,6 +3494,8 @@ *_GCC46_ARM_ARCHCC_FLAGS = -mthumb *_GCC46_ARM_PLATFORM_FLAGS = -march=armv7-a +*_GCC46_ARM_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) +*_GCC46_ARM_ASLDLINK_FLAGS = DEF(GCC46_ARM_ASLDLINK_FLAGS) *_GCC46_ARM_ASM_FLAGS = DEF(GCC46_ARM_ASM_FLAGS) *_GCC46_ARM_DLINK_FLAGS = DEF(GCC46_ARM_DLINK_FLAGS) *_GCC46_ARM_PLATFORM_FLAGS = -march=armv7-a @@ -3582,6 +3588,8 @@ *_GCC47_ARM_ARCHCC_FLAGS = -mthumb *_GCC47_ARM_PLATFORM_FLAGS = -march=armv7-a +*_GCC47_ARM_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) +*_GCC47_ARM_ASLDLINK_FLAGS = DEF(GCC47_ARM_ASLDLINK_FLAGS) *_GCC47_ARM_ASM_FLAGS = DEF(GCC47_ARM_ASM_FLAGS) *_GCC47_ARM_DLINK_FLAGS = DEF(GCC47_ARM_DLINK_FLAGS) *_GCC47_ARM_PLATFORM_FLAGS = -march=armv7-a @@ -3606,6 +3614,8 @@ *_GCC47_AARCH64_ASLPP_PATH = ENV(GCC47_AARCH64_PREFIX)gcc *_GCC47_AARCH64_RC_PATH = ENV(GCC47_AARCH64_PREFIX)objcopy +*_GCC47_AARCH64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) +*_GCC47_AARCH64_ASLDLINK_FLAGS = DEF(GCC47_AARCH64_ASLDLINK_FLAGS) *_GCC47_AARCH64_ASM_FLAGS = DEF(GCC47_AARCH64_ASM_FLAGS) *_GCC47_AARCH64_DLINK_FLAGS = DEF(GCC47_AARCH64_DLINK_FLAGS) *_GCC47_AARCH64_PLATFORM_FLAGS = @@ -5532,7 +5542,7 @@ *_ARMGCC_*_ASL_OUTFLAGS = DEF(IASL_OUTFLAGS) *_ARMGCC_*_ASLPP_FLAGS = -x c -E -P *_ARMGCC_*_ASLCC_FLAGS = -x c -*_ARMGCC_*_ASLDLINK_FLAGS = DEF(GCC_DLINK_FLAGS_COMMON) --entry _ReferenceAcpiTable +*_ARMGCC_*_ASLDLINK_FLAGS = DEF(GCC_DLINK_FLAGS_COMMON) --entry ReferenceAcpiTable ################## # ARM definitions @@ -5626,7 +5636,7 @@ *_ARMLINUXGCC_*_ASL_OUTFLAGS = DEF(IASL_OUTFLAGS) *_ARMLINUXGCC_*_ASLPP_FLAGS = -x c -E -P *_ARMLINUXGCC_*_ASLCC_FLAGS = -x c -*_ARMLINUXGCC_*_ASLDLINK_FLAGS = DEF(GCC_DLINK_FLAGS_COMMON) --entry _ReferenceAcpiTable +*_ARMLINUXGCC_*_ASLDLINK_FLAGS = DEF(GCC_DLINK_FLAGS_COMMON) --entry ReferenceAcpiTable ################## # ARM definitions This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <oli...@us...> - 2013-11-27 10:13:17
|
Revision: 2618 http://sourceforge.net/p/edk2-buildtools/code/2618 Author: oliviermartin Date: 2013-11-27 10:13:14 +0000 (Wed, 27 Nov 2013) Log Message: ----------- BaseTools/tools_def.template: Fixed ARM GCC47 definitions Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <oli...@ar...> Reviewed-by: Yingke Liu <yin...@in...> Modified Paths: -------------- trunk/BaseTools/Conf/tools_def.template Modified: trunk/BaseTools/Conf/tools_def.template =================================================================== --- trunk/BaseTools/Conf/tools_def.template 2013-11-27 05:58:54 UTC (rev 2617) +++ trunk/BaseTools/Conf/tools_def.template 2013-11-27 10:13:14 UTC (rev 2618) @@ -3579,8 +3579,8 @@ *_GCC47_ARM_ASLPP_PATH = ENV(GCC47_ARM_PREFIX)gcc *_GCC47_ARM_RC_PATH = ENV(GCC47_ARM_PREFIX)objcopy -*_GCC46_ARM_ARCHCC_FLAGS = -mthumb -*_GCC46_ARM_PLATFORM_FLAGS = -march=armv7-a +*_GCC47_ARM_ARCHCC_FLAGS = -mthumb +*_GCC47_ARM_PLATFORM_FLAGS = -march=armv7-a *_GCC47_ARM_ASM_FLAGS = DEF(GCC47_ARM_ASM_FLAGS) *_GCC47_ARM_DLINK_FLAGS = DEF(GCC47_ARM_DLINK_FLAGS) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yz...@us...> - 2013-11-27 05:58:57
|
Revision: 2617 http://sourceforge.net/p/edk2-buildtools/code/2617 Author: yzhen22 Date: 2013-11-27 05:58:54 +0000 (Wed, 27 Nov 2013) Log Message: ----------- update EFI_SIGNATURE_x to SIGNATURE_x which is more common version to keep in step with other pkg Signed-off-by: Yuxin Zheng <yux...@in...> Reviewed-by: Chen, Hesheng <hes...@in...> Reviewed-by: Liu, Yingke D <Yin...@in... > Reviewed-by: Feng, Bob C <bob...@in...> Modified Paths: -------------- trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.h trunk/BaseTools/Source/C/Include/Common/PiFirmwareVolume.h trunk/BaseTools/Source/C/Include/Common/UefiBaseTypes.h trunk/BaseTools/Source/C/Include/IndustryStandard/PeImage.h trunk/BaseTools/Source/C/Include/IndustryStandard/pci22.h Modified: trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.h =================================================================== --- trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.h 2013-11-27 05:55:10 UTC (rev 2616) +++ trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.h 2013-11-27 05:58:54 UTC (rev 2617) @@ -168,7 +168,7 @@ // VTF (Firmware Volume Top File) signatures // #define IA32_X64_VTF_SIGNATURE_OFFSET 0x14 -#define IA32_X64_VTF0_SIGNATURE EFI_SIGNATURE_32('V','T','F',0) +#define IA32_X64_VTF0_SIGNATURE SIGNATURE_32('V','T','F',0) // // Defines to calculate the offset for PEI CORE entry points Modified: trunk/BaseTools/Source/C/Include/Common/PiFirmwareVolume.h =================================================================== --- trunk/BaseTools/Source/C/Include/Common/PiFirmwareVolume.h 2013-11-27 05:55:10 UTC (rev 2616) +++ trunk/BaseTools/Source/C/Include/Common/PiFirmwareVolume.h 2013-11-27 05:58:54 UTC (rev 2617) @@ -111,7 +111,7 @@ EFI_FV_BLOCK_MAP_ENTRY BlockMap[1]; } EFI_FIRMWARE_VOLUME_HEADER; -#define EFI_FVH_SIGNATURE EFI_SIGNATURE_32 ('_', 'F', 'V', 'H') +#define EFI_FVH_SIGNATURE SIGNATURE_32 ('_', 'F', 'V', 'H') /// /// Firmware Volume Header Revision definition Modified: trunk/BaseTools/Source/C/Include/Common/UefiBaseTypes.h =================================================================== --- trunk/BaseTools/Source/C/Include/Common/UefiBaseTypes.h 2013-11-27 05:55:10 UTC (rev 2616) +++ trunk/BaseTools/Source/C/Include/Common/UefiBaseTypes.h 2013-11-27 05:58:54 UTC (rev 2617) @@ -1,7 +1,7 @@ /** @file Defines data types and constants introduced in UEFI. - Copyright (c) 2006 - 2007, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this @@ -146,10 +146,10 @@ // // Define macros to build data structure signatures from characters. // -#define EFI_SIGNATURE_16(A, B) ((A) | (B << 8)) -#define EFI_SIGNATURE_32(A, B, C, D) (EFI_SIGNATURE_16 (A, B) | (EFI_SIGNATURE_16 (C, D) << 16)) -#define EFI_SIGNATURE_64(A, B, C, D, E, F, G, H) \ - (EFI_SIGNATURE_32 (A, B, C, D) | ((UINT64) (EFI_SIGNATURE_32 (E, F, G, H)) << 32)) +#define SIGNATURE_16(A, B) ((A) | (B << 8)) +#define SIGNATURE_32(A, B, C, D) (SIGNATURE_16 (A, B) | (SIGNATURE_16 (C, D) << 16)) +#define SIGNATURE_64(A, B, C, D, E, F, G, H) \ + (SIGNATURE_32 (A, B, C, D) | ((UINT64) (SIGNATURE_32 (E, F, G, H)) << 32)) // Modified: trunk/BaseTools/Source/C/Include/IndustryStandard/PeImage.h =================================================================== --- trunk/BaseTools/Source/C/Include/IndustryStandard/PeImage.h 2013-11-27 05:55:10 UTC (rev 2616) +++ trunk/BaseTools/Source/C/Include/IndustryStandard/PeImage.h 2013-11-27 05:58:54 UTC (rev 2617) @@ -4,7 +4,7 @@ @bug Fix text - doc as defined in MSFT EFI specification. - Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR> Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR> This program and the accompanying materials are licensed and made available @@ -648,7 +648,7 @@ /// /// Debug Data Structure defined by Apple Mach-O to Coff utility /// -#define CODEVIEW_SIGNATURE_MTOC EFI_SIGNATURE_32('M', 'T', 'O', 'C') +#define CODEVIEW_SIGNATURE_MTOC SIGNATURE_32('M', 'T', 'O', 'C') typedef struct { UINT32 Signature; ///< "MTOC" EFI_GUID MachOUuid; Modified: trunk/BaseTools/Source/C/Include/IndustryStandard/pci22.h =================================================================== --- trunk/BaseTools/Source/C/Include/IndustryStandard/pci22.h 2013-11-27 05:55:10 UTC (rev 2616) +++ trunk/BaseTools/Source/C/Include/IndustryStandard/pci22.h 2013-11-27 05:58:54 UTC (rev 2617) @@ -1,7 +1,7 @@ /** @file Support for PCI 2.2 standard. - Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this @@ -335,7 +335,7 @@ #pragma pack() #define PCI_EXPANSION_ROM_HEADER_SIGNATURE 0xaa55 -#define PCI_DATA_STRUCTURE_SIGNATURE EFI_SIGNATURE_32 ('P', 'C', 'I', 'R') +#define PCI_DATA_STRUCTURE_SIGNATURE SIGNATURE_32 ('P', 'C', 'I', 'R') #define PCI_CODE_TYPE_PCAT_IMAGE 0x00 #define PCI_CODE_TYPE_EFI_IMAGE 0x03 #define EFI_PCI_EXPANSION_ROM_HEADER_COMPRESSED 0x0001 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yz...@us...> - 2013-11-27 05:55:12
|
Revision: 2616 http://sourceforge.net/p/edk2-buildtools/code/2616 Author: yzhen22 Date: 2013-11-27 05:55:10 +0000 (Wed, 27 Nov 2013) Log Message: ----------- Change *_GCC44_*_APP_FLAGS to resolve building a EDKI module file with a dxs file specified using GCC4 fail issue Signed-off-by: Yuxin Zheng <yux...@in...> Reviewed-by: Chen, Hesheng <hes...@in...> Reviewed-by: Liu, Yingke D <Yin...@in... > Reviewed-by: Feng, Bob C <bob...@in...> Modified Paths: -------------- trunk/BaseTools/Conf/tools_def.template Modified: trunk/BaseTools/Conf/tools_def.template =================================================================== --- trunk/BaseTools/Conf/tools_def.template 2013-11-27 05:51:40 UTC (rev 2615) +++ trunk/BaseTools/Conf/tools_def.template 2013-11-27 05:55:10 UTC (rev 2616) @@ -3292,7 +3292,7 @@ *_GCC44_*_ASLPP_FLAGS = DEF(GCC_ASLPP_FLAGS) *_GCC44_*_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) *_GCC44_*_VFRPP_FLAGS = DEF(GCC_VFRPP_FLAGS) -*_GCC44_*_APP_FLAGS = +*_GCC44_*_APP_FLAGS = DEF(GCC_PP_FLAGS) *_GCC44_*_ASL_FLAGS = DEF(IASL_FLAGS) *_GCC44_*_ASL_OUTFLAGS = DEF(IASL_OUTFLAGS) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yz...@us...> - 2013-11-27 05:51:43
|
Revision: 2615 http://sourceforge.net/p/edk2-buildtools/code/2615 Author: yzhen22 Date: 2013-11-27 05:51:40 +0000 (Wed, 27 Nov 2013) Log Message: ----------- Change ToolChainFamily = 'MSFT' to ToolChainFamily = '' to resolve build the reference code using GCC toolchain on the EDK2 tree error Modified Paths: -------------- trunk/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py Modified: trunk/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py =================================================================== --- trunk/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py 2013-11-26 02:10:38 UTC (rev 2614) +++ trunk/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py 2013-11-27 05:51:40 UTC (rev 2615) @@ -1,7 +1,7 @@ ## @file # This file is used to create a database used by build tool # -# Copyright (c) 2008 - 2011, Intel Corporation. All rights reserved.<BR> +# Copyright (c) 2008 - 2013, Intel Corporation. All rights reserved.<BR> # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -1765,7 +1765,7 @@ else: Tool = ToolList[0] ToolChain = "*_*_*_%s_FLAGS" % Tool - ToolChainFamily = 'MSFT' # Edk.x only support MSFT tool chain + ToolChainFamily = '' #ignore not replaced macros in value ValueList = GetSplitList(' ' + Value, '/D') Dummy = ValueList[0] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lg...@us...> - 2013-11-26 02:10:42
|
Revision: 2614 http://sourceforge.net/p/edk2-buildtools/code/2614 Author: lgao4 Date: 2013-11-26 02:10:38 +0000 (Tue, 26 Nov 2013) Log Message: ----------- 1. Fixed the error that SkuName does not support dot character. 2. Fixed the error that SkuName does not support low case. 3. Fixed the error that there is no commet mark in AsBuild Inf file Signed-off-by: Feng, Bob C bob...@in... Reviewed-by: Liu, Yingke D <yin...@in...> Reviewed-by: Hesheng Chen <hes...@in...> Modified Paths: -------------- trunk/BaseTools/Source/Python/Common/DataType.py trunk/BaseTools/Source/Python/Common/String.py trunk/BaseTools/Source/Python/Workspace/MetaFileParser.py trunk/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py Modified: trunk/BaseTools/Source/Python/Common/DataType.py =================================================================== --- trunk/BaseTools/Source/Python/Common/DataType.py 2013-11-25 03:04:13 UTC (rev 2613) +++ trunk/BaseTools/Source/Python/Common/DataType.py 2013-11-26 02:10:38 UTC (rev 2614) @@ -486,6 +486,8 @@ PCDS_DYNAMICEX_VPD = "PcdsDynamicExVpd" PCDS_DYNAMICEX_HII = "PcdsDynamicExHii" +SECTIONS_HAVE_ITEM_PCD = [PCDS_DYNAMIC_DEFAULT.upper(),PCDS_DYNAMIC_VPD.upper(),PCDS_DYNAMIC_HII.upper(), \ + PCDS_DYNAMICEX_DEFAULT.upper(),PCDS_DYNAMICEX_VPD.upper(),PCDS_DYNAMICEX_HII.upper()] # Section allowed to have items after arch SECTIONS_HAVE_ITEM_AFTER_ARCH = [TAB_LIBRARY_CLASSES.upper(), TAB_DEPEX.upper(), TAB_USER_EXTENSIONS.upper(), PCDS_DYNAMIC_DEFAULT.upper(), Modified: trunk/BaseTools/Source/Python/Common/String.py =================================================================== --- trunk/BaseTools/Source/Python/Common/String.py 2013-11-25 03:04:13 UTC (rev 2613) +++ trunk/BaseTools/Source/Python/Common/String.py 2013-11-26 02:10:38 UTC (rev 2614) @@ -401,16 +401,6 @@ Comment = Line[Index:].strip() Line = Line[0:Index].strip() break - if Comment: - # Remove prefixed and trailing comment characters - Start = 0 - End = len(Comment) - while Start < End and Comment.startswith(CommentCharacter, Start, End): - Start += 1 - while End >= 0 and Comment.endswith(CommentCharacter, Start, End): - End -= 1 - Comment = Comment[Start:End] - Comment = Comment.strip() return Line, Comment Modified: trunk/BaseTools/Source/Python/Workspace/MetaFileParser.py =================================================================== --- trunk/BaseTools/Source/Python/Workspace/MetaFileParser.py 2013-11-25 03:04:13 UTC (rev 2613) +++ trunk/BaseTools/Source/Python/Workspace/MetaFileParser.py 2013-11-26 02:10:38 UTC (rev 2614) @@ -278,7 +278,7 @@ for Item in GetSplitValueList(self._CurrentLine[1:-1], TAB_COMMA_SPLIT): if Item == '': continue - ItemList = GetSplitValueList(Item, TAB_SPLIT) + ItemList = GetSplitValueList(Item, TAB_SPLIT,2) # different section should not mix in one section if self._SectionName != '' and self._SectionName != ItemList[0].upper(): EdkLogger.error('Parser', FORMAT_INVALID, "Different section names in the same section", @@ -305,7 +305,10 @@ # S2 may be Platform or ModuleType if len(ItemList) > 2: - S2 = ItemList[2].upper() + if self._SectionName.upper() in SECTIONS_HAVE_ITEM_PCD: + S2 = ItemList[2] + else: + S2 = ItemList[2].upper() else: S2 = 'COMMON' self._Scope.append([S1, S2]) Modified: trunk/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py =================================================================== --- trunk/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py 2013-11-25 03:04:13 UTC (rev 2613) +++ trunk/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py 2013-11-26 02:10:38 UTC (rev 2614) @@ -460,7 +460,7 @@ if Record[1] in [None, '']: EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID name', File=self.MetaFile, Line=Record[-1]) - self._SkuIds[Record[1].upper()] = Record[0] + self._SkuIds[Record[1]] = Record[0] if 'DEFAULT' not in self._SkuIds: self._SkuIds['DEFAULT'] = '0' if 'COMMON' not in self._SkuIds: @@ -731,7 +731,6 @@ RecordList = self._RawData[Type, self._Arch] PcdValueDict = sdict() for TokenSpaceGuid, PcdCName, Setting, Arch, SkuName, Dummy3, Dummy4 in RecordList: - SkuName = SkuName.upper() if SkuName in (SkuObj.SystemSkuId,'DEFAULT','COMMON'): PcdSet.add((PcdCName, TokenSpaceGuid, SkuName,Dummy4)) PcdDict[Arch, PcdCName, TokenSpaceGuid,SkuName] = Setting @@ -798,7 +797,6 @@ AvailableSkuIdSet.update({'DEFAULT':0,'COMMON':0}) for TokenSpaceGuid, PcdCName, Setting, Arch, SkuName, Dummy3, Dummy4 in RecordList: - SkuName = SkuName.upper() if SkuName not in AvailableSkuIdSet: continue @@ -881,7 +879,6 @@ AvailableSkuIdSet.update({'DEFAULT':0,'COMMON':0}) for TokenSpaceGuid, PcdCName, Setting, Arch, SkuName, Dummy3, Dummy4 in RecordList: - SkuName = SkuName.upper() if SkuName not in AvailableSkuIdSet: continue PcdSet.add((PcdCName, TokenSpaceGuid, SkuName,Dummy4)) @@ -954,7 +951,6 @@ AvailableSkuIdSet.update({'DEFAULT':0,'COMMON':0}) for TokenSpaceGuid, PcdCName, Setting, Arch, SkuName, Dummy3, Dummy4 in RecordList: - SkuName = SkuName.upper() if SkuName not in AvailableSkuIdSet: continue This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yi...@us...> - 2013-11-25 03:04:17
|
Revision: 2613 http://sourceforge.net/p/edk2-buildtools/code/2613 Author: yingke Date: 2013-11-25 03:04:13 +0000 (Mon, 25 Nov 2013) Log Message: ----------- 1. Update tools?\226?\128?\153 Copyright; 2. Don?\226?\128?\153t check files located in output directory in FDF during build but checking during GenFds if the files are generated by tool. Reviewed-by: Liming Gao <lim...@in...> Signed-off-by: Yingke Liu <yin...@in...> Modified Paths: -------------- trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp trunk/BaseTools/Source/Python/GenFds/FdfParser.py trunk/BaseTools/Source/Python/GenFds/GenFds.py trunk/BaseTools/Source/Python/UPT/Logger/StringTable.py Modified: trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp =================================================================== --- trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp 2013-11-21 07:11:53 UTC (rev 2612) +++ trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp 2013-11-25 03:04:13 UTC (rev 2613) @@ -2,7 +2,7 @@ VfrCompiler main class and main function. -Copyright (c) 2004 - 2012, Intel Corporation. All rights reserved.<BR> +Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -407,7 +407,7 @@ CONST CHAR8 *Help[] = { " ", "VfrCompile version " VFR_COMPILER_VERSION __BUILD_VERSION VFR_COMPILER_UPDATE_TIME, - "Copyright (c) 2004-2011 Intel Corporation. All rights reserved.", + "Copyright (c) 2004-2013 Intel Corporation. All rights reserved.", " ", "Usage: VfrCompile [options] VfrFile", " ", Modified: trunk/BaseTools/Source/Python/GenFds/FdfParser.py =================================================================== --- trunk/BaseTools/Source/Python/GenFds/FdfParser.py 2013-11-21 07:11:53 UTC (rev 2612) +++ trunk/BaseTools/Source/Python/GenFds/FdfParser.py 2013-11-25 03:04:13 UTC (rev 2613) @@ -2563,23 +2563,8 @@ FfsFileObj.CurrentLineNum = self.CurrentLineNumber FfsFileObj.CurrentLineContent = self.__CurrentLine() FfsFileObj.FileName = self.__Token - if FfsFileObj.FileName.replace('$(WORKSPACE)', '').find('$') == -1: - # - # For file in OUTPUT_DIRECTORY will not check whether it exist or not at AutoGen phase. - # - if not GlobalData.gAutoGenPhase: - #do case sensitive check for file path - ErrorCode, ErrorInfo = PathClass(NormPath(FfsFileObj.FileName), GenFdsGlobalVariable.WorkSpaceDir).Validate() - if ErrorCode != 0: - EdkLogger.error("GenFds", ErrorCode, ExtraData=ErrorInfo) - else: - if not self.__GetMacroValue("OUTPUT_DIRECTORY") in FfsFileObj.FileName: - #do case sensitive check for file path - ErrorCode, ErrorInfo = PathClass(NormPath(FfsFileObj.FileName), GenFdsGlobalVariable.WorkSpaceDir).Validate() - if ErrorCode != 0: - EdkLogger.error("GenFds", ErrorCode, ExtraData=ErrorInfo) + self.__VerifyFile(FfsFileObj.FileName) - if not self.__IsToken( "}"): raise Warning("expected '}'", self.FileName, self.CurrentLineNumber) @@ -2824,11 +2809,7 @@ if not self.__GetNextToken(): raise Warning("expected section file path", self.FileName, self.CurrentLineNumber) DataSectionObj.SectFileName = self.__Token - if DataSectionObj.SectFileName.replace('$(WORKSPACE)', '').find('$') == -1: - #do case sensitive check for file path - ErrorCode, ErrorInfo = PathClass(NormPath(DataSectionObj.SectFileName), GenFdsGlobalVariable.WorkSpaceDir).Validate() - if ErrorCode != 0: - EdkLogger.error("GenFds", ErrorCode, ExtraData=ErrorInfo) + self.__VerifyFile(DataSectionObj.SectFileName) else: if not self.__GetCglSection(DataSectionObj): return False @@ -2837,6 +2818,21 @@ return True + ## __VerifyFile + # + # Check if file exists or not: + # If current phase if GenFds, the file must exist; + # If current phase is AutoGen and the file is not in $(OUTPUT_DIRECTORY), the file must exist + # @param FileName: File path to be verified. + # + def __VerifyFile(self, FileName): + if FileName.replace('$(WORKSPACE)', '').find('$') != -1: + return + if not GlobalData.gAutoGenPhase or not self.__GetMacroValue("OUTPUT_DIRECTORY") in FileName: + ErrorCode, ErrorInfo = PathClass(NormPath(FileName), GenFdsGlobalVariable.WorkSpaceDir).Validate() + if ErrorCode != 0: + EdkLogger.error("GenFds", ErrorCode, ExtraData=ErrorInfo) + ## __GetCglSection() method # # Get compressed or GUIDed section for Obj Modified: trunk/BaseTools/Source/Python/GenFds/GenFds.py =================================================================== --- trunk/BaseTools/Source/Python/GenFds/GenFds.py 2013-11-21 07:11:53 UTC (rev 2612) +++ trunk/BaseTools/Source/Python/GenFds/GenFds.py 2013-11-25 03:04:13 UTC (rev 2613) @@ -1,7 +1,7 @@ ## @file # generate flash image # -# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR> +# Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -41,7 +41,7 @@ ## Version and Copyright versionNumber = "1.0" + ' ' + gBUILD_VERSION __version__ = "%prog Version " + versionNumber -__copyright__ = "Copyright (c) 2007 - 2010, Intel Corporation All rights reserved." +__copyright__ = "Copyright (c) 2007 - 2013, Intel Corporation All rights reserved." ## Tool entrance method # Modified: trunk/BaseTools/Source/Python/UPT/Logger/StringTable.py =================================================================== --- trunk/BaseTools/Source/Python/UPT/Logger/StringTable.py 2013-11-21 07:11:53 UTC (rev 2612) +++ trunk/BaseTools/Source/Python/UPT/Logger/StringTable.py 2013-11-25 03:04:13 UTC (rev 2613) @@ -1,7 +1,7 @@ ## @file # This file is used to define strings used in the UPT tool # -# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR> +# Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR> # # This program and the accompanying materials are licensed and made available # under the terms and conditions of the BSD License which accompanies this @@ -42,7 +42,7 @@ MSG_VERSION_NUMBER = _("1.0") MSG_VERSION = _("Intel(r) UEFI Packaging Tool (Intel(r) UEFIPT) - Revision " + \ MSG_VERSION_NUMBER) -MSG_COPYRIGHT = _("Copyright (c) 2011 Intel Corporation All Rights Reserved.") +MSG_COPYRIGHT = _("Copyright (c) 2011 - 2013 Intel Corporation All Rights Reserved.") MSG_VERSION_COPYRIGHT = _("\n %s\n %s" % (MSG_VERSION, MSG_COPYRIGHT)) MSG_USAGE = _("%s [options]\n%s" % ("upt.exe", MSG_VERSION_COPYRIGHT)) MSG_DESCRIPTION = _("The Intel(r) UEFIUPT is used to create, " + \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yi...@us...> - 2013-11-21 07:11:59
|
Revision: 2612 http://sourceforge.net/p/edk2-buildtools/code/2612 Author: yingke Date: 2013-11-21 07:11:53 +0000 (Thu, 21 Nov 2013) Log Message: ----------- Fix a bug about large file support. Reviewed-by: Star Zeng <sta...@in...> Signed-off-by: Yingke Liu <yin...@in...> Modified Paths: -------------- trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.c trunk/BaseTools/Source/Python/GenFds/Fv.py trunk/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py Modified: trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.c =================================================================== --- trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.c 2013-11-18 20:26:05 UTC (rev 2611) +++ trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.c 2013-11-21 07:11:53 UTC (rev 2612) @@ -458,9 +458,9 @@ case 0: // - // 8 byte alignment, mini alignment requirement for FFS file. + // 1 byte alignment // - *Alignment = 3; + *Alignment = 0; break; case 1: @@ -2212,7 +2212,8 @@ mFvDataInfo.FvNameGuid.Data4[7]); } - if (CompareGuid (&mFvDataInfo.FvFileSystemGuid, &mEfiFirmwareFileSystem2Guid) == 0) { + if (CompareGuid (&mFvDataInfo.FvFileSystemGuid, &mEfiFirmwareFileSystem2Guid) == 0 || + CompareGuid (&mFvDataInfo.FvFileSystemGuid, &mEfiFirmwareFileSystem3Guid) == 0) { mFvDataInfo.IsPiFvImage = TRUE; } Modified: trunk/BaseTools/Source/Python/GenFds/Fv.py =================================================================== --- trunk/BaseTools/Source/Python/GenFds/Fv.py 2013-11-18 20:26:05 UTC (rev 2611) +++ trunk/BaseTools/Source/Python/GenFds/Fv.py 2013-11-21 07:11:53 UTC (rev 2612) @@ -86,6 +86,8 @@ GenFdsGlobalVariable.ErrorLogger("Capsule %s in FD region can't contain a FV %s in FD region." % (self.CapsuleName, self.UiFvName.upper())) GenFdsGlobalVariable.InfLogger( "\nGenerating %s FV" %self.UiFvName) + GenFdsGlobalVariable.LargeFileInFvFlags.append(False) + FFSGuid = None if self.FvBaseAddress != None: BaseAddress = self.FvBaseAddress @@ -130,12 +132,15 @@ OrigFvInfo = None if os.path.exists (FvInfoFileName): OrigFvInfo = open(FvInfoFileName, 'r').read() + if GenFdsGlobalVariable.LargeFileInFvFlags[-1]: + FFSGuid = GenFdsGlobalVariable.EFI_FIRMWARE_FILE_SYSTEM3_GUID; GenFdsGlobalVariable.GenerateFirmwareVolume( FvOutputFile, [self.InfFileName], AddressFile=FvInfoFileName, FfsList=FfsFileList, - ForceRebase=self.FvForceRebase + ForceRebase=self.FvForceRebase, + FileSystemGuid=FFSGuid ) NewFvInfo = None @@ -159,13 +164,16 @@ for FfsFile in self.FfsList : FileName = FfsFile.GenFfs(MacroDict, FvChildAddr, BaseAddress) + if GenFdsGlobalVariable.LargeFileInFvFlags[-1]: + FFSGuid = GenFdsGlobalVariable.EFI_FIRMWARE_FILE_SYSTEM3_GUID; #Update GenFv again GenFdsGlobalVariable.GenerateFirmwareVolume( FvOutputFile, [self.InfFileName], AddressFile=FvInfoFileName, FfsList=FfsFileList, - ForceRebase=self.FvForceRebase + ForceRebase=self.FvForceRebase, + FileSystemGuid=FFSGuid ) # @@ -194,6 +202,7 @@ self.FvAlignment = str (FvAlignmentValue) FvFileObj.close() GenFds.ImageBinDict[self.UiFvName.upper() + 'fv'] = FvOutputFile + GenFdsGlobalVariable.LargeFileInFvFlags.pop() return FvOutputFile ## __InitializeInf__() Modified: trunk/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py =================================================================== --- trunk/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py 2013-11-18 20:26:05 UTC (rev 2611) +++ trunk/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py 2013-11-21 07:11:53 UTC (rev 2612) @@ -65,6 +65,19 @@ BuildRuleFamily = "MSFT" ToolChainFamily = "MSFT" __BuildRuleDatabase = None + + # + # The list whose element are flags to indicate if large FFS or SECTION files exist in FV. + # At the beginning of each generation of FV, false flag is appended to the list, + # after the call to GenerateSection returns, check the size of the output file, + # if it is greater than 0xFFFFFF, the tail flag in list is set to true, + # and EFI_FIRMWARE_FILE_SYSTEM3_GUID is passed to C GenFv. + # At the end of generation of FV, pop the flag. + # List is used as a stack to handle nested FV generation. + # + LargeFileInFvFlags = [] + EFI_FIRMWARE_FILE_SYSTEM3_GUID = '5473C07A-3DCB-4dca-BD6F-1E9689E7349A' + LARGE_FILE_SIZE = 0x1000000 SectionHeader = struct.Struct("3B 1B") @@ -390,11 +403,13 @@ Cmd += Input SaveFileOnChange(CommandFile, ' '.join(Cmd), False) - if not GenFdsGlobalVariable.NeedsUpdate(Output, list(Input) + [CommandFile]): - return - GenFdsGlobalVariable.DebugLogger(EdkLogger.DEBUG_5, "%s needs update because of newer %s" % (Output, Input)) + if GenFdsGlobalVariable.NeedsUpdate(Output, list(Input) + [CommandFile]): + GenFdsGlobalVariable.DebugLogger(EdkLogger.DEBUG_5, "%s needs update because of newer %s" % (Output, Input)) + GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to generate section") - GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to generate section") + if (os.path.getsize(Output) >= GenFdsGlobalVariable.LARGE_FILE_SIZE and + GenFdsGlobalVariable.LargeFileInFvFlags): + GenFdsGlobalVariable.LargeFileInFvFlags[-1] = True @staticmethod def GetAlignment (AlignString): @@ -432,7 +447,7 @@ @staticmethod def GenerateFirmwareVolume(Output, Input, BaseAddress=None, ForceRebase=None, Capsule=False, Dump=False, - AddressFile=None, MapFile=None, FfsList=[]): + AddressFile=None, MapFile=None, FfsList=[], FileSystemGuid=None): if not GenFdsGlobalVariable.NeedsUpdate(Output, Input+FfsList): return GenFdsGlobalVariable.DebugLogger(EdkLogger.DEBUG_5, "%s needs update because of newer %s" % (Output, Input)) @@ -454,6 +469,8 @@ Cmd += ["-a", AddressFile] if MapFile not in [None, '']: Cmd += ["-m", MapFile] + if FileSystemGuid: + Cmd += ["-g", FileSystemGuid] Cmd += ["-o", Output] for I in Input: Cmd += ["-i", I] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lh...@us...> - 2013-11-18 20:26:08
|
Revision: 2611 http://sourceforge.net/p/edk2-buildtools/code/2611 Author: lhauch Date: 2013-11-18 20:26:05 +0000 (Mon, 18 Nov 2013) Log Message: ----------- Updating to match UEFI Distribution Package Specification for Errata B Signed-off-by: lhauch <lar...@in...> Modified Paths: -------------- trunk/BaseTools/Conf/XMLSchema/DistributionPackage.xsd Modified: trunk/BaseTools/Conf/XMLSchema/DistributionPackage.xsd =================================================================== --- trunk/BaseTools/Conf/XMLSchema/DistributionPackage.xsd 2013-11-18 06:34:11 UTC (rev 2610) +++ trunk/BaseTools/Conf/XMLSchema/DistributionPackage.xsd 2013-11-18 20:26:05 UTC (rev 2611) @@ -1613,7 +1613,7 @@ </xs:restriction> </xs:simpleType> </xs:element> - <xs:element minOccurs="1" maxOccurs="1" name="DatumType" + <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDatumTypes"/> <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize"> <xs:annotation> @@ -1653,6 +1653,19 @@ </xs:annotation> <xs:complexType> <xs:sequence> + <xs:choice> + <xs:element minOccurs="0" maxOccurs="1" name="ValidValueList"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:normalizedString"> + <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element minOccurs="0" maxOccurs="1" name="ValidValueRange" type="xs:normalizedString"/> + <xs:element minOccurs="0" maxOccurs="1" name="Expression" type="xs:normalizedString"/> + </xs:choice> <xs:element minOccurs="1" maxOccurs="1" name="ErrorNumber"> <xs:annotation> <xs:documentation xml:lang="en-us"> The minLength of 3 is @@ -1731,6 +1744,19 @@ </xs:annotation> <xs:complexType> <xs:sequence> + <xs:choice> + <xs:element minOccurs="0" maxOccurs="1" name="ValidValueList"> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:normalizedString"> + <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> + <xs:element minOccurs="0" maxOccurs="1" name="ValidValueRange" type="xs:normalizedString"/> + <xs:element minOccurs="0" maxOccurs="1" name="Expression" type="xs:normalizedString"/> + </xs:choice> <xs:element minOccurs="1" maxOccurs="1" name="ErrorNumber"> <xs:annotation> <xs:documentation xml:lang="en-us"> The minLength of 3 is @@ -1877,6 +1903,7 @@ <xs:complexType> <xs:sequence> <xs:element minOccurs="1" maxOccurs="1" name="CName" type="xs:NCName"/> + <xs:element minOccurs="0" maxOccurs="1" name="GUID" type="RegistryFormatGuid"/> <xs:element minOccurs="0" maxOccurs="1" name="VariableName" type="xs:normalizedString"> <xs:annotation> @@ -1948,6 +1975,7 @@ <xs:complexType> <xs:sequence> <xs:element minOccurs="1" maxOccurs="1" name="CName" type="xs:NCName"/> + <xs:element minOccurs="0" maxOccurs="1" name="GUID" type="RegistryFormatGuid"/> <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="Usage" use="required"> @@ -1985,6 +2013,7 @@ <xs:complexType> <xs:sequence> <xs:element minOccurs="1" maxOccurs="1" name="CName" type="xs:NCName"/> + <xs:element minOccurs="0" maxOccurs="1" name="GUID" type="RegistryFormatGuid"/> <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="Usage" use="required"> @@ -2272,17 +2301,32 @@ different from the Distribution Package license. </xs:documentation> </xs:annotation> </xs:element> - <xs:element minOccurs="0" maxOccurs="1" name="Abstract" type="xs:normalizedString"> + <xs:element minOccurs="0" maxOccurs="1" name="Abstract"> <xs:annotation> <xs:documentation xml:lang="en-us"> This is only required if the Abstract is different from the Distribution Package Abstract. </xs:documentation> </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:normalizedString"> + <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> </xs:element> - <xs:element minOccurs="0" maxOccurs="1" name="Description" type="xs:string"> + <xs:element minOccurs="0" maxOccurs="1" name="Description"> <xs:annotation> <xs:documentation xml:lang="en-us"> This is only required if the Description is different from the Distribution Package Description. </xs:documentation> </xs:annotation> + <xs:complexType> + <xs:simpleContent> + <xs:extension base="xs:string"> + <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"/> + </xs:extension> + </xs:simpleContent> + </xs:complexType> + </xs:element> </xs:sequence> </xs:complexType> @@ -2474,6 +2518,7 @@ <xs:enumeration value="File"/> <xs:enumeration value="FV"/> <xs:enumeration value="GUID"/> + <xs:enumeration value="HII"/> <xs:enumeration value="Hii"/> <xs:enumeration value="HOB"/> <xs:enumeration value="SystemTable"/> @@ -2694,10 +2739,15 @@ </xs:documentation> </xs:annotation> </xs:enumeration> + <xs:enumeration value="RedHat32"/> + <xs:enumeration value="RedHat64"/> + <xs:enumeration value="SuSE32"/> + <xs:enumeration value="SuSE64"/> <xs:enumeration value="Linux32"/> <xs:enumeration value="Linux64"/> <xs:enumeration value="OS/X32"/> <xs:enumeration value="OS/X64"/> + <xs:enumeration value="Generic"/> <xs:enumeration value="GenericWin"> <xs:annotation> <xs:documentation xml:lang="en-us"> Typically, this is used for Windows Batch files. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lg...@us...> - 2013-11-18 06:34:15
|
Revision: 2610 http://sourceforge.net/p/edk2-buildtools/code/2610 Author: lgao4 Date: 2013-11-18 06:34:11 +0000 (Mon, 18 Nov 2013) Log Message: ----------- Enable PCD External Database, Sku and PcdInfo feature. Signed-off-by: Feng, Bob C <bob...@in...> Reviewed-by: Liu, Yingke D <yin...@in...> Reviewed-by: Liu, Jiang A jia...@in... Modified Paths: -------------- trunk/BaseTools/Source/Python/AutoGen/AutoGen.py trunk/BaseTools/Source/Python/AutoGen/GenC.py trunk/BaseTools/Source/Python/BPDG/GenVpd.py trunk/BaseTools/Source/Python/Common/DataType.py trunk/BaseTools/Source/Python/Common/GlobalData.py trunk/BaseTools/Source/Python/Common/Misc.py trunk/BaseTools/Source/Python/Common/VpdInfoFile.py trunk/BaseTools/Source/Python/CommonDataClass/DataClass.py trunk/BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py trunk/BaseTools/Source/Python/GenFds/FfsInfStatement.py trunk/BaseTools/Source/Python/GenFds/Section.py trunk/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py trunk/BaseTools/Source/Python/PatchPcdValue/PatchPcdValue.py trunk/BaseTools/Source/Python/Workspace/MetaFileParser.py trunk/BaseTools/Source/Python/Workspace/MetaFileTable.py trunk/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py Added Paths: ----------- trunk/BaseTools/Source/Python/AutoGen/GenPcdDb.py trunk/BaseTools/Source/Python/Workspace/MetaFileCommentParser.py Modified: trunk/BaseTools/Source/Python/AutoGen/AutoGen.py =================================================================== --- trunk/BaseTools/Source/Python/AutoGen/AutoGen.py 2013-11-18 05:45:54 UTC (rev 2609) +++ trunk/BaseTools/Source/Python/AutoGen/AutoGen.py 2013-11-18 06:34:11 UTC (rev 2610) @@ -34,9 +34,12 @@ from GenFds.FdfParser import * from CommonDataClass.CommonClass import SkuInfoClass from Workspace.BuildClassObject import * +from GenPatchPcdTable.GenPatchPcdTable import parsePcdInfoFromMapFile import Common.VpdInfoFile as VpdInfoFile +from GenPcdDb import CreatePcdDatabaseCode +from Workspace.MetaFileCommentParser import UsageList -## Regular expression for splitting Dependency Expression stirng into tokens +## Regular expression for splitting Dependency Expression string into tokens gDepexTokenPattern = re.compile("(\(|\)|\w+| \S+\.inf)") ## Mapping Makefile type @@ -59,13 +62,7 @@ # # Template string to generic AsBuilt INF # -gAsBuiltInfHeaderString = TemplateString("""## @file -# ${module_name} -# -# DO NOT EDIT -# FILE auto-generated Binary INF -# -## +gAsBuiltInfHeaderString = TemplateString("""${header_comments} [Defines] INF_VERSION = 0x00010016 @@ -73,6 +70,7 @@ FILE_GUID = ${module_guid} MODULE_TYPE = ${module_module_type} VERSION_STRING = ${module_version_string}${BEGIN} + PCD_IS_DRIVER = ${pcd_is_driver_string}${END}${BEGIN} UEFI_SPECIFICATION_VERSION = ${module_uefi_specification_version}${END}${BEGIN} PI_SPECIFICATION_VERSION = ${module_pi_specification_version}${END} @@ -82,8 +80,21 @@ [Binaries.${module_arch}]${BEGIN} ${binary_item}${END} -[PcdEx]${BEGIN} - ${pcd_item}${END} +[PatchPcd.${module_arch}]${BEGIN} + ${patchablepcd_item} +${END} +[Protocols.${module_arch}]${BEGIN} + ${protocol_item} +${END} +[Ppis.${module_arch}]${BEGIN} + ${ppi_item} +${END} +[Guids.${module_arch}]${BEGIN} + ${guid_item} +${END} +[PcdEx.${module_arch}]${BEGIN} + ${pcd_item} +${END} ## @AsBuilt${BEGIN} ## ${flags_item}${END} @@ -228,15 +239,6 @@ ExtraData="Build target [%s] is not supported by the platform. [Valid target: %s]" % (self.BuildTarget, " ".join(self.Platform.BuildTargets))) - # Validate SKU ID - if not self.SkuId: - self.SkuId = 'DEFAULT' - - if self.SkuId not in self.Platform.SkuIds: - EdkLogger.error("build", PARAMETER_INVALID, - ExtraData="SKU-ID [%s] is not supported by the platform. [Valid SKU-ID: %s]" - % (self.SkuId, " ".join(self.Platform.SkuIds.keys()))) - # parse FDF file to get PCDs in it, if any if not self.FdfFile: self.FdfFile = self.Platform.FlashDefinition @@ -867,7 +869,7 @@ for PcdFromModule in M.ModulePcdList+M.LibraryPcdList: # make sure that the "VOID*" kind of datum has MaxDatumSize set - if PcdFromModule.DatumType == "VOID*" and PcdFromModule.MaxDatumSize == None: + if PcdFromModule.DatumType == "VOID*" and PcdFromModule.MaxDatumSize in [None, '']: NoDatumTypePcdList.add("%s.%s [%s]" % (PcdFromModule.TokenSpaceGuidCName, PcdFromModule.TokenCName, F)) if PcdFromModule.Type in GenC.gDynamicPcd or PcdFromModule.Type in GenC.gDynamicExPcd: @@ -938,19 +940,19 @@ # Add VPD type PCD into VpdFile and determine whether the VPD PCD need to be fixed up. # for PcdKey in PlatformPcds: - Pcd = self.Platform.Pcds[PcdKey] - if Pcd.Type in [TAB_PCDS_DYNAMIC_VPD, TAB_PCDS_DYNAMIC_EX_VPD]: - Pcd = VpdPcdDict[PcdKey] - Sku = Pcd.SkuInfoList[Pcd.SkuInfoList.keys()[0]] - Sku.VpdOffset = Sku.VpdOffset.strip() - - VpdFile.Add(Pcd, Sku.VpdOffset) - # if the offset of a VPD is *, then it need to be fixed up by third party tool. - if not NeedProcessVpdMapFile and Sku.VpdOffset == "*": - NeedProcessVpdMapFile = True - if self.Platform.VpdToolGuid == None or self.Platform.VpdToolGuid == '': - EdkLogger.error("Build", FILE_NOT_FOUND, \ - "Fail to find third-party BPDG tool to process VPD PCDs. BPDG Guid tool need to be defined in tools_def.txt and VPD_TOOL_GUID need to be provided in DSC file.") + Pcd = self.Platform.Pcds[PcdKey] + if Pcd.Type in [TAB_PCDS_DYNAMIC_VPD, TAB_PCDS_DYNAMIC_EX_VPD] and \ + PcdKey in VpdPcdDict: + Pcd = VpdPcdDict[PcdKey] + for (SkuName,Sku) in Pcd.SkuInfoList.items(): + Sku.VpdOffset = Sku.VpdOffset.strip() + VpdFile.Add(Pcd, Sku.VpdOffset) + # if the offset of a VPD is *, then it need to be fixed up by third party tool. + if not NeedProcessVpdMapFile and Sku.VpdOffset == "*": + NeedProcessVpdMapFile = True + if self.Platform.VpdToolGuid == None or self.Platform.VpdToolGuid == '': + EdkLogger.error("Build", FILE_NOT_FOUND, \ + "Fail to find third-party BPDG tool to process VPD PCDs. BPDG Guid tool need to be defined in tools_def.txt and VPD_TOOL_GUID need to be provided in DSC file.") # @@ -971,32 +973,46 @@ # Not found, it should be signature if not FoundFlag : # just pick the a value to determine whether is unicode string type - Sku = DscPcdEntry.SkuInfoList[DscPcdEntry.SkuInfoList.keys()[0]] - Sku.VpdOffset = Sku.VpdOffset.strip() - - # Need to iterate DEC pcd information to get the value & datumtype - for eachDec in self.PackageList: - for DecPcd in eachDec.Pcds: - DecPcdEntry = eachDec.Pcds[DecPcd] - if (DecPcdEntry.TokenSpaceGuidCName == DscPcdEntry.TokenSpaceGuidCName) and \ - (DecPcdEntry.TokenCName == DscPcdEntry.TokenCName): - # Print warning message to let the developer make a determine. - EdkLogger.warn("build", "Unreferenced vpd pcd used!", - File=self.MetaFile, \ - ExtraData = "PCD: %s.%s used in the DSC file %s is unreferenced." \ - %(DscPcdEntry.TokenSpaceGuidCName, DscPcdEntry.TokenCName, self.Platform.MetaFile.Path)) - - DscPcdEntry.DatumType = DecPcdEntry.DatumType - DscPcdEntry.DefaultValue = DecPcdEntry.DefaultValue - # Only fix the value while no value provided in DSC file. - if (Sku.DefaultValue == "" or Sku.DefaultValue==None): - DscPcdEntry.SkuInfoList[DscPcdEntry.SkuInfoList.keys()[0]].DefaultValue = DecPcdEntry.DefaultValue - + for (SkuName,Sku) in DscPcdEntry.SkuInfoList.items(): + Sku.VpdOffset = Sku.VpdOffset.strip() + + # Need to iterate DEC pcd information to get the value & datumtype + for eachDec in self.PackageList: + for DecPcd in eachDec.Pcds: + DecPcdEntry = eachDec.Pcds[DecPcd] + if (DecPcdEntry.TokenSpaceGuidCName == DscPcdEntry.TokenSpaceGuidCName) and \ + (DecPcdEntry.TokenCName == DscPcdEntry.TokenCName): + # Print warning message to let the developer make a determine. + EdkLogger.warn("build", "Unreferenced vpd pcd used!", + File=self.MetaFile, \ + ExtraData = "PCD: %s.%s used in the DSC file %s is unreferenced." \ + %(DscPcdEntry.TokenSpaceGuidCName, DscPcdEntry.TokenCName, self.Platform.MetaFile.Path)) + + DscPcdEntry.DatumType = DecPcdEntry.DatumType + DscPcdEntry.DefaultValue = DecPcdEntry.DefaultValue + DscPcdEntry.TokenValue = DecPcdEntry.TokenValue + DscPcdEntry.TokenSpaceGuidValue = eachDec.Guids[DecPcdEntry.TokenSpaceGuidCName] + # Only fix the value while no value provided in DSC file. + if (Sku.DefaultValue == "" or Sku.DefaultValue==None): + DscPcdEntry.SkuInfoList[DscPcdEntry.SkuInfoList.keys()[0]].DefaultValue = DecPcdEntry.DefaultValue + + if DscPcdEntry not in self._DynamicPcdList: + self._DynamicPcdList.append(DscPcdEntry) +# Sku = DscPcdEntry.SkuInfoList[DscPcdEntry.SkuInfoList.keys()[0]] + Sku.VpdOffset = Sku.VpdOffset.strip() + PcdValue = Sku.DefaultValue + VpdFile.Add(DscPcdEntry, Sku.VpdOffset) + if not NeedProcessVpdMapFile and Sku.VpdOffset == "*": + NeedProcessVpdMapFile = True + if DscPcdEntry.DatumType == 'VOID*' and PcdValue.startswith("L"): + UnicodePcdArray.append(DscPcdEntry) + elif len(Sku.VariableName) > 0: + HiiPcdArray.append(DscPcdEntry) + else: + OtherPcdArray.append(DscPcdEntry) + + # if the offset of a VPD is *, then it need to be fixed up by third party tool. - VpdFile.Add(DscPcdEntry, Sku.VpdOffset) - # if the offset of a VPD is *, then it need to be fixed up by third party tool. - if not NeedProcessVpdMapFile and Sku.VpdOffset == "*": - NeedProcessVpdMapFile = True if (self.Platform.FlashDefinition == None or self.Platform.FlashDefinition == '') and \ @@ -1043,9 +1059,11 @@ # Fixup "*" offset for Pcd in self._DynamicPcdList: # just pick the a value to determine whether is unicode string type - Sku = Pcd.SkuInfoList[Pcd.SkuInfoList.keys()[0]] - if Sku.VpdOffset == "*": - Sku.VpdOffset = VpdFile.GetOffset(Pcd)[0].strip() + i = 0 + for (SkuName,Sku) in Pcd.SkuInfoList.items(): + if Sku.VpdOffset == "*": + Sku.VpdOffset = VpdFile.GetOffset(Pcd)[i].strip() + i += 1 else: EdkLogger.error("build", FILE_READ_FAILURE, "Can not find VPD map file %s to fix up VPD offset." % VpdMapFilePath) @@ -1593,13 +1611,13 @@ % (ToPcd.TokenSpaceGuidCName, ToPcd.TokenCName)) Value = ToPcd.DefaultValue if Value in [None, '']: - ToPcd.MaxDatumSize = 1 + ToPcd.MaxDatumSize = '1' elif Value[0] == 'L': - ToPcd.MaxDatumSize = str(len(Value) * 2) + ToPcd.MaxDatumSize = str((len(Value) - 2) * 2) elif Value[0] == '{': ToPcd.MaxDatumSize = str(len(Value.split(','))) else: - ToPcd.MaxDatumSize = str(len(Value)) + ToPcd.MaxDatumSize = str(len(Value) - 1) # apply default SKU for dynamic PCDS if specified one is not available if (ToPcd.Type in PCD_DYNAMIC_TYPE_LIST or ToPcd.Type in PCD_DYNAMIC_EX_TYPE_LIST) \ @@ -1992,9 +2010,14 @@ self._DerivedPackageList = None self._ModulePcdList = None self._LibraryPcdList = None + self._PcdComments = sdict() self._GuidList = None + self._GuidsUsedByPcd = None + self._GuidComments = sdict() self._ProtocolList = None + self._ProtocolComments = sdict() self._PpiList = None + self._PpiComments = sdict() self._DepexList = None self._DepexExpressionList = None self._BuildOption = None @@ -2095,6 +2118,10 @@ self._LibraryFlag = False return self._LibraryFlag + ## Check if the module is binary module or not + def _IsBinaryModule(self): + return self.Module.IsBinaryModule + ## Return the directory to store intermediate files of the module def _GetBuildDir(self): if self._BuildDir == None: @@ -2551,6 +2578,12 @@ self._DependentLibraryList = self.PlatformInfo.ApplyLibraryInstance(self.Module) return self._DependentLibraryList + @staticmethod + def UpdateComments(Recver, Src): + for Key in Src: + if Key not in Recver: + Recver[Key] = [] + Recver[Key].extend(Src[Key]) ## Get the list of PCDs from current module # # @retval list The list of PCD @@ -2559,6 +2592,7 @@ if self._ModulePcdList == None: # apply PCD settings from platform self._ModulePcdList = self.PlatformInfo.ApplyPcdSetting(self.Module, self.Module.Pcds) + self.UpdateComments(self._PcdComments, self.Module.PcdComments) return self._ModulePcdList ## Get the list of PCDs from dependent libraries @@ -2571,6 +2605,7 @@ if not self.IsLibrary: # get PCDs from dependent libraries for Library in self.DependentLibraryList: + self.UpdateComments(self._PcdComments, Library.PcdComments) for Key in Library.Pcds: # skip duplicated PCDs if Key in self.Module.Pcds or Key in Pcds: @@ -2591,8 +2626,17 @@ self._GuidList = self.Module.Guids for Library in self.DependentLibraryList: self._GuidList.update(Library.Guids) + self.UpdateComments(self._GuidComments, Library.GuidComments) + self.UpdateComments(self._GuidComments, self.Module.GuidComments) return self._GuidList + def GetGuidsUsedByPcd(self): + if self._GuidsUsedByPcd == None: + self._GuidsUsedByPcd = sdict() + self._GuidsUsedByPcd.update(self.Module.GetGuidsUsedByPcd()) + for Library in self.DependentLibraryList: + self._GuidsUsedByPcd.update(Library.GetGuidsUsedByPcd()) + return self._GuidsUsedByPcd ## Get the protocol value mapping # # @retval dict The mapping between protocol cname and its value @@ -2602,6 +2646,8 @@ self._ProtocolList = self.Module.Protocols for Library in self.DependentLibraryList: self._ProtocolList.update(Library.Protocols) + self.UpdateComments(self._ProtocolComments, Library.ProtocolComments) + self.UpdateComments(self._ProtocolComments, self.Module.ProtocolComments) return self._ProtocolList ## Get the PPI value mapping @@ -2613,6 +2659,8 @@ self._PpiList = self.Module.Ppis for Library in self.DependentLibraryList: self._PpiList.update(Library.Ppis) + self.UpdateComments(self._PpiComments, Library.PpiComments) + self.UpdateComments(self._PpiComments, self.Module.PpiComments) return self._PpiList ## Get the list of include search path @@ -2669,38 +2717,74 @@ ### TODO: How to handles mixed source and binary modules - # Find all DynamicEx PCDs used by this module and dependent libraries + # Find all DynamicEx and PatchableInModule PCDs used by this module and dependent libraries # Also find all packages that the DynamicEx PCDs depend on Pcds = [] + PatchablePcds = {} Packages = [] + PcdCheckList = [] + PcdTokenSpaceList = [] for Pcd in self.ModulePcdList + self.LibraryPcdList: - if Pcd.Type in GenC.gDynamicExPcd: - if Pcd not in Pcds: - Pcds += [Pcd] - for Package in self.DerivedPackageList: - if Package not in Packages: - if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, 'DynamicEx') in Package.Pcds: - Packages += [Package] - elif (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, 'Dynamic') in Package.Pcds: - Packages += [Package] + if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE: + PatchablePcds[Pcd.TokenCName] = Pcd + PcdCheckList.append((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, 'PatchableInModule')) + elif Pcd.Type in GenC.gDynamicExPcd: + if Pcd not in Pcds: + Pcds += [Pcd] + PcdCheckList.append((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, 'DynamicEx')) + PcdCheckList.append((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, 'Dynamic')) + PcdTokenSpaceList.append(Pcd.TokenSpaceGuidCName) + GuidList = sdict() + GuidList.update(self.GuidList) + for TokenSpace in self.GetGuidsUsedByPcd(): + # If token space is not referred by patch PCD or Ex PCD, remove the GUID from GUID list + # The GUIDs in GUIDs section should really be the GUIDs in source INF or referred by Ex an patch PCDs + if TokenSpace not in PcdTokenSpaceList and TokenSpace in GuidList: + GuidList.pop(TokenSpace) + CheckList = (GuidList, self.PpiList, self.ProtocolList, PcdCheckList) + for Package in self.DerivedPackageList: + if Package in Packages: + continue + BeChecked = (Package.Guids, Package.Ppis, Package.Protocols, Package.Pcds) + Found = False + for Index in range(len(BeChecked)): + for Item in CheckList[Index]: + if Item in BeChecked[Index]: + Packages += [Package] + Found = True + break + if Found: break ModuleType = self.ModuleType if ModuleType == 'UEFI_DRIVER' and self.DepexGenerated: - ModuleType = 'DXE_DRIVER' + ModuleType = 'DXE_DRIVER' + DriverType = '' + if self.PcdIsDriver != '': + DriverType = self.PcdIsDriver + AsBuiltInfDict = { 'module_name' : self.Name, 'module_guid' : self.Guid, 'module_module_type' : ModuleType, 'module_version_string' : self.Version, + 'pcd_is_driver_string' : [], 'module_uefi_specification_version' : [], 'module_pi_specification_version' : [], 'module_arch' : self.Arch, 'package_item' : ['%s' % (Package.MetaFile.File.replace('\\','/')) for Package in Packages], 'binary_item' : [], + 'patchablepcd_item' : [], 'pcd_item' : [], - 'flags_item' : [] + 'protocol_item' : [], + 'ppi_item' : [], + 'guid_item' : [], + 'flags_item' : [], + 'libraryclasses_item' : [] } + AsBuiltInfDict['module_inf_version'] = '0x%08x' % self.AutoGenVersion + if DriverType: + AsBuiltInfDict['pcd_is_driver_string'] += [DriverType] if 'UEFI_SPECIFICATION_VERSION' in self.Specification: AsBuiltInfDict['module_uefi_specification_version'] += [self.Specification['UEFI_SPECIFICATION_VERSION']] @@ -2732,9 +2816,125 @@ if self.ModuleType in ['DXE_SMM_DRIVER']: AsBuiltInfDict['binary_item'] += ['SMM_DEPEX|' + self.Name + '.depex'] + for Root, Dirs, Files in os.walk(OutputDir): + for File in Files: + if File.lower().endswith('.pdb'): + AsBuiltInfDict['binary_item'] += ['DISPOSABLE|' + File] + HeaderComments = self.Module.HeaderComments + StartPos = 0 + for Index in range(len(HeaderComments)): + if HeaderComments[Index].find('@BinaryHeader') != -1: + HeaderComments[Index] = HeaderComments[Index].replace('@BinaryHeader', '@file') + StartPos = Index + break + AsBuiltInfDict['header_comments'] = '\n'.join(HeaderComments[StartPos:]).replace(':#', '://') + GenList = [ + (self.ProtocolList, self._ProtocolComments, 'protocol_item'), + (self.PpiList, self._PpiComments, 'ppi_item'), + (GuidList, self._GuidComments, 'guid_item') + ] + for Item in GenList: + for CName in Item[0]: + Comments = '' + if CName in Item[1]: + Comments = '\n '.join(Item[1][CName]) + Entry = CName + if Comments: + Entry = Comments + '\n ' + CName + AsBuiltInfDict[Item[2]].append(Entry) + PatchList = parsePcdInfoFromMapFile( + os.path.join(self.OutputDir, self.Name + '.map'), + os.path.join(self.OutputDir, self.Name + '.efi') + ) + if PatchList: + for PatchPcd in PatchList: + if PatchPcd[0] not in PatchablePcds: + continue + Pcd = PatchablePcds[PatchPcd[0]] + PcdValue = '' + if Pcd.DatumType != 'VOID*': + HexFormat = '0x%02x' + if Pcd.DatumType == 'UINT16': + HexFormat = '0x%04x' + elif Pcd.DatumType == 'UINT32': + HexFormat = '0x%08x' + elif Pcd.DatumType == 'UINT64': + HexFormat = '0x%016x' + PcdValue = HexFormat % int(Pcd.DefaultValue, 0) + else: + if Pcd.MaxDatumSize == None or Pcd.MaxDatumSize == '': + EdkLogger.error("build", AUTOGEN_ERROR, + "Unknown [MaxDatumSize] of PCD [%s.%s]" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName) + ) + ArraySize = int(Pcd.MaxDatumSize, 0) + PcdValue = Pcd.DefaultValue + if PcdValue[0] != '{': + Unicode = False + if PcdValue[0] == 'L': + Unicode = True + PcdValue = PcdValue.lstrip('L') + PcdValue = eval(PcdValue) + NewValue = '{' + for Index in range(0, len(PcdValue)): + if Unicode: + CharVal = ord(PcdValue[Index]) + NewValue = NewValue + '0x%02x' % (CharVal & 0x00FF) + ', ' \ + + '0x%02x' % (CharVal >> 8) + ', ' + else: + NewValue = NewValue + '0x%02x' % (ord(PcdValue[Index]) % 0x100) + ', ' + Padding = '0x00, ' + if Unicode: + Padding = Padding * 2 + ArraySize = ArraySize / 2 + if ArraySize < (len(PcdValue) + 1): + EdkLogger.error("build", AUTOGEN_ERROR, + "The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName) + ) + if ArraySize > len(PcdValue) + 1: + NewValue = NewValue + Padding * (ArraySize - len(PcdValue) - 1) + PcdValue = NewValue + Padding.strip().rstrip(',') + '}' + elif len(PcdValue.split(',')) <= ArraySize: + PcdValue = PcdValue.rstrip('}') + ', 0x00' * (ArraySize - len(PcdValue.split(','))) + PcdValue += '}' + else: + EdkLogger.error("build", AUTOGEN_ERROR, + "The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName) + ) + PcdItem = '%s.%s|%s|0x%X' % \ + (Pcd.TokenSpaceGuidCName, Pcd.TokenCName, PcdValue, PatchPcd[1]) + PcdComments = '' + if (Pcd.TokenSpaceGuidCName, Pcd.TokenCName) in self._PcdComments: + PcdComments = '\n '.join(self._PcdComments[Pcd.TokenSpaceGuidCName, Pcd.TokenCName]) + if PcdComments: + PcdItem = PcdComments + '\n ' + PcdItem + AsBuiltInfDict['patchablepcd_item'].append(PcdItem) for Pcd in Pcds: - AsBuiltInfDict['pcd_item'] += [Pcd.TokenSpaceGuidCName + '.' + Pcd.TokenCName] - + PcdComments = '' + PcdCommentList = [] + HiiInfo = '' + if Pcd.Type == TAB_PCDS_DYNAMIC_EX_HII: + for SkuName in Pcd.SkuInfoList: + SkuInfo = Pcd.SkuInfoList[SkuName] + HiiInfo = '## %s|%s|%s' % (SkuInfo.VariableName, SkuInfo.VariableGuid, SkuInfo.VariableOffset) + break + if (Pcd.TokenSpaceGuidCName, Pcd.TokenCName) in self._PcdComments: + PcdCommentList = self._PcdComments[Pcd.TokenSpaceGuidCName, Pcd.TokenCName][:] + if HiiInfo: + UsageIndex = -1 + for Index, Comment in enumerate(PcdCommentList): + for Usage in UsageList: + if Comment.find(Usage) != -1: + UsageIndex = Index + break + if UsageIndex != -1: + PcdCommentList[UsageIndex] = PcdCommentList[UsageIndex] + ' ' + HiiInfo + else: + PcdCommentList.append('## ' + HiiInfo) + PcdComments = '\n '.join(PcdCommentList) + PcdEntry = Pcd.TokenSpaceGuidCName + '.' + Pcd.TokenCName + if PcdComments: + PcdEntry = PcdComments + '\n ' + PcdEntry + AsBuiltInfDict['pcd_item'] += [PcdEntry] for Item in self.BuildOption: if 'FLAGS' in self.BuildOption[Item]: AsBuiltInfDict['flags_item'] += ['%s:%s_%s_%s_%s_FLAGS = %s' % (self.ToolChainFamily, self.BuildTarget, self.ToolChain, self.Arch, Item, self.BuildOption[Item]['FLAGS'].strip())] @@ -2781,6 +2981,11 @@ if self.IsCodeFileCreated: return + # Need to generate PcdDatabase even PcdDriver is binarymodule + if self.IsBinaryModule and self.PcdIsDriver != '': + CreatePcdDatabaseCode(self, TemplateString(), TemplateString()) + return + if not self.IsLibrary and CreateLibraryCodeFile: for LibraryAutoGen in self.LibraryAutoGenList: LibraryAutoGen.CreateCodeFile() @@ -2863,7 +3068,7 @@ Specification = property(_GetSpecification) IsLibrary = property(_IsLibrary) - + IsBinaryModule = property(_IsBinaryModule) BuildDir = property(_GetBuildDir) OutputDir = property(_GetOutputDir) DebugDir = property(_GetDebugDir) Modified: trunk/BaseTools/Source/Python/AutoGen/GenC.py =================================================================== --- trunk/BaseTools/Source/Python/AutoGen/GenC.py 2013-11-18 05:45:54 UTC (rev 2609) +++ trunk/BaseTools/Source/Python/AutoGen/GenC.py 2013-11-18 06:34:11 UTC (rev 2610) @@ -1,7 +1,7 @@ ## @file # Routines for generating AutoGen.h and AutoGen.c # -# Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.<BR> +# Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.<BR> # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -22,6 +22,7 @@ from Common.Misc import * from Common.String import StringToArray from StrGather import * +from GenPcdDb import CreatePcdDatabaseCode ## PCD type string gItemTypeStringDatabase = { @@ -49,252 +50,6 @@ gDatumSizeStringDatabaseH = {'UINT8':'8','UINT16':'16','UINT32':'32','UINT64':'64','BOOLEAN':'BOOL','VOID*':'PTR'} gDatumSizeStringDatabaseLib = {'UINT8':'8','UINT16':'16','UINT32':'32','UINT64':'64','BOOLEAN':'Bool','VOID*':'Ptr'} -## Mapping between PCD driver type and EFI phase -gPcdPhaseMap = { - "PEI_PCD_DRIVER" : "PEI", - "DXE_PCD_DRIVER" : "DXE" -} - -gPcdDatabaseCommonAutoGenH = """ -// -// The following definition will be generated by build tool -// - -// -// Common definitions -// -typedef UINT8 SKU_ID; - -#define PCD_TYPE_SHIFT 28 - -#define PCD_TYPE_DATA (0x0U << PCD_TYPE_SHIFT) -#define PCD_TYPE_HII (0x8U << PCD_TYPE_SHIFT) -#define PCD_TYPE_VPD (0x4U << PCD_TYPE_SHIFT) -#define PCD_TYPE_SKU_ENABLED (0x2U << PCD_TYPE_SHIFT) -#define PCD_TYPE_STRING (0x1U << PCD_TYPE_SHIFT) - -#define PCD_TYPE_ALL_SET (PCD_TYPE_DATA | PCD_TYPE_HII | PCD_TYPE_VPD | PCD_TYPE_SKU_ENABLED | PCD_TYPE_STRING) - -#define PCD_DATUM_TYPE_SHIFT 24 - -#define PCD_DATUM_TYPE_POINTER (0x0U << PCD_DATUM_TYPE_SHIFT) -#define PCD_DATUM_TYPE_UINT8 (0x1U << PCD_DATUM_TYPE_SHIFT) -#define PCD_DATUM_TYPE_UINT16 (0x2U << PCD_DATUM_TYPE_SHIFT) -#define PCD_DATUM_TYPE_UINT32 (0x4U << PCD_DATUM_TYPE_SHIFT) -#define PCD_DATUM_TYPE_UINT64 (0x8U << PCD_DATUM_TYPE_SHIFT) - -#define PCD_DATUM_TYPE_ALL_SET (PCD_DATUM_TYPE_POINTER | \\ - PCD_DATUM_TYPE_UINT8 | \\ - PCD_DATUM_TYPE_UINT16 | \\ - PCD_DATUM_TYPE_UINT32 | \\ - PCD_DATUM_TYPE_UINT64) - -#define PCD_DATABASE_OFFSET_MASK (~(PCD_TYPE_ALL_SET | PCD_DATUM_TYPE_ALL_SET)) - -typedef struct { - UINT32 ExTokenNumber; - UINT16 LocalTokenNumber; // PCD Number of this particular platform build - UINT16 ExGuidIndex; // Index of GuidTable -} DYNAMICEX_MAPPING; - -typedef struct { - UINT32 SkuDataStartOffset; //We have to use offsetof MACRO as we don't know padding done by compiler - UINT32 SkuIdTableOffset; //Offset from the PCD_DB -} SKU_HEAD; - -typedef struct { - UINT32 StringIndex; // Offset in String Table in units of UINT32. - UINT32 DefaultValueOffset; // Offset of the Default Value - UINT16 GuidTableIndex; // Offset in Guid Table in units of GUID. - UINT16 Offset; // Offset in Variable -} VARIABLE_HEAD; - -typedef struct { - UINT32 Offset; -} VPD_HEAD; - -typedef UINT32 STRING_HEAD; - -typedef UINT16 SIZE_INFO; - -#define offsetof(s,m) (UINT32) (UINTN) &(((s *)0)->m) - -""" - -gPcdDatabaseEpilogueAutoGenH = """ -typedef struct { - PEI_PCD_DATABASE PeiDb; - DXE_PCD_DATABASE DxeDb; -} PCD_DATABASE; - -#define PCD_TOTAL_TOKEN_NUMBER (PEI_LOCAL_TOKEN_NUMBER + DXE_LOCAL_TOKEN_NUMBER) - -""" - -gPcdDatabaseAutoGenH = TemplateString(""" -#define ${PHASE}_GUID_TABLE_SIZE ${GUID_TABLE_SIZE} -#define ${PHASE}_STRING_TABLE_SIZE ${STRING_TABLE_SIZE} -#define ${PHASE}_SKUID_TABLE_SIZE ${SKUID_TABLE_SIZE} -#define ${PHASE}_LOCAL_TOKEN_NUMBER_TABLE_SIZE ${LOCAL_TOKEN_NUMBER_TABLE_SIZE} -#define ${PHASE}_LOCAL_TOKEN_NUMBER ${LOCAL_TOKEN_NUMBER} -#define ${PHASE}_EXMAPPING_TABLE_SIZE ${EXMAPPING_TABLE_SIZE} -#define ${PHASE}_EX_TOKEN_NUMBER ${EX_TOKEN_NUMBER} -#define ${PHASE}_SIZE_TABLE_SIZE ${SIZE_TABLE_SIZE} -#define ${PHASE}_GUID_TABLE_EMPTY ${GUID_TABLE_EMPTY} -#define ${PHASE}_STRING_TABLE_EMPTY ${STRING_TABLE_EMPTY} -#define ${PHASE}_SKUID_TABLE_EMPTY ${SKUID_TABLE_EMPTY} -#define ${PHASE}_DATABASE_EMPTY ${DATABASE_EMPTY} -#define ${PHASE}_EXMAP_TABLE_EMPTY ${EXMAP_TABLE_EMPTY} - -typedef struct { -${BEGIN} UINT64 ${INIT_CNAME_DECL_UINT64}_${INIT_GUID_DECL_UINT64}[${INIT_NUMSKUS_DECL_UINT64}]; -${END} -${BEGIN} UINT64 ${VARDEF_CNAME_UINT64}_${VARDEF_GUID_UINT64}_VariableDefault_${VARDEF_SKUID_UINT64}; -${END} -${BEGIN} UINT32 ${INIT_CNAME_DECL_UINT32}_${INIT_GUID_DECL_UINT32}[${INIT_NUMSKUS_DECL_UINT32}]; -${END} -${BEGIN} UINT32 ${VARDEF_CNAME_UINT32}_${VARDEF_GUID_UINT32}_VariableDefault_${VARDEF_SKUID_UINT32}; -${END} -${BEGIN} VPD_HEAD ${VPD_HEAD_CNAME_DECL}_${VPD_HEAD_GUID_DECL}[${VPD_HEAD_NUMSKUS_DECL}]; -${END} - DYNAMICEX_MAPPING ExMapTable[${PHASE}_EXMAPPING_TABLE_SIZE]; - UINT32 LocalTokenNumberTable[${PHASE}_LOCAL_TOKEN_NUMBER_TABLE_SIZE]; - GUID GuidTable[${PHASE}_GUID_TABLE_SIZE]; -${BEGIN} STRING_HEAD ${STRING_HEAD_CNAME_DECL}_${STRING_HEAD_GUID_DECL}[${STRING_HEAD_NUMSKUS_DECL}]; -${END} -${BEGIN} VARIABLE_HEAD ${VARIABLE_HEAD_CNAME_DECL}_${VARIABLE_HEAD_GUID_DECL}_Variable_Header[${VARIABLE_HEAD_NUMSKUS_DECL}]; -${END} -${BEGIN} UINT8 StringTable${STRING_TABLE_INDEX}[${STRING_TABLE_LENGTH}]; /* ${STRING_TABLE_CNAME}_${STRING_TABLE_GUID} */ -${END} - SIZE_INFO SizeTable[${PHASE}_SIZE_TABLE_SIZE]; -${BEGIN} UINT16 ${INIT_CNAME_DECL_UINT16}_${INIT_GUID_DECL_UINT16}[${INIT_NUMSKUS_DECL_UINT16}]; -${END} -${BEGIN} UINT16 ${VARDEF_CNAME_UINT16}_${VARDEF_GUID_UINT16}_VariableDefault_${VARDEF_SKUID_UINT16}; -${END} -${BEGIN} UINT8 ${INIT_CNAME_DECL_UINT8}_${INIT_GUID_DECL_UINT8}[${INIT_NUMSKUS_DECL_UINT8}]; -${END} -${BEGIN} UINT8 ${VARDEF_CNAME_UINT8}_${VARDEF_GUID_UINT8}_VariableDefault_${VARDEF_SKUID_UINT8}; -${END} -${BEGIN} BOOLEAN ${INIT_CNAME_DECL_BOOLEAN}_${INIT_GUID_DECL_BOOLEAN}[${INIT_NUMSKUS_DECL_BOOLEAN}]; -${END} -${BEGIN} BOOLEAN ${VARDEF_CNAME_BOOLEAN}_${VARDEF_GUID_BOOLEAN}_VariableDefault_${VARDEF_SKUID_BOOLEAN}; -${END} - UINT8 SkuIdTable[${PHASE}_SKUID_TABLE_SIZE]; -${SYSTEM_SKU_ID} -} ${PHASE}_PCD_DATABASE_INIT; - -typedef struct { -${PCD_DATABASE_UNINIT_EMPTY} -${BEGIN} UINT64 ${UNINIT_CNAME_DECL_UINT64}_${UNINIT_GUID_DECL_UINT64}[${UNINIT_NUMSKUS_DECL_UINT64}]; -${END} -${BEGIN} UINT32 ${UNINIT_CNAME_DECL_UINT32}_${UNINIT_GUID_DECL_UINT32}[${UNINIT_NUMSKUS_DECL_UINT32}]; -${END} -${BEGIN} UINT16 ${UNINIT_CNAME_DECL_UINT16}_${UNINIT_GUID_DECL_UINT16}[${UNINIT_NUMSKUS_DECL_UINT16}]; -${END} -${BEGIN} UINT8 ${UNINIT_CNAME_DECL_UINT8}_${UNINIT_GUID_DECL_UINT8}[${UNINIT_NUMSKUS_DECL_UINT8}]; -${END} -${BEGIN} BOOLEAN ${UNINIT_CNAME_DECL_BOOLEAN}_${UNINIT_GUID_DECL_BOOLEAN}[${UNINIT_NUMSKUS_DECL_BOOLEAN}]; -${END} -} ${PHASE}_PCD_DATABASE_UNINIT; - -#define PCD_${PHASE}_SERVICE_DRIVER_VERSION 2 - -typedef struct { - ${PHASE}_PCD_DATABASE_INIT Init; - ${PHASE}_PCD_DATABASE_UNINIT Uninit; -} ${PHASE}_PCD_DATABASE; - -#define ${PHASE}_NEX_TOKEN_NUMBER (${PHASE}_LOCAL_TOKEN_NUMBER - ${PHASE}_EX_TOKEN_NUMBER) -""") - -gEmptyPcdDatabaseAutoGenC = TemplateString(""" -${PHASE}_PCD_DATABASE_INIT g${PHASE}PcdDbInit = { - /* ExMapTable */ - { - {0, 0, 0} - }, - /* LocalTokenNumberTable */ - { - 0 - }, - /* GuidTable */ - { - {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}} - }, - /* StringTable */ - { 0 }, - /* SizeTable */ - { - 0, 0 - }, - /* SkuIdTable */ - { 0 }, - ${SYSTEM_SKU_ID_VALUE} -}; -""") - -gPcdDatabaseAutoGenC = TemplateString(""" -${PHASE}_PCD_DATABASE_INIT g${PHASE}PcdDbInit = { -${BEGIN} { ${INIT_VALUE_UINT64} }, /* ${INIT_CNAME_DECL_UINT64}_${INIT_GUID_DECL_UINT64}[${INIT_NUMSKUS_DECL_UINT64}] */ -${END} -${BEGIN} ${VARDEF_VALUE_UINT64}, /* ${VARDEF_CNAME_UINT64}_${VARDEF_GUID_UINT64}_VariableDefault_${VARDEF_SKUID_UINT64} */ -${END} -${BEGIN} { ${INIT_VALUE_UINT32} }, /* ${INIT_CNAME_DECL_UINT32}_${INIT_GUID_DECL_UINT32}[${INIT_NUMSKUS_DECL_UINT32}] */ -${END} -${BEGIN} ${VARDEF_VALUE_UINT32}, /* ${VARDEF_CNAME_UINT32}_${VARDEF_GUID_UINT32}_VariableDefault_${VARDEF_SKUID_UINT32} */ -${END} - /* VPD */ -${BEGIN} { ${VPD_HEAD_VALUE} }, /* ${VPD_HEAD_CNAME_DECL}_${VPD_HEAD_GUID_DECL}[${VPD_HEAD_NUMSKUS_DECL}] */ -${END} - /* ExMapTable */ - { -${BEGIN} { ${EXMAPPING_TABLE_EXTOKEN}, ${EXMAPPING_TABLE_LOCAL_TOKEN}, ${EXMAPPING_TABLE_GUID_INDEX} }, -${END} - }, - /* LocalTokenNumberTable */ - { -${BEGIN} offsetof(${PHASE}_PCD_DATABASE, ${TOKEN_INIT}.${TOKEN_CNAME}_${TOKEN_GUID}${VARDEF_HEADER}) | ${TOKEN_TYPE}, -${END} - }, - /* GuidTable */ - { -${BEGIN} ${GUID_STRUCTURE}, -${END} - }, -${BEGIN} { ${STRING_HEAD_VALUE} }, /* ${STRING_HEAD_CNAME_DECL}_${STRING_HEAD_GUID_DECL}[${STRING_HEAD_NUMSKUS_DECL}] */ -${END} -${BEGIN} /* ${VARIABLE_HEAD_CNAME_DECL}_${VARIABLE_HEAD_GUID_DECL}_Variable_Header[${VARIABLE_HEAD_NUMSKUS_DECL}] */ - { - ${VARIABLE_HEAD_VALUE} - }, -${END} - /* StringTable */ -${BEGIN} ${STRING_TABLE_VALUE}, /* ${STRING_TABLE_CNAME}_${STRING_TABLE_GUID} */ -${END} - /* SizeTable */ - { -${BEGIN} ${SIZE_TABLE_MAXIMUM_LENGTH}, ${SIZE_TABLE_CURRENT_LENGTH}, /* ${SIZE_TABLE_CNAME}_${SIZE_TABLE_GUID} */ -${END} - }, -${BEGIN} { ${INIT_VALUE_UINT16} }, /* ${INIT_CNAME_DECL_UINT16}_${INIT_GUID_DECL_UINT16}[${INIT_NUMSKUS_DECL_UINT16}] */ -${END} -${BEGIN} ${VARDEF_VALUE_UINT16}, /* ${VARDEF_CNAME_UINT16}_${VARDEF_GUID_UINT16}_VariableDefault_${VARDEF_SKUID_UINT16} */ -${END} -${BEGIN} { ${INIT_VALUE_UINT8} }, /* ${INIT_CNAME_DECL_UINT8}_${INIT_GUID_DECL_UINT8}[${INIT_NUMSKUS_DECL_UINT8}] */ -${END} -${BEGIN} ${VARDEF_VALUE_UINT8}, /* ${VARDEF_CNAME_UINT8}_${VARDEF_GUID_UINT8}_VariableDefault_${VARDEF_SKUID_UINT8} */ -${END} -${BEGIN} { ${INIT_VALUE_BOOLEAN} }, /* ${INIT_CNAME_DECL_BOOLEAN}_${INIT_GUID_DECL_BOOLEAN}[${INIT_NUMSKUS_DECL_BOOLEAN}] */ -${END} -${BEGIN} ${VARDEF_VALUE_BOOLEAN}, /* ${VARDEF_CNAME_BOOLEAN}_${VARDEF_GUID_BOOLEAN}_VariableDefault_${VARDEF_SKUID_BOOLEAN} */ -${END} - /* SkuIdTable */ - { ${BEGIN}${SKUID_VALUE}, ${END} }, - ${SYSTEM_SKU_ID_VALUE} -}; -""") - - ## AutoGen File Header Templates gAutoGenHeaderString = TemplateString("""\ /** @@ -907,6 +662,76 @@ "USER_DEFINED" : [gBasicHeaderFile] } +## Autogen internal worker macro to define DynamicEx PCD name includes both the TokenSpaceGuidName +# the TokenName and Guid comparison to avoid define name collisions. +# +# @param Info The ModuleAutoGen object +# @param AutoGenH The TemplateString object for header file +# +# +def DynExPcdTokenNumberMapping(Info, AutoGenH): + ExTokenCNameList = [] + PcdExList = [] + if Info.IsLibrary: + PcdList = Info.LibraryPcdList + else: + PcdList = Info.ModulePcdList + for Pcd in PcdList: + if Pcd.Type in gDynamicExPcd: + ExTokenCNameList.append(Pcd.TokenCName) + PcdExList.append(Pcd) + if len(ExTokenCNameList) == 0: + return + AutoGenH.Append('\n#define COMPAREGUID(Guid1, Guid2) (BOOLEAN)(*(CONST UINT64*)Guid1 == *(CONST UINT64*)Guid2 && *((CONST UINT64*)Guid1 + 1) == *((CONST UINT64*)Guid2 + 1))\n') + # AutoGen for each PCD listed in a [PcdEx] section of a Module/Lib INF file. + # Auto generate a macro for each TokenName that takes a Guid pointer as a parameter. + # Use the Guid pointer to see if it matches any of the token space GUIDs. + TokenCNameList = [] + for TokenCName in ExTokenCNameList: + if TokenCName in TokenCNameList: + continue + Index = 0 + Count = ExTokenCNameList.count(TokenCName) + for Pcd in PcdExList: + if Pcd.TokenCName == TokenCName: + Index = Index + 1 + if Index == 1: + AutoGenH.Append('\n#define __PCD_%s_ADDR_CMP(GuidPtr) (' % (Pcd.TokenCName)) + AutoGenH.Append('\\\n (GuidPtr == &%s) ? _PCD_TOKEN_%s_%s:' + % (Pcd.TokenSpaceGuidCName, Pcd.TokenSpaceGuidCName, Pcd.TokenCName)) + else: + AutoGenH.Append('\\\n (GuidPtr == &%s) ? _PCD_TOKEN_%s_%s:' + % (Pcd.TokenSpaceGuidCName, Pcd.TokenSpaceGuidCName, Pcd.TokenCName)) + if Index == Count: + AutoGenH.Append('0 \\\n )\n') + TokenCNameList.append(TokenCName) + + TokenCNameList = [] + for TokenCName in ExTokenCNameList: + if TokenCName in TokenCNameList: + continue + Index = 0 + Count = ExTokenCNameList.count(TokenCName) + for Pcd in PcdExList: + if Pcd.Type in gDynamicExPcd and Pcd.TokenCName == TokenCName: + Index = Index + 1 + if Index == 1: + AutoGenH.Append('\n#define __PCD_%s_VAL_CMP(GuidPtr) (' % (Pcd.TokenCName)) + AutoGenH.Append('\\\n COMPAREGUID (GuidPtr, &%s) ? _PCD_TOKEN_%s_%s:' + % (Pcd.TokenSpaceGuidCName, Pcd.TokenSpaceGuidCName, Pcd.TokenCName)) + else: + AutoGenH.Append('\\\n COMPAREGUID (GuidPtr, &%s) ? _PCD_TOKEN_%s_%s:' + % (Pcd.TokenSpaceGuidCName, Pcd.TokenSpaceGuidCName, Pcd.TokenCName)) + if Index == Count: + AutoGenH.Append('0 \\\n )\n') + # Autogen internal worker macro to compare GUIDs. Guid1 is a pointer to a GUID. + # Guid2 is a C name for a GUID. Compare pointers first because optimizing compiler + # can do this at build time on CONST GUID pointers and optimize away call to COMPAREGUID(). + # COMPAREGUID() will only be used if the Guid passed in is local to the module. + AutoGenH.Append('#define _PCD_TOKEN_EX_%s(GuidPtr) __PCD_%s_ADDR_CMP(GuidPtr) ? __PCD_%s_ADDR_CMP(GuidPtr) : __PCD_%s_VAL_CMP(GuidPtr) \n' + % (Pcd.TokenCName, Pcd.TokenCName, Pcd.TokenCName, Pcd.TokenCName)) + TokenCNameList.append(TokenCName) + ## Create code for module PCDs # # @param Info The ModuleAutoGen object @@ -923,13 +748,29 @@ PcdTokenName = '_PCD_TOKEN_' + Pcd.TokenCName if Pcd.Type in gDynamicExPcd: TokenNumber = int(Pcd.TokenValue, 0) + # Add TokenSpaceGuidValue value to PcdTokenName to discriminate the DynamicEx PCDs with + # different Guids but same TokenCName + PcdExTokenName = '_PCD_TOKEN_' + Pcd.TokenSpaceGuidCName + '_' + Pcd.TokenCName + AutoGenH.Append('\n#define %s %dU\n' % (PcdExTokenName, TokenNumber)) else: if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) not in PcdTokenNumber: - EdkLogger.error("build", AUTOGEN_ERROR, - "No generated token number for %s.%s\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName), - ExtraData="[%s]" % str(Info)) - TokenNumber = PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] - AutoGenH.Append('\n#define %s %dU\n' % (PcdTokenName, TokenNumber)) + # If one of the Source built modules listed in the DSC is not listed in FDF modules, + # and the INF lists a PCD can only use the PcdsDynamic access method (it is only + # listed in the DEC file that declares the PCD as PcdsDynamic), then build tool will + # report warning message notify the PI that they are attempting to build a module + # that must be included in a flash image in order to be functional. These Dynamic PCD + # will not be added into the Database unless it is used by other modules that are + # included in the FDF file. + # In this case, just assign an invalid token number to make it pass build. + if Pcd.Type in PCD_DYNAMIC_TYPE_LIST: + TokenNumber = 0 + else: + EdkLogger.error("build", AUTOGEN_ERROR, + "No generated token number for %s.%s\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName), + ExtraData="[%s]" % str(Info)) + else: + TokenNumber = PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] + AutoGenH.Append('\n#define %s %dU\n' % (PcdTokenName, TokenNumber)) EdkLogger.debug(EdkLogger.DEBUG_3, "Creating code for " + Pcd.TokenCName + "." + Pcd.TokenSpaceGuidCName) if Pcd.Type not in gItemTypeStringDatabase: @@ -946,12 +787,33 @@ GetModeName = '_PCD_GET_MODE_' + gDatumSizeStringDatabaseH[Pcd.DatumType] + '_' + Pcd.TokenCName SetModeName = '_PCD_SET_MODE_' + gDatumSizeStringDatabaseH[Pcd.DatumType] + '_' + Pcd.TokenCName + PcdExCNameList = [] if Pcd.Type in gDynamicExPcd: - AutoGenH.Append('#define %s LibPcdGetEx%s(&%s, %s)\n' % (GetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) - if Pcd.DatumType == 'VOID*': - AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPcdSetEx%s(&%s, %s, (SizeOfBuffer), (Buffer))\n' % (SetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) + if Info.IsLibrary: + PcdList = Info.LibraryPcdList else: - AutoGenH.Append('#define %s(Value) LibPcdSetEx%s(&%s, %s, (Value))\n' % (SetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) + PcdList = Info.ModulePcdList + for PcdModule in PcdList: + if PcdModule.Type in gDynamicExPcd: + PcdExCNameList.append(PcdModule.TokenCName) + # Be compatible with the current code which using PcdToken and PcdGet/Set for DynamicEx Pcd. + # If only PcdToken and PcdGet/Set used in all Pcds with different CName, it should succeed to build. + # If PcdToken and PcdGet/Set used in the Pcds with different Guids but same CName, it should failed to build. + if PcdExCNameList.count(Pcd.TokenCName) > 1: + AutoGenH.Append('// Disabled the macros, as PcdToken and PcdGet/Set are not allowed in the case that more than one DynamicEx Pcds are different Guids but same CName.\n') + AutoGenH.Append('// #define %s %s\n' % (PcdTokenName, PcdExTokenName)) + AutoGenH.Append('// #define %s LibPcdGetEx%s(&%s, %s)\n' % (GetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) + if Pcd.DatumType == 'VOID*': + AutoGenH.Append('// #define %s(SizeOfBuffer, Buffer) LibPcdSetEx%s(&%s, %s, (SizeOfBuffer), (Buffer))\n' % (SetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) + else: + AutoGenH.Append('// #define %s(Value) LibPcdSetEx%s(&%s, %s, (Value))\n' % (SetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) + else: + AutoGenH.Append('#define %s %s\n' % (PcdTokenName, PcdExTokenName)) + AutoGenH.Append('#define %s LibPcdGetEx%s(&%s, %s)\n' % (GetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) + if Pcd.DatumType == 'VOID*': + AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPcdSetEx%s(&%s, %s, (SizeOfBuffer), (Buffer))\n' % (SetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) + else: + AutoGenH.Append('#define %s(Value) LibPcdSetEx%s(&%s, %s, (Value))\n' % (SetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) elif Pcd.Type in gDynamicPcd: AutoGenH.Append('#define %s LibPcdGet%s(%s)\n' % (GetModeName, DatumSizeLib, PcdTokenName)) if Pcd.DatumType == 'VOID*': @@ -1117,16 +979,30 @@ PcdTokenNumber = Info.PlatformInfo.PcdTokenNumber TokenSpaceGuidCName = Pcd.TokenSpaceGuidCName TokenCName = Pcd.TokenCName - TokenSpaceGuidValue = Pcd.TokenSpaceGuidValue #Info.GuidList[TokenSpaceGuidCName] - if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) not in PcdTokenNumber: - EdkLogger.error("build", AUTOGEN_ERROR, - "No generated token number for %s.%s\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName), - ExtraData="[%s]" % str(Info)) - TokenNumber = PcdTokenNumber[TokenCName, TokenSpaceGuidCName] - - # If PCD is DynamicEx, then use TokenNumber declared in DEC file + PcdTokenName = '_PCD_TOKEN_' + TokenCName + # + # Write PCDs + # if Pcd.Type in gDynamicExPcd: TokenNumber = int(Pcd.TokenValue, 0) + else: + if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) not in PcdTokenNumber: + # If one of the Source built modules listed in the DSC is not listed in FDF modules, + # and the INF lists a PCD can only use the PcdsDynamic access method (it is only + # listed in the DEC file that declares the PCD as PcdsDynamic), then build tool will + # report warning message notify the PI that they are attempting to build a module + # that must be included in a flash image in order to be functional. These Dynamic PCD + # will not be added into the Database unless it is used by other modules that are + # included in the FDF file. + # In this case, just assign an invalid token number to make it pass build. + if Pcd.Type in PCD_DYNAMIC_TYPE_LIST: + TokenNumber = 0 + else: + EdkLogger.error("build", AUTOGEN_ERROR, + "No generated token number for %s.%s\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName), + ExtraData="[%s]" % str(Info)) + else: + TokenNumber = PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] if Pcd.Type not in gItemTypeStringDatabase: EdkLogger.error("build", AUTOGEN_ERROR, @@ -1148,23 +1024,40 @@ if Pcd.DatumType == 'VOID*': Type = '(VOID *)' Array = '[]' - - AutoGenH.Append('#define _PCD_TOKEN_%s %dU\n' % (TokenCName, TokenNumber)) - PcdItemType = Pcd.Type - #if PcdItemType in gDynamicPcd: - # PcdItemType = TAB_PCDS_FIXED_AT_BUILD - # if (TokenCName, TokenSpaceGuidCName) in Info.PlatformInfo.Platform.Pcds: - # PcdItemType = Info.PlatformInfo.Platform.Pcds[TokenCName, TokenSpaceGuidCName].Type + PcdExCNameList = [] if PcdItemType in gDynamicExPcd: - PcdTokenName = '_PCD_TOKEN_' + TokenCName - AutoGenH.Append('#define %s LibPcdGetEx%s(&%s, %s)\n' % (GetModeName, DatumSizeLib, TokenSpaceGuidCName, PcdTokenName)) - if DatumType == 'VOID*': - AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPcdSetEx%s(&%s, %s, (SizeOfBuffer), (Buffer))\n' % (SetModeName,DatumSizeLib, TokenSpaceGuidCName, PcdTokenName)) + PcdExTokenName = '_PCD_TOKEN_' + TokenSpaceGuidCName + '_' + Pcd.TokenCName + AutoGenH.Append('\n#define %s %dU\n' % (PcdExTokenName, TokenNumber)) + + if Info.IsLibrary: + PcdList = Info.LibraryPcdList else: - AutoGenH.Append('#define %s(Value) LibPcdSetEx%s(&%s, %s, (Value))\n' % (SetModeName, DatumSizeLib, TokenSpaceGuidCName, PcdTokenName)) + PcdList = Info.ModulePcdList + for PcdModule in PcdList: + if PcdModule.Type in gDynamicExPcd: + PcdExCNameList.append(PcdModule.TokenCName) + # Be compatible with the current code which using PcdGet/Set for DynamicEx Pcd. + # If only PcdGet/Set used in all Pcds with different CName, it should succeed to build. + # If PcdGet/Set used in the Pcds with different Guids but same CName, it should failed to build. + if PcdExCNameList.count(Pcd.TokenCName) > 1: + AutoGenH.Append('// Disabled the macros, as PcdToken and PcdGet/Set are not allowed in the case that more than one DynamicEx Pcds are different Guids but same CName.\n') + AutoGenH.Append('// #define %s %s\n' % (PcdTokenName, PcdExTokenName)) + AutoGenH.Append('// #define %s LibPcdGetEx%s(&%s, %s)\n' % (GetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) + if Pcd.DatumType == 'VOID*': + AutoGenH.Append('// #define %s(SizeOfBuffer, Buffer) LibPcdSetEx%s(&%s, %s, (SizeOfBuffer), (Buffer))\n' % (SetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) + else: + AutoGenH.Append('// #define %s(Value) LibPcdSetEx%s(&%s, %s, (Value))\n' % (SetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) + else: + AutoGenH.Append('#define %s %s\n' % (PcdTokenName, PcdExTokenName)) + AutoGenH.Append('#define %s LibPcdGetEx%s(&%s, %s)\n' % (GetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) + if Pcd.DatumType == 'VOID*': + AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPcdSetEx%s(&%s, %s, (SizeOfBuffer), (Buffer))\n' % (SetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) + else: + AutoGenH.Append('#define %s(Value) LibPcdSetEx%s(&%s, %s, (Value))\n' % (SetModeName, DatumSizeLib, Pcd.TokenSpaceGuidCName, PcdTokenName)) + else: + AutoGenH.Append('#define _PCD_TOKEN_%s %dU\n' % (TokenCName, TokenNumber)) if PcdItemType in gDynamicPcd: - PcdTokenName = '_PCD_TOKEN_' + TokenCName AutoGenH.Append('#define %s LibPcdGet%s(%s)\n' % (GetModeName, DatumSizeLib, PcdTokenName)) if DatumType == 'VOID*': AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPcdSet%s(%s, (SizeOfBuffer), (Buffer))\n' %(SetModeName, DatumSizeLib, PcdTokenName)) @@ -1172,469 +1065,16 @@ AutoGenH.Append('#define %s(Value) LibPcdSet%s(%s, (Value))\n' % (SetModeName, DatumSizeLib, PcdTokenName)) if PcdItemType == TAB_PCDS_PATCHABLE_IN_MODULE: PcdVariableName = '_gPcd_' + gItemTypeStringDatabase[TAB_PCDS_PATCHABLE_IN_MODULE] + '_' + TokenCName - AutoGenH.Append('extern %s _gPcd_BinaryPatch_%s%s;\n' %(DatumType, TokenCName, Array) ) + AutoGenH.Append('extern volatile %s _gPcd_BinaryPatch_%s%s;\n' %(DatumType, TokenCName, Array) ) AutoGenH.Append('#define %s %s_gPcd_BinaryPatch_%s\n' %(GetModeName, Type, TokenCName)) AutoGenH.Append('#define %s(Value) (%s = (Value))\n' % (SetModeName, PcdVariableName)) if PcdItemType == TAB_PCDS_FIXED_AT_BUILD or PcdItemType == TAB_PCDS_FEATURE_FLAG: AutoGenH.Append('extern const %s _gPcd_FixedAtBuild_%s%s;\n' %(DatumType, TokenCName, Array)) - #AutoGenH.Append('#define _PCD_VALUE_%s _gPcd_FixedAtBuild_%s\n' %(TokenCName, TokenCName)) AutoGenH.Append('#define %s %s_gPcd_FixedAtBuild_%s\n' %(GetModeName, Type, TokenCName)) AutoGenH.Append('//#define %s ASSERT(FALSE) // It is not allowed to set value for a FIXED_AT_BUILD PCD\n' % SetModeName) -## Create code for PCD database in DXE or PEI phase -# -# @param Platform The platform object -# @retval tuple Two TemplateString objects for C code and header file, -# respectively -# -def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase): - AutoGenC = TemplateString() - AutoGenH = TemplateString() - Dict = { - 'PHASE' : Phase, - 'GUID_TABLE_SIZE' : '1U', - 'STRING_TABLE_SIZE' : '1U', - 'SKUID_TABLE_SIZE' : '1U', - 'LOCAL_TOKEN_NUMBER_TABLE_SIZE' : '1U', - 'LOCAL_TOKEN_NUMBER' : '0U', - 'EXMAPPING_TABLE_SIZE' : '1U', - 'EX_TOKEN_NUMBER' : '0U', - 'SIZE_TABLE_SIZE' : '2U', - 'GUID_TABLE_EMPTY' : 'TRUE', - 'STRING_TABLE_EMPTY' : 'TRUE', - 'SKUID_TABLE_EMPTY' : 'TRUE', - 'DATABASE_EMPTY' : 'TRUE', - 'EXMAP_TABLE_EMPTY' : 'TRUE', - 'PCD_DATABASE_UNINIT_EMPTY' : ' UINT8 dummy; /* PCD_DATABASE_UNINIT is emptry */', - 'SYSTEM_SKU_ID' : ' SKU_ID SystemSkuId;', - 'SYSTEM_SKU_ID_VALUE' : '0U' - } - for DatumType in ['UINT64','UINT32','UINT16','UINT8','BOOLEAN', "VOID*"]: - Dict['VARDEF_CNAME_' + DatumType] = [] - Dict['V... [truncated message content] |
From: <yi...@us...> - 2013-11-18 05:46:01
|
Revision: 2609 http://sourceforge.net/p/edk2-buildtools/code/2609 Author: yingke Date: 2013-11-18 05:45:54 +0000 (Mon, 18 Nov 2013) Log Message: ----------- Fix a bug which hangs build if FV section only has attributes listed. Reviewed-by: Hesheng Chen <hes...@in...> Signed-off-by: Yingke Liu <yin...@in...> Modified Paths: -------------- trunk/BaseTools/Source/Python/GenFds/FdfParser.py Modified: trunk/BaseTools/Source/Python/GenFds/FdfParser.py =================================================================== --- trunk/BaseTools/Source/Python/GenFds/FdfParser.py 2013-11-14 07:29:08 UTC (rev 2608) +++ trunk/BaseTools/Source/Python/GenFds/FdfParser.py 2013-11-18 05:45:54 UTC (rev 2609) @@ -2158,8 +2158,9 @@ # @retval None # def __GetFvAttributes(self, FvObj): - + IsWordToken = False while self.__GetNextWord(): + IsWordToken = True name = self.__Token if name not in ("ERASE_POLARITY", "MEMORY_MAPPED", \ "STICKY_WRITE", "LOCK_CAP", "LOCK_STATUS", "WRITE_ENABLED_CAP", \ @@ -2178,7 +2179,7 @@ FvObj.FvAttributeDict[name] = self.__Token - return True + return IsWordToken ## __GetFvNameGuid() method # This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yi...@us...> - 2013-11-14 07:29:13
|
Revision: 2608 http://sourceforge.net/p/edk2-buildtools/code/2608 Author: yingke Date: 2013-11-14 07:29:08 +0000 (Thu, 14 Nov 2013) Log Message: ----------- Fix a bug which may cause GenFv fail. Reviewed-by: Star Zeng <sta...@in...> Signed-off-by: Yingke Liu <yin...@in...> Modified Paths: -------------- trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.c Modified: trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.c =================================================================== --- trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.c 2013-11-11 06:52:10 UTC (rev 2607) +++ trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.c 2013-11-14 07:29:08 UTC (rev 2608) @@ -1104,7 +1104,7 @@ // // Sanity check. The file MUST align appropriately // - if (((UINTN) *VtfFileImage + GetFfsHeaderLength(*VtfFileImage) - (UINTN) FvImage->FileImage) % (1 << CurrentFileAlignment)) { + if (((UINTN) *VtfFileImage + GetFfsHeaderLength((EFI_FFS_FILE_HEADER *)FileBuffer) - (UINTN) FvImage->FileImage) % (1 << CurrentFileAlignment)) { Error (NULL, 0, 3000, "Invalid", "VTF file cannot be aligned on a %u-byte boundary.", (unsigned) (1 << CurrentFileAlignment)); free (FileBuffer); return EFI_ABORTED; @@ -2858,7 +2858,7 @@ if (EFI_ERROR (Status)) { break; } - SubFvImageHeader = (EFI_FIRMWARE_VOLUME_HEADER *) ((UINT8 *) SubFvSection.FVImageSection + sizeof (EFI_FIRMWARE_VOLUME_IMAGE_SECTION)); + SubFvImageHeader = (EFI_FIRMWARE_VOLUME_HEADER *) ((UINT8 *) SubFvSection.FVImageSection + GetSectionHeaderLength(SubFvSection.FVImageSection)); // // Rebase on Flash // This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yi...@us...> - 2013-11-11 06:52:15
|
Revision: 2607 http://sourceforge.net/p/edk2-buildtools/code/2607 Author: yingke Date: 2013-11-11 06:52:10 +0000 (Mon, 11 Nov 2013) Log Message: ----------- 1. Support large FFS and section file. 2. Support OEM capsule flags. 3. Support weak alignment FV. Reviewed-by: Star Zeng <sta...@in...> Signed-off-by: Yingke Liu <yin...@in...> Modified Paths: -------------- trunk/BaseTools/Source/C/Common/FvLib.c trunk/BaseTools/Source/C/Common/FvLib.h trunk/BaseTools/Source/C/GenFfs/GenFfs.c trunk/BaseTools/Source/C/GenFv/GenFv.c trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.c trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.h trunk/BaseTools/Source/C/GenSec/GenSec.c trunk/BaseTools/Source/C/Include/Common/PiFirmwareFile.h trunk/BaseTools/Source/C/Include/Common/PiFirmwareVolume.h trunk/BaseTools/Source/C/Include/Guid/PiFirmwareFileSystem.h trunk/BaseTools/Source/Python/AutoGen/AutoGen.py trunk/BaseTools/Source/Python/CommonDataClass/FdfClass.py trunk/BaseTools/Source/Python/GenFds/FdfParser.py trunk/BaseTools/Source/Python/build/build.py Modified: trunk/BaseTools/Source/C/Common/FvLib.c =================================================================== --- trunk/BaseTools/Source/C/Common/FvLib.c 2013-10-29 11:10:08 UTC (rev 2606) +++ trunk/BaseTools/Source/C/Common/FvLib.c 2013-11-11 06:52:10 UTC (rev 2607) @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.<BR> +Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -181,7 +181,7 @@ // // Verify file is in this FV. // - if ((UINTN) CurrentFile + GetLength (CurrentFile->Size) > (UINTN) mFvHeader + mFvLength) { + if ((UINTN) CurrentFile + GetFfsFileLength(CurrentFile) > (UINTN) mFvHeader + mFvLength) { *NextFile = NULL; return EFI_SUCCESS; } @@ -194,20 +194,20 @@ // Verify current file is in range // if (((UINTN) CurrentFile < (UINTN) mFvHeader + mFvHeader->HeaderLength) || - ((UINTN) CurrentFile + GetLength (CurrentFile->Size) > (UINTN) mFvHeader + mFvLength) + ((UINTN) CurrentFile + GetFfsFileLength(CurrentFile) > (UINTN) mFvHeader + mFvLength) ) { return EFI_INVALID_PARAMETER; } // // Get next file, compensate for 8 byte alignment if necessary. // - *NextFile = (EFI_FFS_FILE_HEADER *) ((((UINTN) CurrentFile - (UINTN) mFvHeader + GetLength (CurrentFile->Size) + 0x07) & (-1 << 3)) + (UINT8 *) mFvHeader); + *NextFile = (EFI_FFS_FILE_HEADER *) ((((UINTN) CurrentFile - (UINTN) mFvHeader + GetFfsFileLength(CurrentFile) + 0x07) & (-1 << 3)) + (UINT8 *) mFvHeader); // // Verify file is in this FV. // - if (((UINTN) *NextFile + sizeof (EFI_FFS_FILE_HEADER) >= (UINTN) mFvHeader + mFvLength) || - ((UINTN) *NextFile + GetLength ((*NextFile)->Size) > (UINTN) mFvHeader + mFvLength) + if (((UINTN) *NextFile + GetFfsHeaderLength(*NextFile) >= (UINTN) mFvHeader + mFvLength) || + ((UINTN) *NextFile + GetFfsFileLength (*NextFile) > (UINTN) mFvHeader + mFvLength) ) { *NextFile = NULL; return EFI_SUCCESS; @@ -434,7 +434,11 @@ EFI_FILE_SECTION_POINTER InnerSection; EFI_STATUS Status; UINTN SectionSize; + UINT16 GuidSecAttr; + UINT16 GuidDataOffset; + GuidSecAttr = 0; + GuidDataOffset = 0; CurrentSection = FirstSection; while ((UINTN) CurrentSection.CommonHeader < (UINTN) SearchEnd) { @@ -452,14 +456,21 @@ // special processing, go ahead to search the requesting // section inside the GUID-defined section. // + if (CurrentSection.CommonHeader->Type == EFI_SECTION_GUID_DEFINED) { + if (GetLength(CurrentSection.CommonHeader->Size) == 0xffffff) { + GuidSecAttr = CurrentSection.GuidDefinedSection2->Attributes; + GuidDataOffset = CurrentSection.GuidDefinedSection2->DataOffset; + } else { + GuidSecAttr = CurrentSection.GuidDefinedSection->Attributes; + GuidDataOffset = CurrentSection.GuidDefinedSection->DataOffset; + } + } if (SectionType != EFI_SECTION_GUID_DEFINED && CurrentSection.CommonHeader->Type == EFI_SECTION_GUID_DEFINED && - !(CurrentSection.GuidDefinedSection->Attributes & EFI_GUIDED_SECTION_PROCESSING_REQUIRED)) { + !(GuidSecAttr & EFI_GUIDED_SECTION_PROCESSING_REQUIRED)) { InnerSection.CommonHeader = (EFI_COMMON_SECTION_HEADER *) - ((UINTN) CurrentSection.CommonHeader + CurrentSection.GuidDefinedSection->DataOffset); - SectionSize = CurrentSection.CommonHeader->Size[0] + - (CurrentSection.CommonHeader->Size[1] << 8) + - (CurrentSection.CommonHeader->Size[2] << 16); + ((UINTN) CurrentSection.CommonHeader + GuidDataOffset); + SectionSize = GetSectionFileLength(CurrentSection.CommonHeader); Status = SearchSectionByType ( InnerSection, (UINT8 *) ((UINTN) CurrentSection.CommonHeader + SectionSize), @@ -475,7 +486,7 @@ // // Find next section (including compensating for alignment issues. // - CurrentSection.CommonHeader = (EFI_COMMON_SECTION_HEADER *) ((((UINTN) CurrentSection.CommonHeader) + GetLength (CurrentSection.CommonHeader->Size) + 0x03) & (-1 << 2)); + CurrentSection.CommonHeader = (EFI_COMMON_SECTION_HEADER *) ((((UINTN) CurrentSection.CommonHeader) + GetSectionFileLength(CurrentSection.CommonHeader) + 0x03) & (-1 << 2)); } return EFI_NOT_FOUND; @@ -538,14 +549,14 @@ // // Get the first section // - CurrentSection.CommonHeader = (EFI_COMMON_SECTION_HEADER *) ((UINTN) File + sizeof (EFI_FFS_FILE_HEADER)); + CurrentSection.CommonHeader = (EFI_COMMON_SECTION_HEADER *) ((UINTN) File + GetFfsHeaderLength(File)); // // Depth-first manner to find section file. // Status = SearchSectionByType ( CurrentSection, - (UINT8 *) ((UINTN) File + GetLength (File->Size)), + (UINT8 *) ((UINTN) File + GetFfsFileLength (File)), SectionType, &SectionCount, Instance, @@ -639,12 +650,14 @@ { BOOLEAN ErasePolarity; EFI_STATUS Status; - EFI_FFS_FILE_HEADER BlankHeader; + EFI_FFS_FILE_HEADER2 BlankHeader; UINT8 Checksum; UINT32 FileLength; UINT8 SavedChecksum; UINT8 SavedState; UINT8 FileGuidString[80]; + UINT32 FfsHeaderSize; + // // Verify library has been initialized. // @@ -665,16 +678,18 @@ if (EFI_ERROR (Status)) { return EFI_ABORTED; } + + FfsHeaderSize = GetFfsHeaderLength(FfsHeader); // // Check if we have free space // if (ErasePolarity) { - memset (&BlankHeader, -1, sizeof (EFI_FFS_FILE_HEADER)); + memset (&BlankHeader, -1, FfsHeaderSize); } else { - memset (&BlankHeader, 0, sizeof (EFI_FFS_FILE_HEADER)); + memset (&BlankHeader, 0, FfsHeaderSize); } - if (memcmp (&BlankHeader, FfsHeader, sizeof (EFI_FFS_FILE_HEADER)) == 0) { + if (memcmp (&BlankHeader, FfsHeader, FfsHeaderSize) == 0) { return EFI_NOT_FOUND; } // @@ -689,7 +704,7 @@ FfsHeader->State = 0; SavedChecksum = FfsHeader->IntegrityCheck.Checksum.File; FfsHeader->IntegrityCheck.Checksum.File = 0; - Checksum = CalculateSum8 ((UINT8 *) FfsHeader, sizeof (EFI_FFS_FILE_HEADER)); + Checksum = CalculateSum8 ((UINT8 *) FfsHeader, FfsHeaderSize); FfsHeader->State = SavedState; FfsHeader->IntegrityCheck.Checksum.File = SavedChecksum; if (Checksum != 0) { @@ -703,8 +718,8 @@ // // Verify file data checksum // - FileLength = GetLength (FfsHeader->Size); - Checksum = CalculateSum8 ((UINT8 *) (FfsHeader + 1), FileLength - sizeof (EFI_FFS_FILE_HEADER)); + FileLength = GetFfsFileLength (FfsHeader); + Checksum = CalculateSum8 ((UINT8 *) ((UINT8 *)FfsHeader + FfsHeaderSize), FileLength - FfsHeaderSize); Checksum = Checksum + FfsHeader->IntegrityCheck.Checksum.File; if (Checksum != 0) { Error (NULL, 0, 0006, "invalid FFS file checksum", "Ffs file with Guid %s", FileGuidString); @@ -725,6 +740,80 @@ } UINT32 +GetFfsHeaderLength( + IN EFI_FFS_FILE_HEADER *FfsHeader + ) +{ + if (FfsHeader == NULL) { + return 0; + } + if (FfsHeader->Attributes & FFS_ATTRIB_LARGE_FILE) { + return sizeof(EFI_FFS_FILE_HEADER2); + } + return sizeof(EFI_FFS_FILE_HEADER); +} + +UINT32 +GetSectionHeaderLength( + IN EFI_COMMON_SECTION_HEADER *SectionHeader + ) +{ + if (SectionHeader == NULL) { + return 0; + } + if (GetLength(SectionHeader->Size) == 0xffffff) { + return sizeof(EFI_COMMON_SECTION_HEADER2); + } + return sizeof(EFI_COMMON_SECTION_HEADER); +} + +UINT32 +GetFfsFileLength ( + EFI_FFS_FILE_HEADER *FfsHeader + ) +/*++ + +Routine Description: + + Get FFS file length including FFS header. + +Arguments: + + FfsHeader Pointer to EFI_FFS_FILE_HEADER. + +Returns: + + UINT32 Length of FFS file header. + +--*/ +{ + if (FfsHeader == NULL) { + return 0; + } + if (FfsHeader->Attributes & FFS_ATTRIB_LARGE_FILE) { + return ((EFI_FFS_FILE_HEADER2 *)FfsHeader)->ExtendedSize; + } else { + return GetLength(FfsHeader->Size); + } +} + +UINT32 +GetSectionFileLength ( + EFI_COMMON_SECTION_HEADER *SectionHeader + ) +{ + UINT32 Length; + if (SectionHeader == NULL) { + return 0; + } + Length = GetLength(SectionHeader->Size); + if (Length == 0xffffff) { + Length = ((EFI_COMMON_SECTION_HEADER2 *)SectionHeader)->ExtendedSize; + } + return Length; +} + +UINT32 GetLength ( UINT8 *ThreeByteLength ) Modified: trunk/BaseTools/Source/C/Common/FvLib.h =================================================================== --- trunk/BaseTools/Source/C/Common/FvLib.h 2013-10-29 11:10:08 UTC (rev 2606) +++ trunk/BaseTools/Source/C/Common/FvLib.h 2013-11-11 06:52:10 UTC (rev 2607) @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.<BR> +Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -90,6 +90,30 @@ ) ; +UINT32 +GetFfsFileLength ( + EFI_FFS_FILE_HEADER *FfsHeader + ) +; + +UINT32 +GetSectionFileLength ( + EFI_COMMON_SECTION_HEADER *SectionHeader + ) +; + +UINT32 +GetFfsHeaderLength( + IN EFI_FFS_FILE_HEADER *FfsHeader + ) +; + +UINT32 +GetSectionHeaderLength( + IN EFI_COMMON_SECTION_HEADER *SectionHeader + ) +; + /*++ Routine Description: Modified: trunk/BaseTools/Source/C/GenFfs/GenFfs.c =================================================================== --- trunk/BaseTools/Source/C/GenFfs/GenFfs.c 2013-10-29 11:10:08 UTC (rev 2606) +++ trunk/BaseTools/Source/C/GenFfs/GenFfs.c 2013-11-11 06:52:10 UTC (rev 2607) @@ -1,6 +1,6 @@ /** -Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR> +Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -119,7 +119,7 @@ // // Copyright declaration // - fprintf (stdout, "Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.\n\n"); + fprintf (stdout, "Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.\n\n"); // // Details Option @@ -284,10 +284,11 @@ UINT32 Index; FILE *InFile; EFI_COMMON_SECTION_HEADER *SectHeader; - EFI_COMMON_SECTION_HEADER TempSectHeader; + EFI_COMMON_SECTION_HEADER2 TempSectHeader; EFI_TE_IMAGE_HEADER TeHeader; UINT32 TeOffset; EFI_GUID_DEFINED_SECTION GuidSectHeader; + EFI_GUID_DEFINED_SECTION2 GuidSectHeader2; UINT32 HeaderSize; Size = 0; @@ -332,8 +333,12 @@ // Check this section is Te/Pe section, and Calculate the numbers of Te/Pe section. // TeOffset = 0; - HeaderSize = sizeof (EFI_COMMON_SECTION_HEADER); - fread (&TempSectHeader, 1, sizeof (TempSectHeader), InFile); + if (FileSize >= MAX_FFS_SIZE) { + HeaderSize = sizeof (EFI_COMMON_SECTION_HEADER2); + } else { + HeaderSize = sizeof (EFI_COMMON_SECTION_HEADER); + } + fread (&TempSectHeader, 1, HeaderSize, InFile); if (TempSectHeader.Type == EFI_SECTION_TE) { (*PESectionNum) ++; fread (&TeHeader, 1, sizeof (TeHeader), InFile); @@ -344,9 +349,16 @@ (*PESectionNum) ++; } else if (TempSectHeader.Type == EFI_SECTION_GUID_DEFINED) { fseek (InFile, 0, SEEK_SET); - fread (&GuidSectHeader, 1, sizeof (GuidSectHeader), InFile); - if ((GuidSectHeader.Attributes & EFI_GUIDED_SECTION_PROCESSING_REQUIRED) == 0) { - HeaderSize = GuidSectHeader.DataOffset; + if (FileSize >= MAX_SECTION_SIZE) { + fread (&GuidSectHeader2, 1, sizeof (GuidSectHeader2), InFile); + if ((GuidSectHeader2.Attributes & EFI_GUIDED_SECTION_PROCESSING_REQUIRED) == 0) { + HeaderSize = GuidSectHeader2.DataOffset; + } + } else { + fread (&GuidSectHeader, 1, sizeof (GuidSectHeader), InFile); + if ((GuidSectHeader.Attributes & EFI_GUIDED_SECTION_PROCESSING_REQUIRED) == 0) { + HeaderSize = GuidSectHeader.DataOffset; + } } (*PESectionNum) ++; } else if (TempSectHeader.Type == EFI_SECTION_COMPRESSION || @@ -378,6 +390,9 @@ Offset = Offset - Size - HeaderSize - TeOffset; if (FileBuffer != NULL && ((Size + Offset) < *BufferLength)) { + // + // The maximal alignment is 64K, the raw section size must be less than 0xffffff + // memset (FileBuffer + Size, 0, Offset); SectHeader = (EFI_COMMON_SECTION_HEADER *) (FileBuffer + Size); SectHeader->Type = EFI_SECTION_RAW; @@ -453,11 +468,12 @@ UINT8 *FileBuffer; UINT32 FileSize; UINT32 MaxAlignment; - EFI_FFS_FILE_HEADER FfsFileHeader; + EFI_FFS_FILE_HEADER2 FfsFileHeader; FILE *FfsFile; UINT32 Index; UINT64 LogLevel; UINT8 PeSectionNum; + UINT32 HeaderSize; // // Init local variables @@ -816,7 +832,7 @@ // // Create Ffs file header. // - memset (&FfsFileHeader, 0, sizeof (EFI_FFS_FILE_HEADER)); + memset (&FfsFileHeader, 0, sizeof (EFI_FFS_FILE_HEADER2)); memcpy (&FfsFileHeader.Name, &FileGuid, sizeof (EFI_GUID)); FfsFileHeader.Type = FfsFiletype; // @@ -832,16 +848,27 @@ FfsAlign = Index; } VerboseMsg ("the alignment of the generated FFS file is %u", (unsigned) mFfsValidAlign [FfsAlign + 1]); - FfsFileHeader.Attributes = (EFI_FFS_FILE_ATTRIBUTES) (FfsAttrib | (FfsAlign << 3)); // // Now FileSize includes the EFI_FFS_FILE_HEADER // - FileSize += sizeof (EFI_FFS_FILE_HEADER); + if (FileSize + sizeof (EFI_FFS_FILE_HEADER) >= MAX_FFS_SIZE) { + HeaderSize = sizeof (EFI_FFS_FILE_HEADER2); + FileSize += sizeof (EFI_FFS_FILE_HEADER2); + FfsFileHeader.ExtendedSize = FileSize; + memset(FfsFileHeader.Size, 0, sizeof (UINT8) * 3); + FfsAttrib |= FFS_ATTRIB_LARGE_FILE; + } else { + HeaderSize = sizeof (EFI_FFS_FILE_HEADER); + FileSize += sizeof (EFI_FFS_FILE_HEADER); + FfsFileHeader.Size[0] = (UINT8) (FileSize & 0xFF); + FfsFileHeader.Size[1] = (UINT8) ((FileSize & 0xFF00) >> 8); + FfsFileHeader.Size[2] = (UINT8) ((FileSize & 0xFF0000) >> 16); + } VerboseMsg ("the size of the generated FFS file is %u bytes", (unsigned) FileSize); - FfsFileHeader.Size[0] = (UINT8) (FileSize & 0xFF); - FfsFileHeader.Size[1] = (UINT8) ((FileSize & 0xFF00) >> 8); - FfsFileHeader.Size[2] = (UINT8) ((FileSize & 0xFF0000) >> 16); + + FfsFileHeader.Attributes = (EFI_FFS_FILE_ATTRIBUTES) (FfsAttrib | (FfsAlign << 3)); + // // Fill in checksums and state, these must be zero for checksumming // @@ -851,7 +878,7 @@ // FfsFileHeader.IntegrityCheck.Checksum.Header = CalculateChecksum8 ( (UINT8 *) &FfsFileHeader, - sizeof (EFI_FFS_FILE_HEADER) + HeaderSize ); if (FfsFileHeader.Attributes & FFS_ATTRIB_CHECKSUM) { @@ -860,7 +887,7 @@ // FfsFileHeader.IntegrityCheck.Checksum.File = CalculateChecksum8 ( FileBuffer, - FileSize - sizeof (EFI_FFS_FILE_HEADER) + FileSize - HeaderSize ); } else { FfsFileHeader.IntegrityCheck.Checksum.File = FFS_FIXED_CHECKSUM; @@ -880,11 +907,11 @@ // // write header // - fwrite (&FfsFileHeader, 1, sizeof (FfsFileHeader), FfsFile); + fwrite (&FfsFileHeader, 1, HeaderSize, FfsFile); // // write data // - fwrite (FileBuffer, 1, FileSize - sizeof (EFI_FFS_FILE_HEADER), FfsFile); + fwrite (FileBuffer, 1, FileSize - HeaderSize, FfsFile); fclose (FfsFile); Modified: trunk/BaseTools/Source/C/GenFv/GenFv.c =================================================================== --- trunk/BaseTools/Source/C/GenFv/GenFv.c 2013-10-29 11:10:08 UTC (rev 2606) +++ trunk/BaseTools/Source/C/GenFv/GenFv.c 2013-11-11 06:52:10 UTC (rev 2607) @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR> +Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -42,6 +42,7 @@ #define UTILITY_MINOR_VERSION 1 EFI_GUID mEfiFirmwareFileSystem2Guid = EFI_FIRMWARE_FILE_SYSTEM2_GUID; +EFI_GUID mEfiFirmwareFileSystem3Guid = EFI_FIRMWARE_FILE_SYSTEM3_GUID; STATIC VOID @@ -96,7 +97,7 @@ // // Copyright declaration // - fprintf (stdout, "Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.\n\n"); + fprintf (stdout, "Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.\n\n"); // // Details Option @@ -143,6 +144,8 @@ Its format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n"); fprintf (stdout, " --capflag CapFlag Capsule Reset Flag can be PersistAcrossReset,\n\ or PopulateSystemTable or InitiateReset or not set\n"); + fprintf (stdout, " --capoemflag CapOEMFlag\n\ + Capsule OEM Flag is an integer between 0x0000 and 0xffff\n"); fprintf (stdout, " --capheadsize HeadSize\n\ HeadSize is one HEX or DEC format value\n\ HeadSize is required by Capsule Image.\n"); @@ -439,6 +442,22 @@ continue; } + if (stricmp (argv[0], "--capoemflag") == 0) { + if (argv[1] == NULL) { + Error (NULL, 0, 1003, "Invalid option value", "Capsule OEM flag can't be null"); + } + Status = AsciiStringToUint64(argv[1], FALSE, &TempNumber); + if (EFI_ERROR (Status) || TempNumber > 0xffff) { + Error (NULL, 0, 1003, "Invalid option value", "Capsule OEM flag value must be integer value between 0x0000 and 0xffff"); + return STATUS_ERROR; + } + mCapDataInfo.Flags |= TempNumber; + DebugMsg( NULL, 0, 9, "Capsule OEM Flags", argv[1]); + argc -= 2; + argv += 2; + continue; + } + if (stricmp (argv[0], "--capguid") == 0) { // // Get the Capsule Guid Modified: trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.c =================================================================== --- trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.c 2013-10-29 11:10:08 UTC (rev 2606) +++ trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.c 2013-11-11 06:52:10 UTC (rev 2607) @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR> +Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR> Portions Copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -159,6 +159,7 @@ FV_INFO mFvDataInfo; CAP_INFO mCapDataInfo; +BOOLEAN mIsLargeFfs = FALSE; EFI_PHYSICAL_ADDRESS mFvBaseAddress[0x10]; UINT32 mFvBaseAddressNumber = 0; @@ -281,6 +282,19 @@ } // + // Read weak alignment flag + // + Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FV_WEAK_ALIGNMENT_STRING, 0, Value); + if (Status == EFI_SUCCESS) { + if ((strcmp (Value, TRUE_STRING) == 0) || (strcmp (Value, ONE_STRING) == 0)) { + FvInfo->FvAttributes |= EFI_FVB2_WEAK_ALIGNMENT; + } else if ((strcmp (Value, FALSE_STRING) != 0) && (strcmp (Value, ZERO_STRING) != 0)) { + Error (NULL, 0, 2000, "Invalid parameter", "Weak alignment value expected one of TRUE, FALSE, 1 or 0."); + return EFI_ABORTED; + } + } + + // // Read block maps // for (Index = 0; Index < MAX_NUMBER_OF_FV_BLOCKS; Index++) { @@ -510,7 +524,8 @@ IN OUT MEMORY_FILE *FvImage, IN UINT32 DataAlignment, IN VOID *FvEnd, - IN EFI_FIRMWARE_VOLUME_EXT_HEADER *ExtHeader + IN EFI_FIRMWARE_VOLUME_EXT_HEADER *ExtHeader, + IN UINT32 NextFfsSize ) /*++ @@ -538,7 +553,10 @@ { EFI_FFS_FILE_HEADER *PadFile; UINTN PadFileSize; + UINT32 NextFfsHeaderSize; + UINT32 CurFfsHeaderSize; + CurFfsHeaderSize = sizeof (EFI_FFS_FILE_HEADER); // // Verify input parameters. // @@ -547,42 +565,44 @@ } // - // Check if a pad file is necessary - // - if ((ExtHeader == NULL) && (((UINTN) FvImage->CurrentFilePointer - (UINTN) FvImage->FileImage + sizeof (EFI_FFS_FILE_HEADER)) % DataAlignment == 0)) { - return EFI_SUCCESS; - } - - // // Calculate the pad file size // - // - // This is the earliest possible valid offset (current plus pad file header - // plus the next file header) - // - PadFileSize = (UINTN) FvImage->CurrentFilePointer - (UINTN) FvImage->FileImage + (sizeof (EFI_FFS_FILE_HEADER) * 2); // - // Add whatever it takes to get to the next aligned address - // - while ((PadFileSize % DataAlignment) != 0) { - PadFileSize++; - } - // - // Subtract the next file header size - // - PadFileSize -= sizeof (EFI_FFS_FILE_HEADER); - - // - // Subtract the starting offset to get size - // - PadFileSize -= (UINTN) FvImage->CurrentFilePointer - (UINTN) FvImage->FileImage; - - // // Append extension header size // if (ExtHeader != NULL) { - PadFileSize = PadFileSize + ExtHeader->ExtHeaderSize; + PadFileSize = ExtHeader->ExtHeaderSize; + if (PadFileSize + sizeof (EFI_FFS_FILE_HEADER) >= MAX_FFS_SIZE) { + CurFfsHeaderSize = sizeof (EFI_FFS_FILE_HEADER2); + } + PadFileSize += CurFfsHeaderSize; + } else { + NextFfsHeaderSize = sizeof (EFI_FFS_FILE_HEADER); + if (NextFfsSize >= MAX_FFS_SIZE) { + NextFfsHeaderSize = sizeof (EFI_FFS_FILE_HEADER2); + } + // + // Check if a pad file is necessary + // + if (((UINTN) FvImage->CurrentFilePointer - (UINTN) FvImage->FileImage + NextFfsHeaderSize) % DataAlignment == 0) { + return EFI_SUCCESS; + } + PadFileSize = (UINTN) FvImage->CurrentFilePointer - (UINTN) FvImage->FileImage + sizeof (EFI_FFS_FILE_HEADER) + NextFfsHeaderSize; + // + // Add whatever it takes to get to the next aligned address + // + while ((PadFileSize % DataAlignment) != 0) { + PadFileSize++; + } + // + // Subtract the next file header size + // + PadFileSize -= NextFfsHeaderSize; + // + // Subtract the starting offset to get size + // + PadFileSize -= (UINTN) FvImage->CurrentFilePointer - (UINTN) FvImage->FileImage; } // @@ -606,9 +626,15 @@ // // Write pad file size (calculated size minus next file header size) // - PadFile->Size[0] = (UINT8) (PadFileSize & 0xFF); - PadFile->Size[1] = (UINT8) ((PadFileSize >> 8) & 0xFF); - PadFile->Size[2] = (UINT8) ((PadFileSize >> 16) & 0xFF); + if (PadFileSize >= MAX_FFS_SIZE) { + memset(PadFile->Size, 0, sizeof(UINT8) * 3); + ((EFI_FFS_FILE_HEADER2 *)PadFile)->ExtendedSize = PadFileSize; + PadFile->Attributes |= FFS_ATTRIB_LARGE_FILE; + } else { + PadFile->Size[0] = (UINT8) (PadFileSize & 0xFF); + PadFile->Size[1] = (UINT8) ((PadFileSize >> 8) & 0xFF); + PadFile->Size[2] = (UINT8) ((PadFileSize >> 16) & 0xFF); + } // // Fill in checksums and state, they must be 0 for checksumming. @@ -616,7 +642,7 @@ PadFile->IntegrityCheck.Checksum.Header = 0; PadFile->IntegrityCheck.Checksum.File = 0; PadFile->State = 0; - PadFile->IntegrityCheck.Checksum.Header = CalculateChecksum8 ((UINT8 *) PadFile, sizeof (EFI_FFS_FILE_HEADER)); + PadFile->IntegrityCheck.Checksum.Header = CalculateChecksum8 ((UINT8 *) PadFile, CurFfsHeaderSize); PadFile->IntegrityCheck.Checksum.File = FFS_FIXED_CHECKSUM; PadFile->State = EFI_FILE_HEADER_CONSTRUCTION | EFI_FILE_HEADER_VALID | EFI_FILE_DATA_VALID; @@ -634,8 +660,8 @@ // // Copy Fv Extension Header and Set Fv Extension header offset // - memcpy (PadFile + 1, ExtHeader, ExtHeader->ExtHeaderSize); - ((EFI_FIRMWARE_VOLUME_HEADER *) FvImage->FileImage)->ExtHeaderOffset = (UINT16) ((UINTN) (PadFile + 1) - (UINTN) FvImage->FileImage); + memcpy ((UINT8 *)PadFile + CurFfsHeaderSize, ExtHeader, ExtHeader->ExtHeaderSize); + ((EFI_FIRMWARE_VOLUME_HEADER *) FvImage->FileImage)->ExtHeaderOffset = (UINT16) ((UINTN) ((UINT8 *)PadFile + CurFfsHeaderSize) - (UINTN) FvImage->FileImage); // // Make next file start at QWord Boundry // @@ -1078,7 +1104,7 @@ // // Sanity check. The file MUST align appropriately // - if (((UINTN) *VtfFileImage + sizeof (EFI_FFS_FILE_HEADER) - (UINTN) FvImage->FileImage) % (1 << CurrentFileAlignment)) { + if (((UINTN) *VtfFileImage + GetFfsHeaderLength(*VtfFileImage) - (UINTN) FvImage->FileImage) % (1 << CurrentFileAlignment)) { Error (NULL, 0, 3000, "Invalid", "VTF file cannot be aligned on a %u-byte boundary.", (unsigned) (1 << CurrentFileAlignment)); free (FileBuffer); return EFI_ABORTED; @@ -1116,7 +1142,7 @@ // // Add pad file if necessary // - Status = AddPadFile (FvImage, 1 << CurrentFileAlignment, *VtfFileImage, NULL); + Status = AddPadFile (FvImage, 1 << CurrentFileAlignment, *VtfFileImage, NULL, FileSize); if (EFI_ERROR (Status)) { Error (NULL, 0, 4002, "Resource", "FV space is full, could not add pad file for data alignment property."); free (FileBuffer); @@ -1190,6 +1216,7 @@ { EFI_FFS_FILE_HEADER *PadFile; UINTN FileSize; + UINT32 FfsHeaderSize; // // If there is no VTF or the VTF naturally follows the previous file without a @@ -1219,9 +1246,18 @@ // FileSize includes the EFI_FFS_FILE_HEADER // FileSize = (UINTN) VtfFileImage - (UINTN) FvImage->CurrentFilePointer; - PadFile->Size[0] = (UINT8) (FileSize & 0x000000FF); - PadFile->Size[1] = (UINT8) ((FileSize & 0x0000FF00) >> 8); - PadFile->Size[2] = (UINT8) ((FileSize & 0x00FF0000) >> 16); + if (FileSize >= MAX_FFS_SIZE) { + PadFile->Attributes |= FFS_ATTRIB_LARGE_FILE; + memset(PadFile->Size, 0, sizeof(UINT8) * 3); + ((EFI_FFS_FILE_HEADER2 *)PadFile)->ExtendedSize = FileSize; + FfsHeaderSize = sizeof(EFI_FFS_FILE_HEADER2); + mIsLargeFfs = TRUE; + } else { + PadFile->Size[0] = (UINT8) (FileSize & 0x000000FF); + PadFile->Size[1] = (UINT8) ((FileSize & 0x0000FF00) >> 8); + PadFile->Size[2] = (UINT8) ((FileSize & 0x00FF0000) >> 16); + FfsHeaderSize = sizeof(EFI_FFS_FILE_HEADER); + } // // Fill in checksums and state, must be zero during checksum calculation. @@ -1229,7 +1265,7 @@ PadFile->IntegrityCheck.Checksum.Header = 0; PadFile->IntegrityCheck.Checksum.File = 0; PadFile->State = 0; - PadFile->IntegrityCheck.Checksum.Header = CalculateChecksum8 ((UINT8 *) PadFile, sizeof (EFI_FFS_FILE_HEADER)); + PadFile->IntegrityCheck.Checksum.Header = CalculateChecksum8 ((UINT8 *) PadFile, FfsHeaderSize); PadFile->IntegrityCheck.Checksum.File = FFS_FIXED_CHECKSUM; PadFile->State = EFI_FILE_HEADER_CONSTRUCTION | EFI_FILE_HEADER_VALID | EFI_FILE_DATA_VALID; @@ -1297,6 +1333,8 @@ UINT64 FitAddress; FIT_TABLE *FitTablePtr; BOOLEAN Vtf0Detected; + UINT32 FfsHeaderSize; + UINT32 SecHeaderSize; // // Verify input parameters @@ -1359,8 +1397,9 @@ return EFI_ABORTED; } + SecHeaderSize = GetSectionHeaderLength(Pe32Section.CommonHeader); Status = GetPe32Info ( - (VOID *) ((UINTN) Pe32Section.Pe32Section + sizeof (EFI_SECTION_PE32)), + (VOID *) ((UINTN) Pe32Section.Pe32Section + SecHeaderSize), &EntryPoint, &BaseOfCode, &MachineType @@ -1388,7 +1427,7 @@ // Physical address is FV base + offset of PE32 + offset of the entry point // SecCorePhysicalAddress = FvInfo->BaseAddress; - SecCorePhysicalAddress += (UINTN) Pe32Section.Pe32Section + sizeof (EFI_SECTION_PE32) - (UINTN) FvImage->FileImage; + SecCorePhysicalAddress += (UINTN) Pe32Section.Pe32Section + SecHeaderSize - (UINTN) FvImage->FileImage; SecCorePhysicalAddress += EntryPoint; DebugMsg (NULL, 0, 9, "SecCore physical entry point address", "Address = 0x%llX", (unsigned long long) SecCorePhysicalAddress); @@ -1413,8 +1452,9 @@ return EFI_ABORTED; } + SecHeaderSize = GetSectionHeaderLength(Pe32Section.CommonHeader); Status = GetPe32Info ( - (VOID *) ((UINTN) Pe32Section.Pe32Section + sizeof (EFI_SECTION_PE32)), + (VOID *) ((UINTN) Pe32Section.Pe32Section + SecHeaderSize), &EntryPoint, &BaseOfCode, &MachineType @@ -1428,7 +1468,7 @@ // Physical address is FV base + offset of PE32 + offset of the entry point // PeiCorePhysicalAddress = FvInfo->BaseAddress; - PeiCorePhysicalAddress += (UINTN) Pe32Section.Pe32Section + sizeof (EFI_SECTION_PE32) - (UINTN) FvImage->FileImage; + PeiCorePhysicalAddress += (UINTN) Pe32Section.Pe32Section + SecHeaderSize - (UINTN) FvImage->FileImage; PeiCorePhysicalAddress += EntryPoint; DebugMsg (NULL, 0, 9, "PeiCore physical entry point address", "Address = 0x%llX", (unsigned long long) PeiCorePhysicalAddress); @@ -1598,9 +1638,10 @@ VtfFile->IntegrityCheck.Checksum.File = 0; VtfFile->State = 0; if (VtfFile->Attributes & FFS_ATTRIB_CHECKSUM) { + FfsHeaderSize = GetFfsHeaderLength(VtfFile); VtfFile->IntegrityCheck.Checksum.File = CalculateChecksum8 ( - (UINT8 *) (VtfFile + 1), - GetLength (VtfFile->Size) - sizeof (EFI_FFS_FILE_HEADER) + (UINT8 *) ((UINT8 *)VtfFile + FfsHeaderSize), + GetFfsFileLength (VtfFile) - FfsHeaderSize ); } else { VtfFile->IntegrityCheck.Checksum.File = FFS_FIXED_CHECKSUM; @@ -1720,7 +1761,7 @@ } Status = GetPe32Info ( - (VOID *) ((UINTN) Pe32Section.Pe32Section + sizeof (EFI_SECTION_PE32)), + (VOID *) ((UINTN) Pe32Section.Pe32Section + GetSectionHeaderLength(Pe32Section.CommonHeader)), &EntryPoint, &BaseOfCode, &MachineType @@ -1734,7 +1775,7 @@ // Physical address is FV base + offset of PE32 + offset of the entry point // PeiCorePhysicalAddress = FvInfo->BaseAddress; - PeiCorePhysicalAddress += (UINTN) Pe32Section.Pe32Section + sizeof (EFI_SECTION_PE32) - (UINTN) FvImage->FileImage; + PeiCorePhysicalAddress += (UINTN) Pe32Section.Pe32Section + GetSectionHeaderLength(Pe32Section.CommonHeader) - (UINTN) FvImage->FileImage; PeiCorePhysicalAddress += EntryPoint; DebugMsg (NULL, 0, 9, "PeiCore physical entry point address", "Address = 0x%llX", (unsigned long long) PeiCorePhysicalAddress); @@ -1768,7 +1809,7 @@ } Status = GetPe32Info ( - (VOID *) ((UINTN) Pe32Section.Pe32Section + sizeof (EFI_SECTION_PE32)), + (VOID *) ((UINTN) Pe32Section.Pe32Section + GetSectionHeaderLength(Pe32Section.CommonHeader)), &EntryPoint, &BaseOfCode, &MachineType @@ -1789,7 +1830,7 @@ // Physical address is FV base + offset of PE32 + offset of the entry point // SecCorePhysicalAddress = FvInfo->BaseAddress; - SecCorePhysicalAddress += (UINTN) Pe32Section.Pe32Section + sizeof (EFI_SECTION_PE32) - (UINTN) FvImage->FileImage; + SecCorePhysicalAddress += (UINTN) Pe32Section.Pe32Section + GetSectionHeaderLength(Pe32Section.CommonHeader) - (UINTN) FvImage->FileImage; SecCorePhysicalAddress += EntryPoint; DebugMsg (NULL, 0, 9, "SecCore physical entry point address", "Address = 0x%llX", (unsigned long long) SecCorePhysicalAddress); @@ -1813,7 +1854,7 @@ } Status = GetPe32Info ( - (VOID *) ((UINTN) Pe32Section.Pe32Section + sizeof (EFI_SECTION_PE32)), + (VOID *) ((UINTN) Pe32Section.Pe32Section + GetSectionHeaderLength(Pe32Section.CommonHeader)), &EntryPoint, &BaseOfCode, &MachineType @@ -1827,7 +1868,7 @@ // Physical address is FV base + offset of PE32 + offset of the entry point // PeiCorePhysicalAddress = FvInfo->BaseAddress; - PeiCorePhysicalAddress += (UINTN) Pe32Section.Pe32Section + sizeof (EFI_SECTION_PE32) - (UINTN) FvImage->FileImage; + PeiCorePhysicalAddress += (UINTN) Pe32Section.Pe32Section + GetSectionHeaderLength(Pe32Section.CommonHeader) - (UINTN) FvImage->FileImage; PeiCorePhysicalAddress += EntryPoint; DebugMsg (NULL, 0, 9, "PeiCore physical entry point address", "Address = 0x%llX", (unsigned long long) PeiCorePhysicalAddress); } @@ -2344,7 +2385,7 @@ // // Add FV Extended Header contents to the FV as a PAD file // - AddPadFile (&FvImageMemoryFile, 4, VtfFileImage, FvExtHeader); + AddPadFile (&FvImageMemoryFile, 4, VtfFileImage, FvExtHeader, 0); // // Fv Extension header change update Fv Header Check sum @@ -2419,7 +2460,8 @@ // // Update FV Alignment attribute to the largest alignment of all the FFS files in the FV // - if ((((FvHeader->Attributes & EFI_FVB2_ALIGNMENT) >> 16)) < MaxFfsAlignment) { + if (((FvHeader->Attributes & EFI_FVB2_WEAK_ALIGNMENT) != EFI_FVB2_WEAK_ALIGNMENT) && + (((FvHeader->Attributes & EFI_FVB2_ALIGNMENT) >> 16)) < MaxFfsAlignment) { FvHeader->Attributes = ((MaxFfsAlignment << 16) | (FvHeader->Attributes & 0xFFFF)); // // Update Checksum for FvHeader @@ -2428,6 +2470,15 @@ FvHeader->Checksum = CalculateChecksum16 ((UINT16 *) FvHeader, FvHeader->HeaderLength / sizeof (UINT16)); } + // + // If there are large FFS in FV, the file system GUID should set to system 3 GUID. + // + if (mIsLargeFfs && CompareGuid (&FvHeader->FileSystemGuid, &mEfiFirmwareFileSystem2Guid) == 0) { + memcpy (&FvHeader->FileSystemGuid, &mEfiFirmwareFileSystem3Guid, sizeof (EFI_GUID)); + FvHeader->Checksum = 0; + FvHeader->Checksum = CalculateChecksum16 ((UINT16 *) FvHeader, FvHeader->HeaderLength / sizeof (UINT16)); + } + WriteFile: // // Write fv file @@ -2564,6 +2615,7 @@ UINTN FfsFileSize; UINTN FvExtendHeaderSize; UINT32 FfsAlignment; + UINT32 FfsHeaderSize; EFI_FFS_FILE_HEADER FfsHeader; BOOLEAN VtfFileFlag; UINTN VtfFileSize; @@ -2605,7 +2657,12 @@ } FvExtendHeaderSize = _filelength (fileno (fpin)); fclose (fpin); - CurrentOffset += sizeof (EFI_FFS_FILE_HEADER) + FvExtendHeaderSize; + if (sizeof (EFI_FFS_FILE_HEADER) + FvExtendHeaderSize >= MAX_FFS_SIZE) { + CurrentOffset += sizeof (EFI_FFS_FILE_HEADER2) + FvExtendHeaderSize; + mIsLargeFfs = TRUE; + } else { + CurrentOffset += sizeof (EFI_FFS_FILE_HEADER) + FvExtendHeaderSize; + } CurrentOffset = (CurrentOffset + 7) & (~7); } else if (mFvDataInfo.FvNameGuidSet) { CurrentOffset += sizeof (EFI_FFS_FILE_HEADER) + sizeof (EFI_FIRMWARE_VOLUME_EXT_HEADER); @@ -2629,6 +2686,12 @@ // Get the file size // FfsFileSize = _filelength (fileno (fpin)); + if (FfsFileSize >= MAX_FFS_SIZE) { + FfsHeaderSize = sizeof(EFI_FFS_FILE_HEADER2); + mIsLargeFfs = TRUE; + } else { + FfsHeaderSize = sizeof(EFI_FFS_FILE_HEADER); + } // // Read Ffs File header // @@ -2662,9 +2725,12 @@ // // Add Pad file // - if (((CurrentOffset + sizeof (EFI_FFS_FILE_HEADER)) % FfsAlignment) != 0) { - CurrentOffset = (CurrentOffset + sizeof (EFI_FFS_FILE_HEADER) * 2 + FfsAlignment - 1) & ~(FfsAlignment - 1); - CurrentOffset -= sizeof (EFI_FFS_FILE_HEADER); + if (((CurrentOffset + FfsHeaderSize) % FfsAlignment) != 0) { + // + // Only EFI_FFS_FILE_HEADER is needed for a pad section. + // + CurrentOffset = (CurrentOffset + FfsHeaderSize + sizeof(EFI_FFS_FILE_HEADER) + FfsAlignment - 1) & ~(FfsAlignment - 1); + CurrentOffset -= FfsHeaderSize; } } @@ -2854,6 +2920,8 @@ UINT8 *PeFileBuffer; UINT32 PeFileSize; CHAR8 *PdbPointer; + UINT32 FfsHeaderSize; + UINT32 CurSecHdrSize; Index = 0; MemoryImagePointer = NULL; @@ -2905,6 +2973,8 @@ default: return EFI_SUCCESS; } + + FfsHeaderSize = GetFfsHeaderLength(FfsFile); // // Rebase each PE32 section // @@ -2922,12 +2992,13 @@ if (EFI_ERROR (Status)) { break; } + CurSecHdrSize = GetSectionHeaderLength(CurrentPe32Section.CommonHeader); // // Initialize context // memset (&ImageContext, 0, sizeof (ImageContext)); - ImageContext.Handle = (VOID *) ((UINTN) CurrentPe32Section.Pe32Section + sizeof (EFI_PE32_SECTION)); + ImageContext.Handle = (VOID *) ((UINTN) CurrentPe32Section.Pe32Section + CurSecHdrSize); ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE) FfsRebaseImageRead; Status = PeCoffLoaderGetImageInfo (&ImageContext); if (EFI_ERROR (Status)) { @@ -2953,7 +3024,7 @@ // // Get PeHeader pointer // - ImgHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *)((UINTN) CurrentPe32Section.Pe32Section + sizeof (EFI_PE32_SECTION) + ImageContext.PeCoffHeaderOffset); + ImgHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *)((UINTN) CurrentPe32Section.Pe32Section + CurSecHdrSize + ImageContext.PeCoffHeaderOffset); // // Calculate the PE32 base address, based on file type @@ -3030,7 +3101,7 @@ ImageContext.RelocationsStripped = FALSE; } - NewPe32BaseAddress = XipBase + (UINTN) CurrentPe32Section.Pe32Section + sizeof (EFI_PE32_SECTION) - (UINTN)FfsFile; + NewPe32BaseAddress = XipBase + (UINTN) CurrentPe32Section.Pe32Section + CurSecHdrSize - (UINTN)FfsFile; break; case EFI_FV_FILETYPE_DRIVER: @@ -3045,7 +3116,7 @@ Error (NULL, 0, 3000, "Invalid", "Section-Alignment and File-Alignment do not match : %s.", FileName); return EFI_ABORTED; } - NewPe32BaseAddress = XipBase + (UINTN) CurrentPe32Section.Pe32Section + sizeof (EFI_PE32_SECTION) - (UINTN)FfsFile; + NewPe32BaseAddress = XipBase + (UINTN) CurrentPe32Section.Pe32Section + CurSecHdrSize - (UINTN)FfsFile; break; default: @@ -3104,7 +3175,7 @@ for (Index = 0; Index < ImgHdr->Pe32.FileHeader.NumberOfSections; Index ++, SectionHeader ++) { CopyMem ( - (UINT8 *) CurrentPe32Section.Pe32Section + sizeof (EFI_COMMON_SECTION_HEADER) + SectionHeader->PointerToRawData, + (UINT8 *) CurrentPe32Section.Pe32Section + CurSecHdrSize + SectionHeader->PointerToRawData, (VOID*) (UINTN) (ImageContext.ImageAddress + SectionHeader->VirtualAddress), SectionHeader->SizeOfRawData ); @@ -3140,8 +3211,8 @@ FfsFile->IntegrityCheck.Checksum.File = 0; FfsFile->State = 0; FfsFile->IntegrityCheck.Checksum.File = CalculateChecksum8 ( - (UINT8 *) (FfsFile + 1), - GetLength (FfsFile->Size) - sizeof (EFI_FFS_FILE_HEADER) + (UINT8 *) ((UINT8 *)FfsFile + FfsHeaderSize), + GetFfsFileLength (FfsFile) - FfsHeaderSize ); FfsFile->State = SavedState; } @@ -3185,12 +3256,14 @@ if (EFI_ERROR (Status)) { break; } + + CurSecHdrSize = GetSectionHeaderLength(CurrentPe32Section.CommonHeader); // // Calculate the TE base address, the FFS file base plus the offset of the TE section less the size stripped off // by GenTEImage // - TEImageHeader = (EFI_TE_IMAGE_HEADER *) ((UINT8 *) CurrentPe32Section.Pe32Section + sizeof (EFI_COMMON_SECTION_HEADER)); + TEImageHeader = (EFI_TE_IMAGE_HEADER *) ((UINT8 *) CurrentPe32Section.Pe32Section + CurSecHdrSize); // // Initialize context, load image info. @@ -3365,8 +3438,8 @@ FfsFile->IntegrityCheck.Checksum.File = 0; FfsFile->State = 0; FfsFile->IntegrityCheck.Checksum.File = CalculateChecksum8 ( - (UINT8 *)(FfsFile + 1), - GetLength (FfsFile->Size) - sizeof (EFI_FFS_FILE_HEADER) + (UINT8 *)((UINT8 *)FfsFile + FfsHeaderSize), + GetFfsFileLength (FfsFile) - FfsHeaderSize ); FfsFile->State = SavedState; } @@ -3436,12 +3509,12 @@ // // Get Pad file size. // - FileLength = (*(UINT32 *)(PadFile->Size)) & 0x00FFFFFF; + FileLength = GetFfsFileLength(PadFile); FileLength = (FileLength + EFI_FFS_FILE_HEADER_ALIGNMENT - 1) & ~(EFI_FFS_FILE_HEADER_ALIGNMENT - 1); // // FixPoint must be align on 0x1000 relative to FvImage Header // - FixPoint = (UINT8*) PadFile + sizeof (EFI_FFS_FILE_HEADER); + FixPoint = (UINT8*) PadFile + GetFfsHeaderLength(PadFile); FixPoint = FixPoint + 0x1000 - (((UINTN) FixPoint - (UINTN) FvImage->FileImage) & 0xFFF); // // FixPoint be larger at the last place of one fv image. @@ -3451,7 +3524,7 @@ } FixPoint -= 0x1000; - if ((UINTN) FixPoint < ((UINTN) PadFile + sizeof (EFI_FFS_FILE_HEADER))) { + if ((UINTN) FixPoint < ((UINTN) PadFile + GetFfsHeaderLength(PadFile))) { // // No alignment FixPoint in this Pad File. // @@ -3556,6 +3629,19 @@ DebugMsg (NULL, 0, 9, "Capsule Flag", Value); } + Status = FindToken (InfFile, OPTIONS_SECTION_STRING, EFI_OEM_CAPSULE_FLAGS_STRING, 0, Value); + if (Status == EFI_SUCCESS) { + Status = AsciiStringToUint64 (Value, FALSE, &Value64); + if (EFI_ERROR (Status) || Value64 > 0xffff) { + Error (NULL, 0, 2000, "Invalid parameter", + "invalid Flag setting for %s. Must be integer value between 0x0000 and 0xffff.", + EFI_OEM_CAPSULE_FLAGS_STRING); + return EFI_ABORTED; + } + CapInfo->Flags |= Value64; + DebugMsg (NULL, 0, 9, "Capsule Extend Flag", Value); + } + // // Read Capsule File name // Modified: trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.h =================================================================== --- trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.h 2013-10-29 11:10:08 UTC (rev 2606) +++ trunk/BaseTools/Source/C/GenFv/GenFvInternalLib.h 2013-11-11 06:52:10 UTC (rev 2607) @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR> +Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -82,6 +82,7 @@ #define EFI_CAPSULE_GUID_STRING "EFI_CAPSULE_GUID" #define EFI_CAPSULE_HEADER_SIZE_STRING "EFI_CAPSULE_HEADER_SIZE" #define EFI_CAPSULE_FLAGS_STRING "EFI_CAPSULE_FLAGS" +#define EFI_OEM_CAPSULE_FLAGS_STRING "EFI_OEM_CAPSULE_FLAGS" #define EFI_CAPSULE_VERSION_STRING "EFI_CAPSULE_VERSION" #define EFI_FV_TOTAL_SIZE_STRING "EFI_FV_TOTAL_SIZE" @@ -144,6 +145,8 @@ #define EFI_FVB2_ALIGNMENT_1G_STRING "EFI_FVB2_ALIGNMENT_1G" #define EFI_FVB2_ALIGNMENT_2G_STRING "EFI_FVB2_ALIGNMENT_2G" +#define EFI_FV_WEAK_ALIGNMENT_STRING "EFI_WEAK_ALIGNMENT" + // // File sections // @@ -259,6 +262,7 @@ extern FV_INFO mFvDataInfo; extern CAP_INFO mCapDataInfo; extern EFI_GUID mEfiFirmwareFileSystem2Guid; +extern EFI_GUID mEfiFirmwareFileSystem3Guid; extern UINT32 mFvTotalSize; extern UINT32 mFvTakenSize; Modified: trunk/BaseTools/Source/C/GenSec/GenSec.c =================================================================== --- trunk/BaseTools/Source/C/GenSec/GenSec.c 2013-10-29 11:10:08 UTC (rev 2606) +++ trunk/BaseTools/Source/C/GenSec/GenSec.c 2013-11-11 06:52:10 UTC (rev 2607) @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR> +Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -42,8 +42,6 @@ #define UTILITY_MAJOR_VERSION 0 #define UTILITY_MINOR_VERSION 1 -#define MAX_SECTION_SIZE 0x1000000 - STATIC CHAR8 *mSectionTypeName[] = { NULL, // 0x00 - reserved "EFI_SECTION_COMPRESSION", // 0x01 @@ -94,6 +92,11 @@ UINT32 CRC32Checksum; } CRC32_SECTION_HEADER; +typedef struct { + EFI_GUID_DEFINED_SECTION2 GuidSectionHeader; + UINT32 CRC32Checksum; +} CRC32_SECTION_HEADER2; + STATIC EFI_GUID mZeroGuid = {0x0, 0x0, 0x0, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}; STATIC EFI_GUID mEfiCrc32SectionGuid = EFI_CRC32_GUIDED_SECTION_EXTRACTION_PROTOCOL_GUID; @@ -150,7 +153,7 @@ // // Copyright declaration // - fprintf (stdout, "Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.\n\n"); + fprintf (stdout, "Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.\n\n"); // // Details Option @@ -184,7 +187,7 @@ fprintf (stdout, " -n String, --name String\n\ String is a NULL terminated string used in Ui section.\n"); fprintf (stdout, " -j Number, --buildnumber Number\n\ - Number is an integer value between 0000 and 9999\n\ + Number is an integer value between 0 and 65535\n\ used in Ver section.\n"); fprintf (stdout, " --sectionalign SectionAlign\n\ SectionAlign points to section alignment, which support\n\ @@ -266,6 +269,7 @@ FILE *InFile; UINT8 *Buffer; UINT32 TotalLength; + UINT32 HeaderLength; EFI_COMMON_SECTION_HEADER *CommonSect; STATUS Status; @@ -298,9 +302,14 @@ // // Size must fit in 3 bytes // + //if (TotalLength >= MAX_SECTION_SIZE) { + // Error (NULL, 0, 2000, "Invalid paramter", "%s file size (0x%X) exceeds section size limit(%uM).", InputFileName[0], (unsigned) TotalLength, MAX_SECTION_SIZE>>20); + // goto Done; + //} + HeaderLength = sizeof (EFI_COMMON_SECTION_HEADER); if (TotalLength >= MAX_SECTION_SIZE) { - Error (NULL, 0, 2000, "Invalid paramter", "%s file size (0x%X) exceeds section size limit(%uM).", InputFileName[0], (unsigned) TotalLength, MAX_SECTION_SIZE>>20); - goto Done; + TotalLength = sizeof (EFI_COMMON_SECTION_HEADER2) + InputFileLength; + HeaderLength = sizeof (EFI_COMMON_SECTION_HEADER2); } VerboseMsg ("the size of the created section file is %u bytes", (unsigned) TotalLength); // @@ -313,15 +322,20 @@ } CommonSect = (EFI_COMMON_SECTION_HEADER *) Buffer; CommonSect->Type = SectionType; - CommonSect->Size[0] = (UINT8) (TotalLength & 0xff); - CommonSect->Size[1] = (UINT8) ((TotalLength & 0xff00) >> 8); - CommonSect->Size[2] = (UINT8) ((TotalLength & 0xff0000) >> 16); + if (TotalLength < MAX_SECTION_SIZE) { + CommonSect->Size[0] = (UINT8) (TotalLength & 0xff); + CommonSect->Size[1] = (UINT8) ((TotalLength & 0xff00) >> 8); + CommonSect->Size[2] = (UINT8) ((TotalLength & 0xff0000) >> 16); + } else { + memset(CommonSect->Size, 0xff, sizeof(UINT8) * 3); + ((EFI_COMMON_SECTION_HEADER2 *)CommonSect)->ExtendedSize = TotalLength; + } // // read data from the input file. // if (InputFileLength != 0) { - if (fread (Buffer + sizeof (EFI_COMMON_SECTION_HEADER), (size_t) InputFileLength, 1, InFile) != 1) { + if (fread (Buffer + HeaderLength, (size_t) InputFileLength, 1, InFile) != 1) { Error (NULL, 0, 0004, "Error reading file", InputFileName[0]); goto Done; } @@ -421,10 +435,11 @@ UINT32 Index; FILE *InFile; EFI_COMMON_SECTION_HEADER *SectHeader; - EFI_COMMON_SECTION_HEADER TempSectHeader; + EFI_COMMON_SECTION_HEADER2 TempSectHeader; EFI_TE_IMAGE_HEADER TeHeader; UINT32 TeOffset; EFI_GUID_DEFINED_SECTION GuidSectHeader; + EFI_GUID_DEFINED_SECTION2 GuidSectHeader2; UINT32 HeaderSize; if (InputFileNum < 1) { @@ -476,8 +491,16 @@ // Check this section is Te/Pe section, and Calculate the numbers of Te/Pe section. // TeOffset = 0; - HeaderSize = sizeof (EFI_COMMON_SECTION_HEADER); - fread (&TempSectHeader, 1, sizeof (TempSectHeader), InFile); + // + // The section might be EFI_COMMON_SECTION_HEADER2 + // But only Type needs to be checked + // + if (FileSize >= MAX_SECTION_SIZE) { + HeaderSize = sizeof (EFI_COMMON_SECTION_HEADER2); + } else { + HeaderSize = sizeof (EFI_COMMON_SECTION_HEADER); + } + fread (&TempSectHeader, 1, HeaderSize, InFile); if (TempSectHeader.Type == EFI_SECTION_TE) { fread (&TeHeader, 1, sizeof (TeHeader), InFile); if (TeHeader.Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) { @@ -485,9 +508,16 @@ } } else if (TempSectHeader.Type == EFI_SECTION_GUID_DEFINED) { fseek (InFile, 0, SEEK_SET); - fread (&GuidSectHeader, 1, sizeof (GuidSectHeader), InFile); - if ((GuidSectHeader.Attributes & EFI_GUIDED_SECTION_PROCESSING_REQUIRED) == 0) { - HeaderSize = GuidSectHeader.DataOffset; + if (FileSize >= MAX_SECTION_SIZE) { + fread (&GuidSectHeader2, 1, sizeof (GuidSectHeader2), InFile); + if ((GuidSectHeader2.Attributes & EFI_GUIDED_SECTION_PROCESSING_REQUIRED) == 0) { + HeaderSize = GuidSectHeader2.DataOffset; + } + } else { + fread (&GuidSectHeader, 1, sizeof (GuidSectHeader), InFile); + if ((GuidSectHeader.Attributes & EFI_GUIDED_SECTION_PROCESSING_REQUIRED) == 0) { + HeaderSize = GuidSectHeader.DataOffset; + } } } @@ -510,6 +540,9 @@ Offset = Offset - Size - HeaderSize - TeOffset; if (FileBuffer != NULL && ((Size + Offset) < *BufferLength)) { + // + // The maximal alignment is 64K, the raw section size must be less than 0xffffff + // memset (FileBuffer + Size, 0, Offset); SectHeader = (EFI_COMMON_SECTION_HEADER *) (FileBuffer + Size); SectHeader->Type = EFI_SECTION_RAW; @@ -591,16 +624,19 @@ UINT32 TotalLength; UINT32 InputLength; UINT32 CompressedLength; + UINT32 HeaderLength; UINT8 *FileBuffer; UINT8 *OutputBuffer; EFI_STATUS Status; EFI_COMPRESSION_SECTION *CompressionSect; + EFI_COMPRESSION_SECTION2 *CompressionSect2; COMPRESS_FUNCTION CompressFunction; InputLength = 0; FileBuffer = NULL; OutputBuffer = NULL; CompressedLength = 0; + TotalLength = 0; // // read all input file contents into a buffer // first get the size of all file contents @@ -646,15 +682,21 @@ switch (SectCompSubType) { case EFI_NOT_COMPRESSED: CompressedLength = InputLength; + HeaderLength = sizeof (EFI_COMPRESSION_SECTION); + if (CompressedLength + HeaderLength >= MAX_SECTION_SIZE) { + HeaderLength = sizeof (EFI_COMPRESSION_SECTION2); + } + TotalLength = CompressedLength + HeaderLength; // // Copy file buffer to the none compressed data. // - OutputBuffer = malloc (CompressedLength + sizeof (EFI_COMPRESSION_SECTION)); + OutputBuffer = malloc (TotalLength); if (OutputBuffer == NULL) { free (FileBuffer); return EFI_OUT_OF_RESOURCES; } - memcpy (OutputBuffer + sizeof (EFI_COMPRESSION_SECTION), FileBuffer, CompressedLength); + memcpy (OutputBuffer + HeaderLength, FileBuffer, CompressedLength); + free (FileBuffer); FileBuffer = OutputBuffer; break; @@ -672,13 +714,18 @@ Status = CompressFunction (FileBuffer, InputLength, OutputBuffer, &CompressedLength); if (Status == EFI_BUFFER_TOO_SMALL) { - OutputBuffer = malloc (CompressedLength + sizeof (EFI_COMPRESSION_SECTION)); + HeaderLength = sizeof (EFI_COMPRESSION_SECTION); + if (CompressedLength + HeaderLength >= MAX_SECTION_SIZE) { + HeaderLength = sizeof (EFI_COMPRESSION_SECTION2); + } + TotalLength = CompressedLength + HeaderLength; + OutputBuffer = malloc (TotalLength); if (!OutputBuffer) { free (FileBuffer); return EFI_OUT_OF_RESOURCES; } - Status = CompressFunction (FileBuffer, InputLength, OutputBuffer + sizeof (EFI_COMPRESSION_SECTION), &CompressedLength); + Status = CompressFunction (FileBuffer, InputLength, OutputBuffer + HeaderLength, &CompressedLength); } free (FileBuffer); @@ -695,31 +742,41 @@ DebugMsg (NULL, 0, 9, "comprss file size", "the original section size is %d bytes and the compressed section size is %u bytes", (unsigned) InputLength, (unsigned) CompressedLength); - TotalLength = CompressedLength + sizeof (EFI_COMPRESSION_SECTION); - if (TotalLength >= MAX_SECTION_SIZE) { - Error (NULL, 0, 2000, "Invalid paramter", "The size of all files exceeds section size limit(%uM).", MAX_SECTION_SIZE>>20); - if (FileBuffer != NULL) { - free (FileBuffer); - } - if (OutputBuffer != NULL) { - free (OutputBuffer); - } - return STATUS_ERROR; - } + + //if (TotalLength >= MAX_SECTION_SIZE) { + // Error (NULL, 0, 2000, "Invalid paramter", "The size of all files exceeds section size limit(%uM).", MAX_SECTION_SIZE>>20); + // if (FileBuffer != NULL) { + // free (FileBuffer); + // } + // if (OutputBuffer != NULL) { + // free (OutputBuffer); + // } + // return STATUS_ERROR; + //} VerboseMsg ("the size of the created section file is %u bytes", (unsigned) TotalLength); // // Add the section header for the compressed data // - CompressionSect = (EFI_COMPRESSION_SECTION *) FileBuffer; - - CompressionSect->CommonHeader.Type = EFI_SECTION_COMPRESSION; - CompressionSect->CommonHeader.Size[0] = (UINT8) (TotalLength & 0xff); - CompressionSect->CommonHeader.Size[1] = (UINT8) ((TotalLength & 0xff00) >> 8); - CompressionSect->CommonHeader.Size[2] = (UINT8) ((TotalLength & 0xff0000) >> 16); - CompressionSect->CompressionType = SectCompSubType; - CompressionSect->UncompressedLength = InputLength; + if (TotalLength >= MAX_SECTION_SIZE) { + CompressionSect2 = (EFI_COMPRESSION_SECTION2 *)FileBuffer; + memset(CompressionSect2->CommonHeader.Size, 0xff, sizeof(UINT8) * 3); + CompressionSect2->CommonHeader.Type = EFI_SECTION_COMPRESSION; + CompressionSect2->CommonHeader.ExtendedSize = TotalLength; + CompressionSect2->CompressionType = SectCompSubType; + CompressionSect2->UncompressedLength = InputLength; + } else { + CompressionSect = (EFI_COMPRESSION_SECTION *) FileBuffer; + + CompressionSect->CommonHeader.Type = EFI_SECTION_COMPRESSION; + CompressionSect->CommonHeader.Size[0] = (UINT8) (TotalLength & 0xff); + CompressionSect->CommonHeader.Size[1] = (UINT8) ((TotalLength & 0xff00) >> 8); + CompressionSect->CommonHeader.Size[2] = (UINT8) ((TotalLength & 0xff0000) >> 16); + CompressionSect->CompressionType = SectCompSubType; + CompressionSect->UncompressedLength = InputLength; + } + // // Set OutFileBuffer // @@ -779,18 +836,15 @@ UINT32 Crc32Checksum; EFI_STATUS Status; CRC32_SECTION_HEADER *Crc32GuidSect; + CRC32_SECTION_HEADER2 *Crc32GuidSect2; EFI_GUID_DEFINED_SECTION *VendorGuidSect; + EFI_GUID_DEFINED_SECTION2 *VendorGuidSect2; InputLength = 0; Offset = 0; FileBuffer = NULL; + TotalLength = 0; - if (CompareGuid (VendorGuid, &mZeroGuid) == 0) { - Offset = sizeof (CRC32_SECTION_HEADER); - } else { - Offset = sizeof (EFI_GUID_DEFINED_SECTION); - } - // // read all input file contents into a buffer // first get the size of all file contents @@ -804,6 +858,19 @@ ); if (Status == EFI_BUFFER_TOO_SMALL) { + if (CompareGuid (VendorGuid, &mZeroGuid) == 0) { + Offset = sizeof (CRC32_SECTION_HEADER); + if (InputLength + Offset >= MAX_SECTION_SIZE) { + Offset = sizeof (CRC32_SECTION_HEADER2); + } + } else { + Offset = sizeof (EFI_GUID_DEFINED_SECTION); + if (InputLength + Offset >= MAX_SECTION_SIZE) { + Offset = sizeof (EFI_GUID_DEFINED_SECTION2); + } + } + TotalLength = InputLength + Offset; + FileBuffer = (UINT8 *) malloc (InputLength + Offset); if (FileBuffer == NULL) { Error (NULL, 0, 4001, "Resource", "memory cannot be allcoated"); @@ -843,42 +910,54 @@ // Crc32Checksum = 0; CalculateCrc32 (FileBuffer + Offset, InputLength, &Crc32Checksum); - - TotalLength = InputLength + sizeof (CRC32_SECTION_HEADER); + if (TotalLength >= MAX_SECTION_SIZE) { - Error (NULL, 0, 2000, "Invalid paramter", "The size of all ... [truncated message content] |
From: <yd...@us...> - 2013-10-29 11:10:11
|
Revision: 2606 http://sourceforge.net/p/edk2-buildtools/code/2606 Author: ydong10 Date: 2013-10-29 11:10:08 +0000 (Tue, 29 Oct 2013) Log Message: ----------- Add comments for vfrcompiler tools Signed-off-by: Eric Dong <eri...@in...> Reviewed-by: Liming Gao <lim...@in...> Modified Paths: -------------- trunk/BaseTools/UserManuals/VfrCompiler_Utility_Man_Page.rtf Modified: trunk/BaseTools/UserManuals/VfrCompiler_Utility_Man_Page.rtf =================================================================== --- trunk/BaseTools/UserManuals/VfrCompiler_Utility_Man_Page.rtf 2013-10-22 08:29:24 UTC (rev 2605) +++ trunk/BaseTools/UserManuals/VfrCompiler_Utility_Man_Page.rtf 2013-10-29 11:10:08 UTC (rev 2606) @@ -1,27 +1,26 @@ -{\rtf1\adeflang1025\ansi\ansicpg1252\uc2\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1033\deflangfe2052\themelang1033\themelangfe2052\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} -{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};} -{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f38\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;} -{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Verdana{\*\falt Verdana};}{\f40\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@\'cb\'ce\'cc\'e5;} -{\f41\fbidi \fmodern\fcharset0\fprq1{\*\panose 020b0609020204030204}Consolas;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbmajor\f31501\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1033\deflangfe2052\themelang1033\themelangfe2052\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} +{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt SimSun};}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;} +{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f38\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Verdana{\*\falt Verdana};} +{\f40\fbidi \fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@SimSun;}{\f41\fbidi \fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Consolas;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbmajor\f31501\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt SimSun};}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} {\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbminor\f31505\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} -{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f43\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f44\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\f46\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f47\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f48\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f49\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\f50\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f51\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f53\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\f54\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} -{\f56\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f57\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f58\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f59\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);} -{\f60\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f61\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f63\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f64\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;} -{\f66\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f67\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f68\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f69\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);} -{\f70\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f71\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f175\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt SimSun};}{\f383\fbidi \froman\fcharset238\fprq2 Cambria Math CE;} -{\f384\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f386\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f387\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f390\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;} -{\f391\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f413\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f414\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f416\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;} -{\f417\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f420\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f421\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f423\fbidi \fswiss\fcharset238\fprq2 Tahoma CE;} -{\f424\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f426\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek;}{\f427\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur;}{\f428\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew);} -{\f429\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic);}{\f430\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f431\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese);}{\f432\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai);} -{\f433\fbidi \fswiss\fcharset238\fprq2 Verdana CE{\*\falt Verdana};}{\f434\fbidi \fswiss\fcharset204\fprq2 Verdana Cyr{\*\falt Verdana};}{\f436\fbidi \fswiss\fcharset161\fprq2 Verdana Greek{\*\falt Verdana};} -{\f437\fbidi \fswiss\fcharset162\fprq2 Verdana Tur{\*\falt Verdana};}{\f440\fbidi \fswiss\fcharset186\fprq2 Verdana Baltic{\*\falt Verdana};}{\f441\fbidi \fswiss\fcharset163\fprq2 Verdana (Vietnamese){\*\falt Verdana};} -{\f445\fbidi \fnil\fcharset0\fprq2 @\'cb\'ce\'cc\'e5 Western;}{\f453\fbidi \fmodern\fcharset238\fprq1 Consolas CE;}{\f454\fbidi \fmodern\fcharset204\fprq1 Consolas Cyr;}{\f456\fbidi \fmodern\fcharset161\fprq1 Consolas Greek;} -{\f457\fbidi \fmodern\fcharset162\fprq1 Consolas Tur;}{\f460\fbidi \fmodern\fcharset186\fprq1 Consolas Baltic;}{\f461\fbidi \fmodern\fcharset163\fprq1 Consolas (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbminor\f31505\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt SimSun};}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} +{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f42\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f43\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\f45\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f46\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f47\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f48\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\f49\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f50\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f52\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\f53\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} +{\f55\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f56\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f57\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f58\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);} +{\f59\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f60\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f62\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f63\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;} +{\f65\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f66\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f67\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f68\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);} +{\f69\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f70\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f174\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt SimSun};}{\f382\fbidi \froman\fcharset238\fprq2 Cambria Math CE;} +{\f383\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f385\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f386\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f389\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;} +{\f390\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f412\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f413\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f415\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;} +{\f416\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f419\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f420\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f422\fbidi \fswiss\fcharset238\fprq2 Tahoma CE;} +{\f423\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f425\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek;}{\f426\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur;}{\f427\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew);} +{\f428\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic);}{\f429\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f430\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese);}{\f431\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai);} +{\f432\fbidi \fswiss\fcharset238\fprq2 Verdana CE{\*\falt Verdana};}{\f433\fbidi \fswiss\fcharset204\fprq2 Verdana Cyr{\*\falt Verdana};}{\f435\fbidi \fswiss\fcharset161\fprq2 Verdana Greek{\*\falt Verdana};} +{\f436\fbidi \fswiss\fcharset162\fprq2 Verdana Tur{\*\falt Verdana};}{\f439\fbidi \fswiss\fcharset186\fprq2 Verdana Baltic{\*\falt Verdana};}{\f440\fbidi \fswiss\fcharset163\fprq2 Verdana (Vietnamese){\*\falt Verdana};} +{\f444\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\f452\fbidi \fmodern\fcharset238\fprq1 Consolas CE;}{\f453\fbidi \fmodern\fcharset204\fprq1 Consolas Cyr;}{\f455\fbidi \fmodern\fcharset161\fprq1 Consolas Greek;} +{\f456\fbidi \fmodern\fcharset162\fprq1 Consolas Tur;}{\f459\fbidi \fmodern\fcharset186\fprq1 Consolas Baltic;}{\f460\fbidi \fmodern\fcharset163\fprq1 Consolas (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} {\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} {\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} {\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31520\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt SimSun};}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;} @@ -58,17 +57,16 @@ \brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 -\sbasedon11 \snext27 \spriority59 \styrsid4289583 Table Grid;}}{\*\rsidtbl \rsid83254\rsid1204842\rsid2570438\rsid3956845\rsid4289583\rsid4999604\rsid5715948\rsid5911148\rsid6448922\rsid6635418\rsid7634258\rsid8089322\rsid8600807\rsid9190531\rsid9200893 -\rsid10094212\rsid11500129\rsid11950970\rsid12476259\rsid12931970\rsid14109446\rsid14166490}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Dong, Yong} -{\creatim\yr2010\mo10\dy6\hr16\min18}{\revtim\yr2011\mo9\dy7\hr10\min32}{\version13}{\edmins49}{\nofpages3}{\nofwords681}{\nofchars3883}{\nofcharsws4555}{\vern49255}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}} -\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\sbasedon11 \snext27 \spriority59 \styrsid4289583 Table Grid;}}{\*\revtbl {Unknown;}{ydong10;}}{\*\rsidtbl \rsid83254\rsid1204842\rsid2570438\rsid3809922\rsid3956845\rsid4289583\rsid4999604\rsid5008786\rsid5715948\rsid5911148\rsid6448922\rsid6635418\rsid7634258\rsid8089322 +\rsid8600807\rsid9190531\rsid9200893\rsid10094212\rsid11500129\rsid11950970\rsid12476259\rsid12931970\rsid14109446\rsid14166490}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1 +}{\info{\operator ydong10}{\creatim\yr2010\mo10\dy6\hr16\min18}{\revtim\yr2013\mo10\dy21\hr13\min47}{\version15}{\edmins108}{\nofpages3}{\nofwords696}{\nofchars3968}{\nofcharsws4655}{\vern49167}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/wo +rd/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect \deftab360\widowctrl\ftnbj\aenddoc\revisions\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120 -\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale135\rsidroot14166490 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang -{\pntxta \hich .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta \hich .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta \hich .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta \hich )}}{\*\pnseclvl5 -\pndec\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta \hich )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta \hich )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta \hich )}}{\*\pnseclvl8 -\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta \hich )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta \hich )}}\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0 -\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af39\afs28 \ltrch\fcs0 -\b\fs28\cf18\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 Name +\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale135\rsidroot14166490 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}} +{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9 +\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe1033\loch\af39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af39\afs28 \ltrch\fcs0 \b\fs28\cf18\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 Name \par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 VfrCompile.exe \hich\f39 \endash \loch\f39 Compile the framework VFR and UEFI VFR file to UEFI IFR opcode table and binary. \par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\tx1440\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 @@ -104,8 +102,15 @@ \par \hich\af39\dbch\af31505\loch\f39 This }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid9200893 \hich\af39\dbch\af31505\loch\f39 is not a }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6635418 \hich\af39\dbch\af31505\loch\f39 standalone. }{ \rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 It is used together with the comp\hich\af39\dbch\af31505\loch\f39 iler preprocessor, }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid9200893 \hich\af39\dbch\af31505\loch\f39 and }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 EDKII trim too}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid9200893 \hich\af39\dbch\af31505\loch\f39 -. The VFR file is first preprocessed by the cCompiler and the output file is then trimmed to remove the unused definitions}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid1204842 \hich\af39\dbch\af31505\loch\f39 - before being compiled by the VfrCompile tool to generated the UEFI IFR opcode. }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid9200893 +. The VFR file is first preprocessed by the c}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\revised\revauth1\revdttm656059242\insrsid3809922 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid9200893 +\hich\af39\dbch\af31505\loch\f39 Compiler and the output file is then trimmed to remove the unused definitions}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid1204842 \hich\af39\dbch\af31505\loch\f39 before being compiled by the VfrCompile tool to +}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \deleted\fs18\cf1\revauthdel1\revdttmdel656059243\insrsid1204842\delrsid3809922 \hich\af39\dbch\af31505\loch\f39 generated}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 +\fs18\cf1\revised\revauth1\revdttm656059243\insrsid3809922 \hich\af39\dbch\af31505\loch\f39 generate}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid1204842 \hich\af39\dbch\af31505\loch\f39 the UEFI IFR opcode.}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 +\fs18\cf1\revised\revauth1\revdttm656059242\insrsid3809922 \hich\af39\dbch\af31505\loch\f39 So the C\hich\af39\dbch\af31505\loch\f39 style}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\revised\revauth1\revdttm656059243\insrsid3809922 +\hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\revised\revauth1\revdttm656059246\insrsid5008786\charrsid5008786 \hich\af39\dbch\af31505\loch\f39 preprocessor directives }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 +\fs18\cf1\revised\revauth1\revdttm656059247\insrsid5008786 \hich\af39\dbch\af31505\loch\f39 are}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\revised\revauth1\revdttm656059243\insrsid3809922 \hich\af39\dbch\af31505\loch\f39 + supported in VFR file, such as #define, #ifdef}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\revised\revauth1\revdttm656059247\insrsid5008786 .}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 +\deleted\fs18\cf1\revauthdel1\revdttmdel656059243\insrsid1204842\delrsid3809922 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid9200893 \par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af39\afs28 \ltrch\fcs0 \b\fs28\cf18\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 Options \par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af39\afs18 @@ -116,25 +121,24 @@ \hich\af39\dbch\af31505\loch\f39 the}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 Trim tool. The generated output file is VfrFileName.c. \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 -o DIR, --output-directory DIR \par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 All generated files }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid1204842 \hich\af39\dbch\af31505\loch\f39 are}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 placed into output directory. If this option is \hich\af39\dbch\af31505\loch\f39 -not specified, the default output directory is current directory. +\fs18\cf1\insrsid1204842 \hich\af39\dbch\af31505\loch\f39 are}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 + placed into output directory. If this option is not specified, the default output directory is current directory. \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 -b, --create-ifr-package \par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 Create}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid1204842 -\hich\af39\dbch\af31505\loch\f39 s}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 an UEFI IFR Binary HII pack file. The generated file name is VfrFileName.hpk. +\hich\af39\dbch\af31505\loch\f39 s}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 an UEFI IFR Binary HII pack file. The generated file n\hich\af39\dbch\af31505\loch\f39 ame is VfrFileName.hpk. \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 -l create an output IFR listing file \par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 Create}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid1204842 -\hich\af39\dbch\af31505\loch\f39 s}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 an output IFR listing file (VfrFi\hich\af39\dbch\af31505\loch\f39 leName.lst) to list each IFR opcode for each VFR}{ -\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid1204842 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 statement.}{\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0 -\b\f0\fs18\cf1\insrsid14166490 +\hich\af39\dbch\af31505\loch\f39 s}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 an output IFR listing file (VfrFileName.lst) to list each IFR opcode for each VFR}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 +\fs18\cf1\insrsid1204842 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 statement.}{\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0 \b\f0\fs18\cf1\insrsid14166490 \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 -n, --no-pre-processing \par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 Do not preprocess}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid2570438 \hich\af39\dbch\af31505\loch\f39 t}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid1204842 \hich\af39\dbch\af31505\loch\f39 he}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 - input vfr file. The input VFR file has been processed. If this option is not specified, the default behavior is same to set this option. + input vfr file. The input VFR file has been pro\hich\af39\dbch\af31505\loch\f39 cessed. If this option is not specified, the default behavior is same to set this option. \par }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid83254 \hich\af39\dbch\af31505\loch\f39 Selecting this option disables preprocessing of VFR files. }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid2570438 \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 -c, --compatible-framework \par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 Recognize}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid83254 -\hich\af39\dbch\af31505\loch\f39 s}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 the input VFR file is the framework VFR syntax. If this option is not specified, the UEFI syntax is default }{\rtlch\fcs1 -\af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid83254 \hich\af39\dbch\af31505\loch\f39 the VFR }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 syntax. +\hich\af39\dbch\af31505\loch\f39 s}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 the input VFR file is the framework VFR syntax. If this option is n\hich\af39\dbch\af31505\loch\f39 +ot specified, the UEFI syntax is default }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid83254 \hich\af39\dbch\af31505\loch\f39 the VFR }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 syntax. \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 -h, --help \par }\pard \ltrpar\ql \fi360\li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 Print version and usage of this program and exit. \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid12931970 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\insrsid12931970\charrsid6448922 \hich\af39\dbch\af31505\loch\f39 -s, --string-db @@ -180,18 +184,18 @@ \par }{\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 VfrCompile -n -b -l Vfr_Uefi.iii \par }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 4. Parse the preprocessed Framework VFR file (Vfr_Framework.iii) to generate the UEFI IFR opcode table in autogen C file (Vfr_Framework.c). \par }{\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 VfrCompile -n -c Vfr_Framework.iii -\par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14109446 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\insrsid14109446\charrsid6448922 \hich\af39\dbch\af31505\loch\f39 5. Parse the preprocessed UEFI VFR file (Vfr_Uefi -\hich\af39\dbch\af31505\loch\f39 .iii) to generate the UEFI IFR opcode table in autogen C file (Vfr_Uefi.c), also base on the string token number to get efi varstore name from the string binary file (Vfr_Uefi.hpk). -\par }{\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\insrsid14109446\charrsid6448922 \hich\af39\dbch\af31505\loch\f39 VfrCompile -n \hich\f39 \endash \loch\f39 s Vfr_Uefi.hpk Vfr_Uefi.iii -\par }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\insrsid14109446\charrsid6448922 \hich\af39\dbch\af31505\loch\f39 6. Parse the preprocessed UEFI \hich\af39\dbch\af31505\loch\f39 -VFR file (Vfr_Uefi.iii) to generate the UEFI IFR opcode table in autogen C file (Vfr_Uefi.c), also override class guid with the input one. +\par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14109446 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\insrsid14109446\charrsid6448922 \hich\af39\dbch\af31505\loch\f39 +5. Parse the preprocessed UEFI VFR file (Vfr_Uefi.iii) to generate the UEFI IFR opcode table in autogen C file (Vfr_Uefi.c), also base on the string token number to get efi varstore name from the string binary file (Vfr_Uefi.hpk). +\par }{\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\insrsid14109446\charrsid6448922 \hich\af39\dbch\af31505\loch\f39 VfrCompile -n \hich\f39 \endash \loch\f39 s Vfr_Uefi\hich\af39\dbch\af31505\loch\f39 .hpk Vfr_Uefi.iii +\par }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\insrsid14109446\charrsid6448922 \hich\af39\dbch\af31505\loch\f39 +6. Parse the preprocessed UEFI VFR file (Vfr_Uefi.iii) to generate the UEFI IFR opcode table in autogen C file (Vfr_Uefi.c), also override class guid with the input one. \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\insrsid14109446\charrsid6448922 \hich\af39\dbch\af31505\loch\f39 VfrCompile -n \hich\f39 \endash \loch\f39 -g C153B68D-EBFC-488E-B110-662867745B87 Vfr_Uefi.iii}{\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\insrsid14109446\charrsid7634258 +g C153B68D-EBFC-488E-B110-662867745B87 Vfr_Uefi.ii\hich\af39\dbch\af31505\loch\f39 i}{\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\insrsid14109446\charrsid7634258 \par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af39\afs28 \ltrch\fcs0 \b\fs28\cf18\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 Bugs \par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 No known }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid1204842 \hich\af39\dbch\af31505\loch\f39 issues}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 . -\par \hich\af39\dbch\af31505\loch\f39 Report bugs to edk2-build\hich\af39\dbch\af31505\loch\f39 too...@li...}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid14166490 +\par \hich\af39\dbch\af31505\loch\f39 Report bugs to edk...@li...}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid14166490 \par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af39\afs28 \ltrch\fcs0 \b\fs28\cf18\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 Files \par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af39\afs18 @@ -208,11 +212,11 @@ \par \hich\af39\dbch\af31505\loch\f39 This program and the accompanying materials are licensed and made available \par \hich\af39\dbch\af31505\loch\f39 under the terms and conditions of the BSD License which accompanies this \par \hich\af39\dbch\af31505\loch\f39 distribution. The full text of the license may be found at -\par \hich\af39\dbch\af31505\loch\f39 http://opensource.org/licenses/bsd-license.php +\par \hich\af39\dbch\af31505\loch\f39 http://opensource.org/licenses/bsd-license.ph\hich\af39\dbch\af31505\loch\f39 p \par \par \hich\af39\dbch\af31505\loch\f39 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -\par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 WITH\hich\af39\dbch\af31505\loch\f39 -OUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +\par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14166490 \hich\af39\dbch\af31505\loch\f39 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid14166490 \par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a 9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad @@ -319,8 +323,8 @@ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000f0d4 -6273066dcc01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e50000000000000000000000000072 +d90d21cece01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yd...@us...> - 2013-10-22 08:29:26
|
Revision: 2605 http://sourceforge.net/p/edk2-buildtools/code/2605 Author: ydong10 Date: 2013-10-22 08:29:24 +0000 (Tue, 22 Oct 2013) Log Message: ----------- Enable statement nest in subtitle opcode. Signed-off-by: Eric Dong <eri...@in...> Reviewed-by: Liming Gao <lim...@in...> Modified Paths: -------------- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g =================================================================== --- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-10-22 08:04:43 UTC (rev 2604) +++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-10-22 08:29:24 UTC (rev 2605) @@ -136,6 +136,7 @@ #token MapTitle("maptitle") "maptitle" #token MapGuid("mapguid") "mapguid" #token Subtitle("subtitle") "subtitle" +#token EndSubtitle("endsubtitle") "endsubtitle" #token Help("help") "help" #token Text("text") "text" #token Option("option") "option" @@ -1645,8 +1646,14 @@ { "," FLAGS "=" vfrSubtitleFlags[SObj] } - { vfrStatementStatTagList "," } - E:";" << CRT_END_OP (E); >> + ( + {vfrStatementStatTagList "," } + E:";" << CRT_END_OP (E); >> + | + { "," vfrStatementStatTagList} + { "," (vfrStatementStat | vfrStatementQuestions)*} + E: EndSubtitle ";" << CRT_END_OP (E); >> + ) ; vfrSubtitleFlags [CIfrSubtitle & SObj] : This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yd...@us...> - 2013-10-22 08:04:46
|
Revision: 2604 http://sourceforge.net/p/edk2-buildtools/code/2604 Author: ydong10 Date: 2013-10-22 08:04:43 +0000 (Tue, 22 Oct 2013) Log Message: ----------- Generate question id for date/time without name and varid field. Signed-off-by: Eric Dong <eri...@in...> Reviewed-by: Liming Gao <lim...@in...> Modified Paths: -------------- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp =================================================================== --- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2013-10-12 02:12:44 UTC (rev 2603) +++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2013-10-22 08:04:43 UTC (rev 2604) @@ -2628,6 +2628,14 @@ CHAR8 Index; if (BaseVarId == NULL && Name == NULL) { + if (QuestionId == EFI_QUESTION_ID_INVALID) { + QuestionId = GetFreeQuestionId (); + } else { + if (ChekQuestionIdFree (QuestionId) == FALSE) { + goto Err; + } + MarkQuestionIdUsed (QuestionId); + } return; } @@ -2796,6 +2804,14 @@ CHAR8 Index; if (BaseVarId == NULL && Name == NULL) { + if (QuestionId == EFI_QUESTION_ID_INVALID) { + QuestionId = GetFreeQuestionId (); + } else { + if (ChekQuestionIdFree (QuestionId) == FALSE) { + goto Err; + } + MarkQuestionIdUsed (QuestionId); + } return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |