From nobody Fri May 10 12:05:05 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+114492+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+114492+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1706237634; cv=none; d=zohomail.com; s=zohoarc; b=CmaGepMej01WP5bIOjvkSWcNtDXXSJ8XUrwWb8+7Jlp7/DoqJiRO6NC2HjV/beC8I/DOlnmJIBnZ34xMRgW8Rj8RmQi+q1gerks0PwdGVLvCEGKosfnCBFddGtMy3abPXsBGv4f4vYZloZL3EymwsTg9qRWL3rpGz2RKc5wBngE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1706237634; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:Sender:Subject:Subject:To:To:Message-Id; bh=h4eP4gvPXnLInRmZojHeVF0QZAwXZnfeGp+57E0dp8w=; b=RO85MqdwNdtaw3r/g5YRG/vYuioOSib/gCLG71FkXwtH5XYdnW3ju5t2dwC7llCmabdM0CAFfDVitRvUN0HcjHG18oQy4f1Wekit1o/+0xAyuA771HS73qPfMOXBZhZlw8xAmMEtQEwZJRoVIPUdUM111CLGhDFAnjQ/G2ZkuRs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+114492+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1706237634726515.7394522782678; Thu, 25 Jan 2024 18:53:54 -0800 (PST) Return-Path: DKIM-Signature: a=rsa-sha256; bh=ztNt2SedOxINbAl68VtwOKKuLWGCQho+Wo383D4J1tE=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1706237634; v=1; b=Aa4oKT1MP4s3F1V86FASeMe26X0mRR8kX4zGFEcVVYWF4Yj7kPfzOZH2klO6U8aNbJ82xlIS N9hwzAXwIRcUokDmLbFBjM38jzY2qJUZ4nfIFd4va+NeVBG7n2mp7lFM1sNkuNcton8nPSFXOOy nfsoH5In3Ul3ReIY5JZP0tr8= X-Received: by 127.0.0.2 with SMTP id PU0OYY1788612x68M4YKac6m; Thu, 25 Jan 2024 18:53:54 -0800 X-Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.11]) by mx.groups.io with SMTP id smtpd.web10.6989.1706237633815021121 for ; Thu, 25 Jan 2024 18:53:53 -0800 X-IronPort-AV: E=McAfee;i="6600,9927,10964"; a="9056953" X-IronPort-AV: E=Sophos;i="6.05,216,1701158400"; d="scan'208";a="9056953" X-Received: from orviesa004.jf.intel.com ([10.64.159.144]) by fmvoesa105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jan 2024 18:53:53 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.05,216,1701158400"; d="scan'208";a="2632377" X-Received: from sh0701bl-hv01.ccr.corp.intel.com ([10.239.220.156]) by orviesa004.jf.intel.com with ESMTP; 25 Jan 2024 18:53:51 -0800 From: "Yuting Yang" To: devel@edk2.groups.io Cc: Rebecca Cran , Liming Gao , Bob Feng , Christine Chen , Zifeng Zhang Subject: [edk2-devel] [Patch V3] BaseTools: VfrCompiler Adds DefaultValueError Date: Thu, 25 Jan 2024 18:53:41 -0800 Message-Id: <20240126025341.149-1-yuting2.yang@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,yuting2.yang@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: OkSOOztJpX7SOsHp9hVci1DKx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1706237635322100001 Content-Type: text/plain; charset="utf-8" Add --catch_default option to raise a DefaultValueError when encountering VFR default definitions to help remove default variables. Signed-off-by: Yuting Yang Cc: Rebecca Cran Cc: Liming Gao Cc: Bob Feng Cc: Christine Chen Cc: Zifeng Zhang Signed-off-by: Yuting Yang --- 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 | 238 ++++++++++-------- 6 files changed, 150 insertions(+), 104 deletions(-) diff --git a/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp b/BaseTools/Sour= ce/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 =3D FALSE; mOptions.AutoDefault =3D FALSE; mOptions.CheckDefault =3D FALSE; + mOptions.IsCatchDefaultEnable =3D FALSE; memset (&mOptions.OverrideClassGuid, 0, sizeof (EFI_GUID)); =20 if (Argc =3D=3D 1) { @@ -95,6 +96,8 @@ CVfrCompiler::OptionInitialization ( Version (); SET_RUN_STATUS (STATUS_DEAD); return; + } else if (stricmp(Argv[Index], "--catch_default") =3D=3D 0){ + mOptions.IsCatchDefaultEnable =3D TRUE; } else if (stricmp(Argv[Index], "-l") =3D=3D 0) { mOptions.CreateRecordListFile =3D TRUE; gCIfrRecordInfoDB.TurnOn (); @@ -179,7 +182,6 @@ CVfrCompiler::OptionInitialization ( goto Fail; } strcpy (mOptions.VfrFileName, Argv[Index]); - if (mOptions.OutputDirectory =3D=3D NULL) { mOptions.OutputDirectory =3D (CHAR8 *) malloc (1); if (mOptions.OutputDirectory =3D=3D NULL) { @@ -679,7 +681,7 @@ CVfrCompiler::Compile ( DebugError (NULL, 0, 0001, "Error opening the input file", "%s", InFil= eName); goto Fail; } - + InputInfo.IsCatchDefaultEnable =3D mOptions.IsCatchDefaultEnable; if (mOptions.HasOverrideClassGuid) { InputInfo.OverrideClassGuid =3D &mOptions.OverrideClassGuid; } else { @@ -937,5 +939,3 @@ main ( =20 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; =20 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 [] = =3D { { VFR_WARNING_DEFAULT_VALUE_REDEFINED, ": default value re-defined with = different value"}, { VFR_WARNING_ACTION_WITH_TEXT_TWO, ": Action opcode should not have Tex= tTwo part"}, { VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ": Not recommend to use obsole= ted framework opcode"}, - { VFR_WARNING_CODEUNDEFINED, ": undefined Warning Code" } + { VFR_WARNING_CODEUNDEFINED, ": undefined Warning Code" }, + { VFR_WARNING_UNSUPPORTED, ": pls remove the default values if necessary= " } }; =20 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 =3D 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; =20 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 { =20 typedef struct { EFI_GUID *OverrideClassGuid; + BOOLEAN IsCatchDefaultEnable; } INPUT_INFO_TO_SYNTAX; =20 class CFormPkg { diff --git a/BaseTools/Source/C/VfrCompile/VfrSyntax.g b/BaseTools/Source/C= /VfrCompile/VfrSyntax.g index 55fd067f8a..5daf1c423c 100644 --- a/BaseTools/Source/C/VfrCompile/VfrSyntax.g +++ b/BaseTools/Source/C/VfrCompile/VfrSyntax.g @@ -50,6 +50,7 @@ VfrParserStart ( { ParserBlackBox VfrParser(File); VfrParser.parser()->SetOverrideClassGuid (InputInfo->OverrideClassGuid); + VfrParser.parser()->SetIsCatchDefaultEnable(InputInfo->IsCatchDefaultEna= ble); return VfrParser.parser()->vfrProgram(); } >> @@ -386,8 +387,8 @@ dataStructField32 [BOOLEAN FieldInUnion]: ; =20 dataStructField16 [BOOLEAN FieldInUnion]: - <<=20 - UINT32 ArrayNum =3D 0;=20 + << + UINT32 ArrayNum =3D 0; >> ("UINT16" | "CHAR16") N:StringIdentifier @@ -737,7 +738,7 @@ vfrFormSetList : ; =20 vfrStatementExtension: - <<=20 + << EFI_GUID Guid; CIfrGuid *GuidObj =3D NULL; CHAR8 *TypeName =3D NULL; @@ -751,7 +752,7 @@ vfrStatementExtension: >> L:GuidOp Uuid "=3D" guidDefinition[Guid] - {"," DataType "=3D"=20 + {"," DataType "=3D" ( U64:"UINT64" {OpenBracket AN1:Number CloseBracket <getText(), AN1->getLine());>>} << TypeName =3D U64-= >getText(); LineNum =3D U64->getLine(); >> @@ -770,7 +771,7 @@ vfrStatementExtension: | T:"EFI_HII_TIME" {OpenBracket AN8:Number CloseBracket <getText(), AN8->getLine());>>} << TypeName =3D T->g= etText(); LineNum =3D T->getLine(); IsStruct =3D TRUE;>> | R:"EFI_HII_REF" {OpenBracket AN9:Number CloseBracket <getText(), AN9->getLine());>>} - << TypeName =3D R->g= etText(); LineNum =3D R->getLine(); IsStruct =3D TRUE;>> = =20 + << TypeName =3D R->g= etText(); LineNum =3D R->getLine(); IsStruct =3D TRUE;>> | TN:StringIdentifier {OpenBracket AN10:Number CloseBracket <getText(), AN10->getLine());>>} << TypeName =3D TN->= getText(); LineNum =3D TN->getLine(); IsStruct =3D TRUE;>> ) @@ -875,19 +876,19 @@ vfrExtensionData[UINT8 *DataBuff, UINT32 Size, CHAR8 = *TypeName, UINT32 TypeSize, memcpy (ByteOffset, &Data_U64, TypeSize); }else if (strcmp ("UINT32", TypeName) =3D=3D 0) { Data_U32 =3D _STOU32(RD->getText(), RD->getLine()); - memcpy (ByteOffset, &Data_U32, TypeSize); = =20 + memcpy (ByteOffset, &Data_U32, TypeSize); }else if (strcmp ("UINT16", TypeName) =3D=3D 0) { Data_U16 =3D _STOU16(RD->getText(), RD->getLine()); - memcpy (ByteOffset, &Data_U16, TypeSize); = =20 + memcpy (ByteOffset, &Data_U16, TypeSize); }else if (strcmp ("UINT8", TypeName) =3D=3D 0) { Data_U8 =3D _STOU8(RD->getText(), RD->getLine()); - memcpy (ByteOffset, &Data_U8, TypeSize); = =20 + memcpy (ByteOffset, &Data_U8, TypeSize); }else if (strcmp ("BOOLEAN", TypeName)=3D=3D 0) { Data_BL =3D _STOU8(RD->getText(), RD->getLine()); - memcpy (ByteOffset, &Data_BL, TypeSize); = =20 + memcpy (ByteOffset, &Data_BL, TypeSize); }else if (strcmp ("EFI_STRING_ID", TypeName) =3D=3D 0) { Data_SID =3D _STOSID(RD->getText(), RD->getLine()); - memcpy (ByteOffset, &Data_SID, TypeSize); = =20 + memcpy (ByteOffset, &Data_SID, TypeSize); } } else { gCVfrVarDataTypeDB.GetDataFieldInfo(TFName, FieldOffset, Fie= ldType, FieldSize, BitField); @@ -975,7 +976,15 @@ vfrExtensionData[UINT8 *DataBuff, UINT32 Size, CHAR8 *= TypeName, UINT32 TypeSize, =20 vfrStatementDefaultStore : << UINT16 DefaultId =3D EFI_HII_DEFAULT_CLASS_STANDARD; >> - D:DefaultStore N:StringIdentifier "," + D:DefaultStore N:StringIdentifier "," << + if (mIsCatchDefaultE= nable) { + gCVfrErrorHandle.Han= dleWarning ( + VFR_WARNING_UNSU= PPORTED, + D->getLine(), + D->getText() + ); + } + >> Prompt "=3D" "STRING_TOKEN" "\(" S:Number "\)" { "," Attribute "=3D" A:Number << DefaultId =3D _ST= OU16(A->getText(), A->getLine()); >> @@ -1074,7 +1083,7 @@ vfrStatementVarStoreEfi : | U64:"UINT64" "," << TypeName =3D U64->g= etText(); LineNum =3D U64->getLine(); >> | D:"EFI_HII_DATE" "," << TypeName =3D D->get= Text(); LineNum =3D D->getLine(); >> | T:"EFI_HII_TIME" "," << TypeName =3D T->get= Text(); LineNum =3D T->getLine(); >> - | R:"EFI_HII_REF" "," << TypeName =3D R->get= Text(); LineNum =3D R->getLine(); >> =20 + | R:"EFI_HII_REF" "," << TypeName =3D R->get= Text(); LineNum =3D R->getLine(); >> ) { VarId "=3D" ID:Number "," << @@ -1092,8 +1101,8 @@ vfrStatementVarStoreEfi : ( Name "=3D" SN:StringIdentifier "," << StoreName =3D SN-= >getText(); >> | - Name "=3D" "STRING_TOKEN" "\(" VN:Number "\)" "," =20 - VarSize "=3D" N:Number "," <<=20 + Name "=3D" "STRING_TOKEN" "\(" VN:Number "\)" "," + VarSize "=3D" N:Number "," << IsUEFI23EfiVarstore= =3D FALSE; StoreName =3D gCVfr= StringDB.GetVarStoreNameFormStringId(_STOSID(VN->getText(), VN->getLine())); if (StoreName =3D= =3D NULL) { @@ -1116,7 +1125,7 @@ vfrStatementVarStoreEfi : break; case 8: TypeName =3D (CHAR= 8 *) "UINT64"; - break;=20 + break; default: _PCATCH (VFR_RETUR= N_UNSUPPORTED, N); break; @@ -1124,7 +1133,7 @@ vfrStatementVarStoreEfi : >> ) =20 - Uuid "=3D" guidDefinition[Guid] <<=20 + Uuid "=3D" guidDefinition[Guid] << if (IsUEFI23EfiVars= tore) { _PCATCH(gCVfrDataSt= orage.DeclareBufferVarStore ( = StoreName, @@ -1150,7 +1159,7 @@ vfrStatementVarStoreEfi : } VSEObj.SetGuid (&Gu= id); VSEObj.SetVarStoreI= d (VarStoreId); - =20 + VSEObj.SetSize ((UI= NT16) Size); VSEObj.SetName (Sto= reName); if (IsUEFI23EfiVars= tore =3D=3D FALSE && StoreName !=3D NULL) { @@ -1184,7 +1193,7 @@ vfrStatementVarStoreNameValue : >> } ( - Name "=3D" "STRING_TOKEN" "\(" N:Number "\)" "," <<=20 + Name "=3D" "STRING_TOKEN" "\(" N:Number "\)" "," << if (!Created) { _PCATCH(gCVfrData= Storage.DeclareNameVarStoreBegin (SN->getText(), VarStoreId), SN); Created =3D TRUE; @@ -1245,12 +1254,12 @@ vfrStatementDisableIfFormSet : vfrStatementSuppressIfFormSet : << CIfrSuppressIf SIObj;>> L:SuppressIf << - SIObj.SetLineNo= (L->getLine());=20 + SIObj.SetLineNo= (L->getLine()); >> { FLAGS "=3D" flagsField ( "\|" flagsField )* "," } vfrStatementExpression[0] ";" vfrFormSetList - E: EndIf=20 + E: EndIf ";" << CRT_END_OP (E); = >> ; =20 @@ -1491,7 +1500,7 @@ vfrQuestionDataFieldName [EFI_QUESTION_ID &QId, UINT3= 2 &Mask, CHAR8 *&VarIdStr, ( SN2:StringIdentifier << _STRCAT (&VarIdStr,= SN2->getText()); LineNo =3D SN2->getLine(); >> ( - "." <<=20 + "." << _STRCAT (&VarIdStr,= "."); if (mConstantOnlyIn= Expression) { _PCATCH(VFR_RETUR= N_CONSTANT_ONLY, LineNo); @@ -1518,7 +1527,7 @@ vfrQuestionDataFieldName [EFI_QUESTION_ID &QId, UINT3= 2 &Mask, CHAR8 *&VarIdStr, ; =20 vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALUE &Value, BOOLEAN &List= Type] : - << =20 + << EFI_GUID Guid; BOOLEAN Negative =3D FALSE; BOOLEAN IntDecStyle =3D FALSE; @@ -1634,11 +1643,11 @@ vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALU= E &Value, BOOLEAN &ListType] | Z:Zero << $Value.u8 =3D _= STOU8(Z->getText(), Z->getLine()); >> | HOUR:Number ":" MINUTE:Number ":" SECOND:Number << $Value.time =3D _= STOT(HOUR->getText(), MINUTE->getText(),SECOND->getText(), HOUR->getLine())= ; >> | YEAR:Number "/" MONTH:Number "/" DAY:Number << $Value.date =3D _= STOD(YEAR->getText(), MONTH->getText(), DAY->getText(), YEAR->getLine()); >> - | QI:Number";" FI:Number";" guidDefinition[Guid] ";" "STRING_TOKEN" "\("= DP:Number "\)"=20 + | QI:Number";" FI:Number";" guidDefinition[Guid] ";" "STRING_TOKEN" "\("= DP:Number "\)" << $Value.ref =3D _= STOR(QI->getText(), FI->getText(), &Guid, DP->getText(), QI->getLine()); >> | "STRING_TOKEN" "\(" S1:Number "\)" << $Value.string =3D _= STOSID(S1->getText(), S1->getLine()); >> | "\{" << ListType =3D TRUE; = >> - L1:Number <<=20 + L1:Number << switch (Type) { case EFI_IFR_TYPE= _NUM_SIZE_8 : Type8[Index] = =3D _STOU8(L1->getText(), L1->getLine()); @@ -1658,8 +1667,8 @@ vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALUE = &Value, BOOLEAN &ListType] Index++; >> ( - ","=20 - L2:Number <<=20 + "," + L2:Number << switch (Type) { case EFI_IFR_TYPE= _NUM_SIZE_8 : Type8[Index] = =3D _STOU8(L2->getText(), L2->getLine()); @@ -1679,7 +1688,7 @@ vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALUE = &Value, BOOLEAN &ListType] Index++; >> )* - "\}" =20 + "\}" ; =20 //************************************************************************= ***** @@ -1714,7 +1723,7 @@ vfrFormDefinition : ; =20 vfrFormMapDefinition : - <<=20 + << CIfrFormMap *FMapObj =3D NULL; UINT32 FormMapMethodNumber =3D 0; EFI_GUID Guid; @@ -1775,11 +1784,15 @@ vfrStatementDefault : CIfrNumeric *NumericQst =3D NULL; =20 >> - D:Default =20 + D:Default << + if (mIsCatchDefaul= tEnable) { + DefaultValueErro= r(VFR_RETURN_UNSUPPORTED, D->getLine()); + } + >> ( ( - "=3D" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, ArrayTyp= e] "," =20 - <<=20 + "=3D" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, ArrayTyp= e] "," + << if (gCurrentMinMax= Data !=3D NULL && gCurrentMinMaxData->IsNumericOpcode()) { //check default = value is valid for Numeric Opcode NumericQst =3D (= CIfrNumeric *) gCurrentQuestion; @@ -1888,14 +1901,14 @@ vfrStatementDefault : vfrStatementValue "," << CIfrEnd EndObj1; En= dObj1.SetLineNo(D->getLine()); >> ) { - DefaultStore "=3D" SN:StringIdentifier "," <<=20 + DefaultStore "=3D" SN:StringIdentifier "," << _PCATCH(gCVfrDefau= ltStore.GetDefaultId (SN->getText(), &DefaultId), SN); if (DObj !=3D NULL= ) { - DObj->SetDefault= Id (DefaultId);=20 - }=20 + DObj->SetDefault= Id (DefaultId); + } =20 if (DObj2 !=3D NUL= L) { - DObj2->SetDefaul= tId (DefaultId);=20 + DObj2->SetDefaul= tId (DefaultId); } >> } @@ -1917,8 +1930,8 @@ vfrStatementDefault : ); } } - if (DObj !=3D NULL= ) {delete DObj;}=20 - if (DObj2 !=3D NULL= ) {delete DObj2;}=20 + if (DObj !=3D NULL= ) {delete DObj;} + if (DObj2 !=3D NULL= ) {delete DObj2;} >> ) ; @@ -1970,11 +1983,15 @@ vfrStatementInvalid : ; =20 flagsField : - Number=20 - | InteractiveFlag=20 - | ManufacturingFlag=20 - | DefaultFlag=20 - | ResetRequiredFlag=20 + Number + | InteractiveFlag + | ManufacturingFlag + | D:DefaultFlag << + if (mIsCatchDefa= ultEnable) { + DefaultValueEr= ror(VFR_RETURN_UNSUPPORTED, D->getLine()); + } + >> + | ResetRequiredFlag | ReconnectRequiredFlag | N:NVAccessFlag << gCVfrErrorHandle= .HandleWarning ( @@ -1989,7 +2006,7 @@ flagsField : L->getLine(), L->getText() ); - >>=20 + >> ; =20 vfrStatementValue : @@ -2001,13 +2018,13 @@ vfrStatementValue : vfrStatementRead : << CIfrRead RObj; >> R:Read << RObj.SetLineNo(R= ->getLine()); >> - vfrStatementExpression[0] ";"=20 + vfrStatementExpression[0] ";" ; =20 vfrStatementWrite : << CIfrWrite WObj; >> W:Write << WObj.SetLineNo(W= ->getLine()); >> - vfrStatementExpression[0] ";"=20 + vfrStatementExpression[0] ";" ; =20 vfrStatementSubTitle : @@ -2140,7 +2157,7 @@ vfrStatementGoto : FormId "=3D" F3:Number "," << RefType =3D 2;= FId =3D _STOFID(F3->getText(), F3->getLine()); >> Question "=3D" ( - QN3:StringIdentifier "," <<=20 + QN3:StringIdentifier "," << mCVfrQuestionDB.= GetQuestionId (QN3->getText (), NULL, QId, BitMask); if (QId =3D=3D E= FI_QUESTION_ID_INVALID) { _PCATCH(VFR_RE= TURN_UNDEFINED, QN3); @@ -2222,7 +2239,7 @@ vfrStatementGoto : "," Key "=3D" KN:Number << AssignQuestion= Key (*QHObj, KN); >> } { - E:","=20 + E:"," vfrStatementQuestionOptionList << OHObj->SetScope(= 1); CRT_END_OP (E);>> } ";" << if (R1Obj !=3D N= ULL) {delete R1Obj;} if (R2Obj !=3D NULL) {delete R2Obj;} if (R3Obj !=3D NU= LL) {delete R3Obj;} if (R4Obj !=3D NULL) {delete R4Obj;} if (R5Obj !=3D NUL= L) {delete R5Obj;}>> @@ -2511,20 +2528,20 @@ minMaxDateStepDefault[EFI_HII_DATE & D, UINT8 KeyVa= lue] : { "default" "=3D" N:Number "," << switch (KeyValue= ) { - case 0:=20 + case 0: D.Year =3D _S= TOU16(N->getText(), N->getLine()); if (D.Year < _= STOU16 (MinN->getText(), MinN->getLine()) || D.Year > _STOU16 (MaxN->getTex= t(), MaxN->getLine())) { _PCATCH (VFR= _RETURN_INVALID_PARAMETER, N->getLine(), "Year default value must be betwee= n Min year and Max year."); } break; - case 1:=20 - D.Month =3D _S= TOU8(N->getText(), N->getLine());=20 + case 1: + D.Month =3D _S= TOU8(N->getText(), N->getLine()); if (D.Month < = 1 || D.Month > 12) { _PCATCH (VFR= _RETURN_INVALID_PARAMETER, N->getLine(), "Month default value must be betwe= en 1 and 12."); } break; - case 2:=20 - D.Day =3D _STO= U8(N->getText(), N->getLine());=20 + case 2: + D.Day =3D _STO= U8(N->getText(), N->getLine()); if (D.Day < 1 = || D.Day > 31) { _PCATCH (VFR= _RETURN_INVALID_PARAMETER, N->getLine(), "Day default value must be between= 1 and 31."); } @@ -2570,7 +2587,7 @@ vfrSetMinMaxStep[CIfrMinMaxStepData & MMSDObj] : BOOLEAN MinNegative =3D FALSE; BOOLEAN MaxNegative =3D FALSE; >> - Minimum "=3D"=20 + Minimum "=3D" { "\-" << MinNegative =3D = TRUE; >> } @@ -2659,8 +2676,8 @@ vfrSetMinMaxStep[CIfrMinMaxStepData & MMSDObj] : } } >> - Maximum "=3D"=20 - {=20 + Maximum "=3D" + { "\-" << MaxNegative =3D = TRUE; >> } A:Number "," << @@ -2889,7 +2906,7 @@ vfrStatementNumeric : } >> vfrStatementQuestionOptionList - E:EndNumeric <<=20 + E:EndNumeric << CRT_END_OP (E); if (GuidObj !=3D= NULL) { GuidObj->SetSc= ope(1); @@ -3131,7 +3148,7 @@ vfrStatementString : { Key "=3D" KN:Number "," << AssignQuestion= Key (SObj, KN); >> } - MinSize "=3D" MIN:Number "," <<=20 + MinSize "=3D" MIN:Number "," << VarArraySize =3D= _GET_CURRQEST_ARRAY_SIZE(); StringMinSize = =3D _STOU8(MIN->getText(), MIN->getLine()); if (_STOU64(MIN-= >getText(), MIN->getLine()) > StringMinSize) { @@ -3141,7 +3158,7 @@ vfrStatementString : } SObj.SetMinSize = (StringMinSize); >> - MaxSize "=3D" MAX:Number "," <<=20 + MaxSize "=3D" MAX:Number "," << StringMaxSize = =3D _STOU8(MAX->getText(), MAX->getLine()); if (_STOU64(MAX-= >getText(), MAX->getLine()) > StringMaxSize) { _PCATCH (VFR_R= ETURN_INVALID_PARAMETER, MAX->getLine(), "String MaxSize takes only one byt= e, which can't be larger than 0xFF."); @@ -3185,7 +3202,7 @@ vfrStatementPassword : { Key "=3D" KN:Number "," << AssignQuestion= Key (PObj, KN); >> } - MinSize "=3D" MIN:Number "," <<=20 + MinSize "=3D" MIN:Number "," << VarArraySize =3D= _GET_CURRQEST_ARRAY_SIZE(); PasswordMinSize = =3D _STOU16(MIN->getText(), MIN->getLine()); if (_STOU64(MIN-= >getText(), MIN->getLine()) > PasswordMinSize) { @@ -3195,7 +3212,7 @@ vfrStatementPassword : } PObj.SetMinSize = (PasswordMinSize); >> - MaxSize "=3D" MAX:Number "," <<=20 + MaxSize "=3D" MAX:Number "," << PasswordMaxSize = =3D _STOU16(MAX->getText(), MAX->getLine()); if (_STOU64(MAX-= >getText(), MAX->getLine()) > PasswordMaxSize) { _PCATCH (VFR_R= ETURN_INVALID_PARAMETER, MAX->getLine(), "Password MaxSize takes only two b= yte, which can't be larger than 0xFFFF."); @@ -3230,12 +3247,12 @@ vfrStatementOrderedList : >> L:OrderedList << OLObj.SetLineNo(= L->getLine()); gIsOrderedList =3D TRUE;>> vfrQuestionHeader[OLObj] "," - <<=20 + << VarArraySize =3D= _GET_CURRQEST_ARRAY_SIZE(); OLObj.SetMaxCont= ainers ((UINT8) (VarArraySize > 0xFF ? 0xFF : VarArraySize)); >> { - MaxContainers "=3D" M:Number "," <<=20 + MaxContainers "=3D" M:Number "," << if (_STOU64(M->g= etText(), M->getLine()) > _STOU8(M->getText(), M->getLine())) { _PCATCH (VFR_R= ETURN_INVALID_PARAMETER, M->getLine(), "OrderedList MaxContainers takes onl= y one byte, which can't be larger than 0xFF."); } else if (VarAr= raySize !=3D 0 && _STOU8(M->getText(), M->getLine()) > VarArraySize) { @@ -3328,19 +3345,19 @@ minMaxTimeStepDefault[EFI_HII_TIME & T, UINT8 KeyVa= lue] : { "default" "=3D" N:Number "," << switch (KeyValue= ) { - case 0:=20 - T.Hour =3D _= STOU8(N->getText(), N->getLine());=20 + case 0: + T.Hour =3D _= STOU8(N->getText(), N->getLine()); if (T.Hour > 2= 3) { _PCATCH (VFR= _RETURN_INVALID_PARAMETER, N->getLine(), "Hour default value must be betwee= n 0 and 23."); } break; - case 1:=20 - T.Minute =3D _= STOU8(N->getText(), N->getLine());=20 + case 1: + T.Minute =3D _= STOU8(N->getText(), N->getLine()); if (T.Minute >= 59) { _PCATCH (VFR= _RETURN_INVALID_PARAMETER, N->getLine(), "Minute default value must be betw= een 0 and 59."); } break; - case 2:=20 + case 2: T.Second =3D _= STOU8(N->getText(), N->getLine()); if (T.Second >= 59) { _PCATCH (VFR= _RETURN_INVALID_PARAMETER, N->getLine(), "Second default value must be betw= een 0 and 59."); @@ -3419,11 +3436,11 @@ vfrStatementStatListOld : ; =20 vfrStatementDisableIfStat : - <<=20 - CIfrDisableIf DIObj;=20 + << + CIfrDisableIf DIObj; >> L:DisableIf << DIObj.SetLineNo(= L->getLine()); >> - vfrStatementExpression[0] ";"=20 + vfrStatementExpression[0] ";" ( vfrStatementStatList )* E:EndIf << CRT_END_OP (E); = >> ";" @@ -3548,8 +3565,8 @@ vfrStatementWarningIf : ; =20 vfrStatementDisableIfQuest : - <<=20 - CIfrDisableIf DIObj;=20 + << + CIfrDisableIf DIObj; >> L:DisableIf << DIObj.SetLineNo(= L->getLine()); >> vfrStatementExpression[0] ";" @@ -3616,15 +3633,15 @@ vfrStatementOneOfOption : UINT32 *Type32 =3D (UINT32 *) ValueList; UINT64 *Type64 =3D (UINT64 *) ValueList; >> - L:Option << =20 + L:Option << if (_GET_CURRQES= T_DATATYPE() =3D=3D EFI_IFR_TYPE_OTHER) { _PCATCH (VFR_R= ETURN_FATAL_ERROR, L->getLine(), "Get data type error."); } =20 >> - Text "=3D" "STRING_TOKEN" "\(" S:Number "\)" "," =20 + Text "=3D" "STRING_TOKEN" "\(" S:Number "\)" "," Value "=3D" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, ArrayT= ype] "," - <<=20 + << if (gCurrentMinM= axData !=3D NULL) { //set min/max = value for oneof opcode UINT64 Step = =3D gCurrentMinMaxData->GetStepData(_GET_CURRQEST_DATATYPE(), _GET_CURRQEST= _VARTINFO().mIsBitVar); @@ -3696,7 +3713,7 @@ vfrStatementOneOfOption : Size +=3D OFFSET= _OF (EFI_IFR_ONE_OF_OPTION, Value); OOOObj =3D new C= IfrOneOfOption((UINT8)Size); OOOObj->SetLineN= o(L->getLine()); - OOOObj->SetOptio= n (_STOSID(S->getText(), S->getLine()));=20 + OOOObj->SetOptio= n (_STOSID(S->getText(), S->getLine())); if (ArrayType) { OOOObj->SetTyp= e (EFI_IFR_TYPE_BUFFER); } else { @@ -3706,7 +3723,7 @@ vfrStatementOneOfOption : OOOObj->SetT= ype (_GET_CURRQEST_DATATYPE()); } } - OOOObj->SetValue= (*Val);=20 + OOOObj->SetValue= (*Val); >> F:FLAGS "=3D" vfrOneOfOptionFlags[*OOOObj, F->getLine()] << @@ -3790,7 +3807,12 @@ oneofoptionFlagsField [UINT8 & HFlags, UINT8 & LFlag= s] : | RestStyleFlag << $HFlags |=3D 0x2= 0; >> | ReconnectRequiredFlag << $HFlags |=3D 0x4= 0; >> | ManufacturingFlag << $LFlags |=3D 0x2= 0; >> - | DefaultFlag << $LFlags |=3D 0x1= 0; >> + | D:DefaultFlag << + $LFlags |=3D 0x1= 0; + if (mIsCatchDefa= ultEnable) { + DefaultValueEr= ror(VFR_RETURN_UNSUPPORTED, D->getLine()); + } + >> | A:NVAccessFlag << gCVfrErrorHandle= .HandleWarning ( VFR_WARNING_OB= SOLETED_FRAMEWORK_OPCODE, @@ -3963,7 +3985,7 @@ vfrStatementExpression [UINT32 RootLevel, UINT32 ExpO= pCount =3D 0] : } } } - =20 + if ($RootLevel = =3D=3D 0) { _CLEAR_SAVED_O= PHDR (); mCIfrOpHdrInde= x --; @@ -4405,10 +4427,10 @@ ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCo= unt] : for (Index =3D= 0; Index < ListLen; Index++) { EILObj.SetVa= lueList (Index, ValueList[Index]); } - =20 + EILObj.UpdateI= frBuffer(); - _SAVE_OPHDR_CO= ND (EILObj, ($ExpOpCount =3D=3D 0), L->getLine()); = =20 - =20 + _SAVE_OPHDR_CO= ND (EILObj, ($ExpOpCount =3D=3D 0), L->getLine()); + if (QId =3D=3D= EFI_QUESTION_ID_INVALID) { EILObj.SetQu= estionId (QId, VarIdStr, LineNo); } @@ -4458,9 +4480,9 @@ stringref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount= ] : >> L:StringRef "\(" - (=20 + ( "STRING_TOKEN" - "\("=20 + "\(" S:Number << RefStringId =3D _STOSID(S->getText(), S->getLine());= >> "\)" | I:Number << RefStringId =3D _STOSID(I->getText(), I->getLine());= >> @@ -4499,10 +4521,10 @@ getExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : Info.mVarStoreId =3D 0; >> L:Get - "\("=20 + "\(" vfrStorageVarId[Info, VarIdStr, FALSE] {"\|" FLAGS "=3D" numericVarStoreType [VarType] } - "\)" <<=20 + "\)" << { if (Info.mVarS= toreId =3D=3D 0) { // support D= ate/Time question @@ -4549,9 +4571,9 @@ getExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : _PCATCH(VF= R_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support data arra= y"); } } - CIfrGet GObj(L= ->getLine());=20 - _SAVE_OPHDR_CO= ND (GObj, ($ExpOpCount =3D=3D 0), L->getLine());=20 - GObj.SetVarInf= o (&Info);=20 + CIfrGet GObj(L= ->getLine()); + _SAVE_OPHDR_CO= ND (GObj, ($ExpOpCount =3D=3D 0), L->getLine()); + GObj.SetVarInf= o (&Info); delete[] VarId= Str; $ExpOpCount++; } @@ -4608,7 +4630,7 @@ question23refExp[UINT32 & RootLevel, UINT32 & ExpOpCo= unt] : { Uuid "=3D" guidDefinition[Guid] "," << Type = =3D 0x3; >> } - vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount]=20 + vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] "\)" << switch (Type) { @@ -4675,9 +4697,9 @@ setExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : "\(" vfrStorageVarId[Info, VarIdStr, FALSE] {"\|" FLAG "=3D" numericVarStoreType [VarType] } - "," vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount]=20 + "," vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] "\)" - <<=20 + << { if (Info.mVarS= toreId =3D=3D 0) { // support D= ate/Time question @@ -4724,8 +4746,8 @@ setExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : _PCATCH(VF= R_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support data arra= y"); } } - CIfrSet TSObj(= L->getLine());=20 - TSObj.SetVarIn= fo (&Info);=20 + CIfrSet TSObj(= L->getLine()); + TSObj.SetVarIn= fo (&Info); delete[] VarId= Str; $ExpOpCount++; } @@ -4808,9 +4830,9 @@ spanExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : ; =20 vfrExpressionMap [UINT32 & RootLevel, UINT32 & ExpOpCount]: - L:Map =20 - "\("=20 - vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] =20 + L:Map + "\(" + vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] ":" << { CIfrMap MOb= j(L->getLine()); } >> ( vfrStatementExpression[0] @@ -4837,6 +4859,7 @@ spanFlags [UINT8 & Flags] : class EfiVfrParser { << private: + BOOLEAN mIsCatchDefaultEnable; UINT8 mParserStatus; BOOLEAN mConstantOnlyInExpression; =20 @@ -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= ); =20 VOID syn (ANTLRAbstractToken *, ANTLRChar *, SetWord= Type *, ANTLRTokenType, INT32); =20 @@ -4909,6 +4933,7 @@ public: VOID IdEqIdDoSpecial (IN UINT32 &, IN UINT32, IN EF= I_QUESTION_ID, IN CHAR8 *, IN UINT32, IN EFI_QUESTION_ID, IN CHAR8 *, IN UI= NT32, IN EFI_COMPARE_TYPE); VOID IdEqListDoSpecial (IN UINT32 &, IN UINT32, IN EF= I_QUESTION_ID, IN CHAR8 *, IN UINT32, IN UINT16, IN UINT16 *); VOID SetOverrideClassGuid (IN EFI_GUID *); + VOID SetIsCatchDefaultEnable (BOOLEAN IsCatchDefaultEnabl= e); >> } =20 @@ -5086,6 +5111,17 @@ EfiVfrParser::_PCATCH ( mParserStatus =3D mParserStatus + gCVfrErrorHandle.HandleError (ReturnCo= de, LineNum, (CHAR8 *) ErrorMsg); } =20 +VOID +EfiVfrParser::DefaultValueError ( + IN EFI_VFR_RETURN_CODE ReturnCode, + IN UINT32 LineNum + ) +{ + CHAR8 ErrorMsg[100]; + sprintf(ErrorMsg, "please remove the default value / defaultstore in lin= e %d", LineNum); + mParserStatus =3D mParserStatus + gCVfrErrorHandle.HandleError (ReturnCo= de, LineNum, ErrorMsg); +} + VOID EfiVfrParser::syn ( ANTLRAbstractToken *Tok, @@ -5682,12 +5718,18 @@ EfiVfrParser::IdEqListDoSpecial ( } } =20 -VOID=20 +VOID EfiVfrParser::SetOverrideClassGuid (IN EFI_GUID *OverrideClassGuid) { mOverrideClassGuid =3D OverrideClassGuid; } =20 +VOID +EfiVfrParser::SetIsCatchDefaultEnable (BOOLEAN IsCatchDefaultEnable) +{ + mIsCatchDefaultEnable =3D IsCatchDefaultEnable; +} + VOID EfiVfrParser::CheckDuplicateDefaultValue ( IN EFI_DEFAULT_ID DefaultId, --=20 2.39.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#114492): https://edk2.groups.io/g/devel/message/114492 Mute This Topic: https://groups.io/mt/103969254/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-