From: Hess Chen Date: Wed, 17 Oct 2018 02:22:04 +0000 (+0800) Subject: BaseTools/ECC: Add a checkpoint to check no usage for deprecated functions. X-Git-Tag: edk2-stable201903~754 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=33a211d0095575b35cba16a1a8c305588bf1d49a BaseTools/ECC: Add a checkpoint to check no usage for deprecated functions. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hess Chen Reviewed-by: Yonghong Zhu --- diff --git a/BaseTools/Source/Python/Ecc/Check.py b/BaseTools/Source/Python/Ecc/Check.py index fc86ad96f2..0491d2d4e4 100644 --- a/BaseTools/Source/Python/Ecc/Check.py +++ b/BaseTools/Source/Python/Ecc/Check.py @@ -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() diff --git a/BaseTools/Source/Python/Ecc/Configuration.py b/BaseTools/Source/Python/Ecc/Configuration.py index c19a3990c7..8f6886169c 100644 --- a/BaseTools/Source/Python/Ecc/Configuration.py +++ b/BaseTools/Source/Python/Ecc/Configuration.py @@ -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 diff --git a/BaseTools/Source/Python/Ecc/EccToolError.py b/BaseTools/Source/Python/Ecc/EccToolError.py index ae0a31af8a..74f06bc490 100644 --- a/BaseTools/Source/Python/Ecc/EccToolError.py +++ b/BaseTools/Source/Python/Ecc/EccToolError.py @@ -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.", diff --git a/BaseTools/Source/Python/Ecc/config.ini b/BaseTools/Source/Python/Ecc/config.ini index 00c98c6232..663ae293bd 100644 --- a/BaseTools/Source/Python/Ecc/config.ini +++ b/BaseTools/Source/Python/Ecc/config.ini @@ -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