From: "Yuting Yang" <yuting2.yang@intel.com>
To: devel@edk2.groups.io
Cc: Rebecca Cran <rebecca@bsdio.com>,
Liming Gao <gaoliming@byosoft.com.cn>,
Bob Feng <bob.c.feng@intel.com>,
Christine Chen <yuwei.chen@intel.com>,
Zifeng Zhang <zifeng.zhang@intel.com>
Subject: [edk2-devel] [Patch V4] BaseTools: VfrCompiler Adds DefaultValueError
Date: Thu, 21 Mar 2024 00:30:03 -0700 [thread overview]
Message-ID: <20240321073003.1198-1-yuting2.yang@intel.com> (raw)
Add --catch_default option
Raise a DefaultValueError when encountering
VFR default definitions to help remove default variables.
Signed-off-by: Yuting Yang <yuting2.yang@intel.com>
Cc: Rebecca Cran <rebecca@bsdio.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Christine Chen <yuwei.chen@intel.com>
Cc: Zifeng Zhang <zifeng.zhang@intel.com>
---
BaseTools/Source/C/VfrCompile/VfrCompiler.cpp | 8 ++++----
BaseTools/Source/C/VfrCompile/VfrCompiler.h | 1 +
BaseTools/Source/C/VfrCompile/VfrError.cpp | 3 ++-
BaseTools/Source/C/VfrCompile/VfrError.h | 3 ++-
BaseTools/Source/C/VfrCompile/VfrFormPkg.h | 1 +
BaseTools/Source/C/VfrCompile/VfrSyntax.g | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
6 files changed, 60 insertions(+), 14 deletions(-)
diff --git a/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp b/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp
index 5f4d262d85..4031af6e39 100644
--- a/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp
+++ b/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp
@@ -78,6 +78,7 @@ CVfrCompiler::OptionInitialization (
mOptions.WarningAsError = FALSE;
mOptions.AutoDefault = FALSE;
mOptions.CheckDefault = FALSE;
+ mOptions.IsCatchDefaultEnable = FALSE;
memset (&mOptions.OverrideClassGuid, 0, sizeof (EFI_GUID));
if (Argc == 1) {
@@ -95,6 +96,8 @@ CVfrCompiler::OptionInitialization (
Version ();
SET_RUN_STATUS (STATUS_DEAD);
return;
+ } else if (stricmp(Argv[Index], "--catch_default") == 0){
+ mOptions.IsCatchDefaultEnable = TRUE;
} else if (stricmp(Argv[Index], "-l") == 0) {
mOptions.CreateRecordListFile = TRUE;
gCIfrRecordInfoDB.TurnOn ();
@@ -179,7 +182,6 @@ CVfrCompiler::OptionInitialization (
goto Fail;
}
strcpy (mOptions.VfrFileName, Argv[Index]);
-
if (mOptions.OutputDirectory == NULL) {
mOptions.OutputDirectory = (CHAR8 *) malloc (1);
if (mOptions.OutputDirectory == NULL) {
@@ -679,7 +681,7 @@ CVfrCompiler::Compile (
DebugError (NULL, 0, 0001, "Error opening the input file", "%s", InFileName);
goto Fail;
}
-
+ InputInfo.IsCatchDefaultEnable = mOptions.IsCatchDefaultEnable;
if (mOptions.HasOverrideClassGuid) {
InputInfo.OverrideClassGuid = &mOptions.OverrideClassGuid;
} else {
@@ -937,5 +939,3 @@ main (
return GetUtilityStatus ();
}
-
-
diff --git a/BaseTools/Source/C/VfrCompile/VfrCompiler.h b/BaseTools/Source/C/VfrCompile/VfrCompiler.h
index b6e207d2ce..974f37c4eb 100644
--- a/BaseTools/Source/C/VfrCompile/VfrCompiler.h
+++ b/BaseTools/Source/C/VfrCompile/VfrCompiler.h
@@ -52,6 +52,7 @@ typedef struct {
BOOLEAN WarningAsError;
BOOLEAN AutoDefault;
BOOLEAN CheckDefault;
+ BOOLEAN IsCatchDefaultEnable;
} OPTIONS;
typedef enum {
diff --git a/BaseTools/Source/C/VfrCompile/VfrError.cpp b/BaseTools/Source/C/VfrCompile/VfrError.cpp
index 65bb8e34fd..8a706f929b 100644
--- a/BaseTools/Source/C/VfrCompile/VfrError.cpp
+++ b/BaseTools/Source/C/VfrCompile/VfrError.cpp
@@ -49,7 +49,8 @@ static SVFR_WARNING_HANDLE VFR_WARNING_HANDLE_TABLE [] = {
{ VFR_WARNING_DEFAULT_VALUE_REDEFINED, ": default value re-defined with different value"},
{ VFR_WARNING_ACTION_WITH_TEXT_TWO, ": Action opcode should not have TextTwo part"},
{ VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ": Not recommend to use obsoleted framework opcode"},
- { VFR_WARNING_CODEUNDEFINED, ": undefined Warning Code" }
+ { VFR_WARNING_CODEUNDEFINED, ": undefined Warning Code" },
+ { VFR_WARNING_UNSUPPORTED, ": pls remove the default values if necessary" }
};
CVfrErrorHandle::CVfrErrorHandle (
diff --git a/BaseTools/Source/C/VfrCompile/VfrError.h b/BaseTools/Source/C/VfrCompile/VfrError.h
index 7d16bd5f74..1b4bc173d2 100644
--- a/BaseTools/Source/C/VfrCompile/VfrError.h
+++ b/BaseTools/Source/C/VfrCompile/VfrError.h
@@ -47,7 +47,8 @@ typedef enum {
VFR_WARNING_DEFAULT_VALUE_REDEFINED = 0,
VFR_WARNING_ACTION_WITH_TEXT_TWO,
VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,
- VFR_WARNING_CODEUNDEFINED
+ VFR_WARNING_CODEUNDEFINED,
+ VFR_WARNING_UNSUPPORTED
} EFI_VFR_WARNING_CODE;
typedef struct _SVFR_ERROR_HANDLE {
diff --git a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
index 9ef6f07787..d8fada3bcb 100644
--- a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
+++ b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
@@ -96,6 +96,7 @@ struct SBufferNode {
typedef struct {
EFI_GUID *OverrideClassGuid;
+ BOOLEAN IsCatchDefaultEnable;
} INPUT_INFO_TO_SYNTAX;
class CFormPkg {
diff --git a/BaseTools/Source/C/VfrCompile/VfrSyntax.g b/BaseTools/Source/C/VfrCompile/VfrSyntax.g
index 55fd067f8a..d7376122d8 100644
--- a/BaseTools/Source/C/VfrCompile/VfrSyntax.g
+++ b/BaseTools/Source/C/VfrCompile/VfrSyntax.g
@@ -50,6 +50,7 @@ VfrParserStart (
{
ParserBlackBox<CVfrDLGLexer, EfiVfrParser, ANTLRToken> VfrParser(File);
VfrParser.parser()->SetOverrideClassGuid (InputInfo->OverrideClassGuid);
+ VfrParser.parser()->SetIsCatchDefaultEnable(InputInfo->IsCatchDefaultEnable);
return VfrParser.parser()->vfrProgram();
}
>>
@@ -975,7 +976,15 @@ vfrExtensionData[UINT8 *DataBuff, UINT32 Size, CHAR8 *TypeName, UINT32 TypeSize,
vfrStatementDefaultStore :
<< UINT16 DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD; >>
- D:DefaultStore N:StringIdentifier ","
+ D:DefaultStore N:StringIdentifier "," <<
+ if (mIsCatchDefaultEnable) {
+ gCVfrErrorHandle.HandleWarning (
+ VFR_WARNING_UNSUPPORTED,
+ D->getLine(),
+ D->getText()
+ );
+ }
+ >>
Prompt "=" "STRING_TOKEN" "\(" S:Number "\)"
{
"," Attribute "=" A:Number << DefaultId = _STOU16(A->getText(), A->getLine()); >>
@@ -1775,7 +1784,11 @@ vfrStatementDefault :
CIfrNumeric *NumericQst = NULL;
>>
- D:Default
+ D:Default <<
+ if (mIsCatchDefaultEnable) {
+ DefaultValueError(VFR_RETURN_UNSUPPORTED, D->getLine());
+ }
+ >>
(
(
"=" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, ArrayType] ","
@@ -1970,11 +1983,15 @@ vfrStatementInvalid :
;
flagsField :
- Number
- | InteractiveFlag
- | ManufacturingFlag
- | DefaultFlag
- | ResetRequiredFlag
+ Number
+ | InteractiveFlag
+ | ManufacturingFlag
+ | D:DefaultFlag <<
+ if (mIsCatchDefaultEnable) {
+ DefaultValueError(VFR_RETURN_UNSUPPORTED, D->getLine());
+ }
+ >>
+ | ResetRequiredFlag
| ReconnectRequiredFlag
| N:NVAccessFlag <<
gCVfrErrorHandle.HandleWarning (
@@ -3790,7 +3807,12 @@ oneofoptionFlagsField [UINT8 & HFlags, UINT8 & LFlags] :
| RestStyleFlag << $HFlags |= 0x20; >>
| ReconnectRequiredFlag << $HFlags |= 0x40; >>
| ManufacturingFlag << $LFlags |= 0x20; >>
- | DefaultFlag << $LFlags |= 0x10; >>
+ | D:DefaultFlag <<
+ $LFlags |= 0x10;
+ if (mIsCatchDefaultEnable) {
+ DefaultValueError(VFR_RETURN_UNSUPPORTED, D->getLine());
+ }
+ >>
| A:NVAccessFlag <<
gCVfrErrorHandle.HandleWarning (
VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,
@@ -4837,6 +4859,7 @@ spanFlags [UINT8 & Flags] :
class EfiVfrParser {
<<
private:
+ BOOLEAN mIsCatchDefaultEnable;
UINT8 mParserStatus;
BOOLEAN mConstantOnlyInExpression;
@@ -4880,6 +4903,7 @@ public:
VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN ANTLRTokenPtr);
VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32);
VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32, IN CONST CHAR8 *);
+ VOID DefaultValueError (IN EFI_VFR_RETURN_CODE, IN UINT32);
VOID syn (ANTLRAbstractToken *, ANTLRChar *, SetWordType *, ANTLRTokenType, INT32);
@@ -4909,6 +4933,7 @@ public:
VOID IdEqIdDoSpecial (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN CHAR8 *, IN UINT32, IN EFI_QUESTION_ID, IN CHAR8 *, IN UINT32, IN EFI_COMPARE_TYPE);
VOID IdEqListDoSpecial (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN CHAR8 *, IN UINT32, IN UINT16, IN UINT16 *);
VOID SetOverrideClassGuid (IN EFI_GUID *);
+ VOID SetIsCatchDefaultEnable (BOOLEAN IsCatchDefaultEnable);
>>
}
@@ -5086,6 +5111,17 @@ EfiVfrParser::_PCATCH (
mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, LineNum, (CHAR8 *) ErrorMsg);
}
+VOID
+EfiVfrParser::DefaultValueError (
+ IN EFI_VFR_RETURN_CODE ReturnCode,
+ IN UINT32 LineNum
+ )
+{
+ CHAR8 ErrorMsg[100];
+ sprintf(ErrorMsg, "please remove the default value / defaultstore in line %d", LineNum);
+ mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, LineNum, ErrorMsg);
+}
+
VOID
EfiVfrParser::syn (
ANTLRAbstractToken *Tok,
@@ -5688,6 +5724,12 @@ EfiVfrParser::SetOverrideClassGuid (IN EFI_GUID *OverrideClassGuid)
mOverrideClassGuid = OverrideClassGuid;
}
+VOID
+EfiVfrParser::SetIsCatchDefaultEnable (BOOLEAN IsCatchDefaultEnable)
+{
+ mIsCatchDefaultEnable = IsCatchDefaultEnable;
+}
+
VOID
EfiVfrParser::CheckDuplicateDefaultValue (
IN EFI_DEFAULT_ID DefaultId,
--
2.39.1.windows.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116948): https://edk2.groups.io/g/devel/message/116948
Mute This Topic: https://groups.io/mt/105061128/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
next reply other threads:[~2024-03-21 7:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-21 7:30 Yuting Yang [this message]
[not found] <17BEB716C0DD8A75.2828@groups.io>
2024-03-21 7:54 ` [edk2-devel] [Patch V4] BaseTools: VfrCompiler Adds DefaultValueError Yuting Yang
2024-03-28 7:28 ` Zhang, Zifeng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240321073003.1198-1-yuting2.yang@intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox