BaseTools/ECC: Add a checkpoint to check no usage for deprecated functions.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hess Chen <hesheng.chen@intel.com>
Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
This commit is contained in:
Hess Chen 2018-10-17 10:22:04 +08:00 committed by Yonghong Zhu
parent 041d89bc0f
commit 33a211d009
4 changed files with 67 additions and 0 deletions

View File

@ -270,6 +270,66 @@ class Check(object):
self.FunctionLayoutCheckPrototype()
self.FunctionLayoutCheckBody()
self.FunctionLayoutCheckLocalVariable()
self.FunctionLayoutCheckDeprecated()
# To check if the deprecated functions are used
def FunctionLayoutCheckDeprecated(self):
if EccGlobalData.gConfig.CFunctionLayoutCheckNoDeprecated == '1' or EccGlobalData.gConfig.CFunctionLayoutCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':
EdkLogger.quiet("Checking function no deprecated one being used ...")
DeprecatedFunctionSet = ('UnicodeValueToString',
'AsciiValueToString',
'StrCpy',
'StrnCpy',
'StrCat',
'StrnCat',
'UnicodeStrToAsciiStr',
'AsciiStrCpy',
'AsciiStrnCpy',
'AsciiStrCat',
'AsciiStrnCat',
'AsciiStrToUnicodeStr',
'PcdSet8',
'PcdSet16',
'PcdSet32',
'PcdSet64',
'PcdSetPtr',
'PcdSetBool',
'PcdSetEx8',
'PcdSetEx16',
'PcdSetEx32',
'PcdSetEx64',
'PcdSetExPtr',
'PcdSetExBool',
'LibPcdSet8',
'LibPcdSet16',
'LibPcdSet32',
'LibPcdSet64',
'LibPcdSetPtr',
'LibPcdSetBool',
'LibPcdSetEx8',
'LibPcdSetEx16',
'LibPcdSetEx32',
'LibPcdSetEx64',
'LibPcdSetExPtr',
'LibPcdSetExBool',
'GetVariable',
'GetEfiGlobalVariable',
)
for IdentifierTable in EccGlobalData.gIdentifierTableList:
SqlCommand = """select ID, Name, BelongsToFile from %s
where Model = %s """ % (IdentifierTable, MODEL_IDENTIFIER_FUNCTION_CALLING)
RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)
for Record in RecordSet:
for Key in DeprecatedFunctionSet:
if Key == Record[1]:
if not EccGlobalData.gException.IsException(ERROR_C_FUNCTION_LAYOUT_CHECK_NO_DEPRECATE, Key):
OtherMsg = 'The function [%s] is deprecated which should NOT be used' % Key
EccGlobalData.gDb.TblReport.Insert(ERROR_C_FUNCTION_LAYOUT_CHECK_NO_DEPRECATE,
OtherMsg=OtherMsg,
BelongsToTable=IdentifierTable,
BelongsToItem=Record[0])
def WalkTree(self):
IgnoredPattern = c.GetIgnoredDirListPattern()

View File

@ -34,6 +34,7 @@ _ConfigFileToInternalTranslation = {
"CFunctionLayoutCheckFunctionBody":"CFunctionLayoutCheckFunctionBody",
"CFunctionLayoutCheckFunctionName":"CFunctionLayoutCheckFunctionName",
"CFunctionLayoutCheckFunctionPrototype":"CFunctionLayoutCheckFunctionPrototype",
"CFunctionLayoutCheckNoDeprecated":"CFunctionLayoutCheckNoDeprecated",
"CFunctionLayoutCheckNoInitOfVariable":"CFunctionLayoutCheckNoInitOfVariable",
"CFunctionLayoutCheckNoStatic":"CFunctionLayoutCheckNoStatic",
"CFunctionLayoutCheckOptionalFunctionalModifier":"CFunctionLayoutCheckOptionalFunctionalModifier",
@ -242,6 +243,8 @@ class Configuration(object):
self.CFunctionLayoutCheckNoInitOfVariable = 1
# Check whether no use of STATIC for functions
self.CFunctionLayoutCheckNoStatic = 1
# Check whether no use of Deprecated functions
self.CFunctionLayoutCheckNoDeprecated = 1
## Include Files Checking
self.IncludeFileCheckAll = 0

View File

@ -47,6 +47,7 @@ ERROR_C_FUNCTION_LAYOUT_CHECK_NO_INIT_OF_VARIABLE = 5007
ERROR_C_FUNCTION_LAYOUT_CHECK_NO_STATIC = 5008
ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_2 = 5009
ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_3 = 5010
ERROR_C_FUNCTION_LAYOUT_CHECK_NO_DEPRECATE = 5011
ERROR_INCLUDE_FILE_CHECK_ALL = 6000
ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_1 = 6001
@ -146,6 +147,7 @@ gEccErrorMessage = {
ERROR_C_FUNCTION_LAYOUT_CHECK_DATA_DECLARATION : "The data declarations should be the first code in a module",
ERROR_C_FUNCTION_LAYOUT_CHECK_NO_INIT_OF_VARIABLE : "There should be no initialization of a variable as part of its declaration",
ERROR_C_FUNCTION_LAYOUT_CHECK_NO_STATIC : "There should be no use of STATIC for functions",
ERROR_C_FUNCTION_LAYOUT_CHECK_NO_DEPRECATE : "The deprecated function should NOT be used",
ERROR_INCLUDE_FILE_CHECK_ALL : "",
ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_1 : "All include file contents should be guarded by a #ifndef statement.",

View File

@ -134,6 +134,8 @@ CFunctionLayoutCheckDataDeclaration = 1
CFunctionLayoutCheckNoInitOfVariable = 1
# Check whether no use of STATIC for functions
CFunctionLayoutCheckNoStatic = 1
# Check whether no use of Deprecated functions
CFunctionLayoutCheckNoDeprecated = 1
#
# Include Files Checking