|
From: <lg...@us...> - 2011-03-02 02:16:57
|
Revision: 2124
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2124&view=rev
Author: lgao4
Date: 2011-03-02 02:16:51 +0000 (Wed, 02 Mar 2011)
Log Message:
-----------
Update VfrCompiler to support question VarStorageId defined by DataType and VarStore name both.
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h
trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrError.h
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp 2011-02-28 17:04:19 UTC (rev 2123)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp 2011-03-02 02:16:51 UTC (rev 2124)
@@ -2,7 +2,7 @@
VfrCompiler main class and main function.
-Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2011, 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
@@ -383,7 +383,7 @@
CONST CHAR8 *Help[] = {
" ",
"VfrCompile version " VFR_COMPILER_VERSION VFR_COMPILER_UPDATE_TIME,
- "Copyright (c) 2004-2010 Intel Corporation. All rights reserved.",
+ "Copyright (c) 2004-2011 Intel Corporation. All rights reserved.",
" ",
"Usage: VfrCompile [options] VfrFile",
" ",
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h 2011-02-28 17:04:19 UTC (rev 2123)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h 2011-03-02 02:16:51 UTC (rev 2124)
@@ -2,7 +2,7 @@
VfrCompiler internal defintions.
-Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2011, 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
@@ -23,7 +23,7 @@
#define PROGRAM_NAME "VfrCompile"
#define VFR_COMPILER_VERSION " 1.95 (UEFI 2.1)"
-#define VFR_COMPILER_UPDATE_TIME " updated on 2009/05/20"
+#define VFR_COMPILER_UPDATE_TIME " updated on 2011/02/25"
//
// This is how we invoke the C preprocessor on the VFR source file
// to resolve #defines, #includes, etc. To make C source files
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp 2011-02-28 17:04:19 UTC (rev 2123)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp 2011-03-02 02:16:51 UTC (rev 2124)
@@ -2,7 +2,7 @@
VfrCompiler error handler.
-Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2011, 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
@@ -34,6 +34,7 @@
{ VFR_RETURN_VARSTOREID_REDEFINED, ": varstore id already defined" },
{ VFR_RETURN_UNDEFINED, ": undefined" },
{ VFR_RETURN_VAR_NOTDEFINED_BY_QUESTION, ": some variable has not defined by a question"},
+ { VFR_RETURN_VARSTORE_DATATYPE_REDEFINED_ERROR, ": Data Structure is defined by more than one varstores, it can't be referred as varstore, only varstore name could be used."},
{ VFR_RETURN_GET_EFIVARSTORE_ERROR, ": get efi varstore error"},
{ VFR_RETURN_EFIVARSTORE_USE_ERROR, ": can not use the efi varstore like this" },
{ VFR_RETURN_EFIVARSTORE_SIZE_ERROR, ": unsupport efi varstore size should be <= 8 bytes" },
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrError.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrError.h 2011-02-28 17:04:19 UTC (rev 2123)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrError.h 2011-03-02 02:16:51 UTC (rev 2124)
@@ -2,7 +2,7 @@
VfrCompiler Error definition
-Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2011, 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
@@ -32,6 +32,7 @@
VFR_RETURN_VARSTOREID_REDEFINED,
VFR_RETURN_UNDEFINED,
VFR_RETURN_VAR_NOTDEFINED_BY_QUESTION,
+ VFR_RETURN_VARSTORE_DATATYPE_REDEFINED_ERROR,
VFR_RETURN_GET_EFIVARSTORE_ERROR,
VFR_RETURN_EFIVARSTORE_USE_ERROR,
VFR_RETURN_EFIVARSTORE_SIZE_ERROR,
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2011-02-28 17:04:19 UTC (rev 2123)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2011-03-02 02:16:51 UTC (rev 2124)
@@ -2,7 +2,7 @@
Vfr common library functions.
-Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2011, 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
@@ -1456,10 +1456,8 @@
return VFR_RETURN_FATAL_ERROR;
}
- for (pNode = mNameVarStoreList; pNode != NULL; pNode = pNode->mNext) {
- if (strcmp (pNode->mVarStoreName, StoreName) == 0) {
- return VFR_RETURN_REDEFINED;
- }
+ if (GetVarStoreId (StoreName, &VarStoreId) == VFR_RETURN_SUCCESS) {
+ return VFR_RETURN_REDEFINED;
}
VarStoreId = GetFreeVarStoreId (EFI_VFR_VARSTORE_NAME);
@@ -1531,10 +1529,8 @@
return VFR_RETURN_EFIVARSTORE_SIZE_ERROR;
}
- for (pNode = mEfiVarStoreList; pNode != NULL; pNode = pNode->mNext) {
- if (strcmp (pNode->mVarStoreName, StoreName) == 0) {
- return VFR_RETURN_REDEFINED;
- }
+ if (GetVarStoreId (StoreName, &VarStoreId) == VFR_RETURN_SUCCESS) {
+ return VFR_RETURN_REDEFINED;
}
VarStoreId = GetFreeVarStoreId (EFI_VFR_VARSTORE_EFI);
@@ -1560,11 +1556,16 @@
{
SVfrVarStorageNode *pNew = NULL;
SVfrDataType *pDataType = NULL;
+ EFI_VARSTORE_ID TempVarStoreId;
if ((StoreName == NULL) || (Guid == NULL) || (DataTypeDB == NULL)) {
return VFR_RETURN_FATAL_ERROR;
}
+ if (GetVarStoreId (StoreName, &TempVarStoreId) == VFR_RETURN_SUCCESS) {
+ return VFR_RETURN_REDEFINED;
+ }
+
CHECK_ERROR_RETURN(DataTypeDB->GetDataType (TypeName, &pDataType), VFR_RETURN_SUCCESS);
if (VarStoreId == EFI_VARSTORE_ID_INVALID) {
@@ -1591,11 +1592,50 @@
}
EFI_VFR_RETURN_CODE
+CVfrDataStorage::GetVarStoreByDataType (
+ IN CHAR8 *DataTypeName,
+ OUT SVfrVarStorageNode **VarNode
+ )
+{
+ SVfrVarStorageNode *pNode;
+ SVfrVarStorageNode *MatchNode;
+
+ //
+ // Framework VFR uses Data type name as varstore name, so don't need check again.
+ //
+ if (VfrCompatibleMode) {
+ return VFR_RETURN_UNDEFINED;
+ }
+
+ MatchNode = NULL;
+ for (pNode = mBufferVarStoreList; pNode != NULL; pNode = pNode->mNext) {
+ if (strcmp (pNode->mStorageInfo.mDataType->mTypeName, DataTypeName) == 0) {
+ if (MatchNode == NULL) {
+ MatchNode = pNode;
+ } else {
+ //
+ // More than one varstores referred the same data structures.
+ //
+ return VFR_RETURN_VARSTORE_DATATYPE_REDEFINED_ERROR;
+ }
+ }
+ }
+
+ if (MatchNode == NULL) {
+ return VFR_RETURN_UNDEFINED;
+ }
+
+ *VarNode = MatchNode;
+ return VFR_RETURN_SUCCESS;
+}
+
+EFI_VFR_RETURN_CODE
CVfrDataStorage::GetVarStoreId (
IN CHAR8 *StoreName,
OUT EFI_VARSTORE_ID *VarStoreId
)
{
+ EFI_VFR_RETURN_CODE ReturnCode;
SVfrVarStorageNode *pNode;
for (pNode = mBufferVarStoreList; pNode != NULL; pNode = pNode->mNext) {
@@ -1623,8 +1663,18 @@
}
mCurrVarStorageNode = NULL;
- *VarStoreId = EFI_VARSTORE_ID_INVALID;
- return VFR_RETURN_UNDEFINED;
+ *VarStoreId = EFI_VARSTORE_ID_INVALID;
+
+ //
+ // Assume that Data strucutre name is used as StoreName, and check again.
+ //
+ ReturnCode = GetVarStoreByDataType (StoreName, &pNode);
+ if (pNode != NULL) {
+ mCurrVarStorageNode = pNode;
+ *VarStoreId = pNode->mVarStoreId;
+ }
+
+ return ReturnCode;
}
EFI_VFR_RETURN_CODE
@@ -1634,6 +1684,7 @@
)
{
SVfrVarStorageNode *pNode;
+ EFI_VFR_RETURN_CODE ReturnCode;
if ((StoreName == NULL) || (DataTypeName == NULL)) {
return VFR_RETURN_FATAL_ERROR;
@@ -1645,10 +1696,18 @@
}
}
+ ReturnCode = VFR_RETURN_UNDEFINED;
+ //
+ // Assume that Data strucutre name is used as StoreName, and check again.
+ //
if (pNode == NULL) {
- return VFR_RETURN_UNDEFINED;
+ ReturnCode = GetVarStoreByDataType (StoreName, &pNode);
}
+ if (pNode == NULL) {
+ return ReturnCode;
+ }
+
if (pNode->mStorageInfo.mDataType == NULL) {
return VFR_RETURN_FATAL_ERROR;
}
@@ -1664,6 +1723,7 @@
)
{
SVfrVarStorageNode *pNode;
+ EFI_VFR_RETURN_CODE ReturnCode;
if (StoreName == NULL) {
return VFR_RETURN_FATAL_ERROR;
@@ -1691,7 +1751,16 @@
}
VarStoreType = EFI_VFR_VARSTORE_INVALID;
- return VFR_RETURN_UNDEFINED;
+
+ //
+ // Assume that Data strucutre name is used as StoreName, and check again.
+ //
+ ReturnCode = GetVarStoreByDataType (StoreName, &pNode);
+ if (pNode != NULL) {
+ VarStoreType = pNode->mVarStoreType;
+ }
+
+ return ReturnCode;
}
EFI_VFR_VARSTORE_TYPE
@@ -1841,6 +1910,7 @@
{
SVfrVarStorageNode *pNode = NULL;
EFI_IFR_TYPE_VALUE Value = gZeroEfiIfrTypeValue;
+ EFI_VFR_RETURN_CODE ReturnCode;
for (pNode = mBufferVarStoreList; pNode != NULL; pNode = pNode->mNext) {
if (strcmp (pNode->mVarStoreName, StoreName) == 0) {
@@ -1848,10 +1918,18 @@
}
}
+ ReturnCode = VFR_RETURN_UNDEFINED;
+ //
+ // Assume that Data strucutre name is used as StoreName, and check again.
+ //
if (pNode == NULL) {
- return VFR_RETURN_UNDEFINED;
+ ReturnCode = GetVarStoreByDataType (StoreName, &pNode);
}
+ if (pNode == NULL) {
+ return ReturnCode;
+ }
+
gCVfrBufferConfig.Open ();
Value.u8 = 0;
if (gCVfrBufferConfig.Write ('a', StoreName, NULL, EFI_IFR_TYPE_NUM_SIZE_8, Info.mInfo.mVarOffset, Info.mVarTotalSize, Value) != 0) {
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h 2011-02-28 17:04:19 UTC (rev 2123)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h 2011-03-02 02:16:51 UTC (rev 2124)
@@ -2,7 +2,7 @@
Vfr common library functions.
-Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2011, 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
@@ -307,6 +307,7 @@
EFI_VFR_RETURN_CODE GetVarStoreType (IN CHAR8 *, OUT EFI_VFR_VARSTORE_TYPE &);
EFI_VFR_VARSTORE_TYPE GetVarStoreType (IN EFI_VARSTORE_ID);
EFI_VFR_RETURN_CODE GetVarStoreName (IN EFI_VARSTORE_ID, OUT CHAR8 **);
+ EFI_VFR_RETURN_CODE GetVarStoreByDataType (IN CHAR8 *, OUT SVfrVarStorageNode **);
EFI_VFR_RETURN_CODE GetBufferVarStoreDataTypeName (IN CHAR8 *, OUT CHAR8 **);
EFI_VFR_RETURN_CODE GetEfiVarStoreInfo (IN EFI_VARSTORE_INFO *);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mdk...@us...> - 2011-04-13 23:45:27
|
Revision: 2139
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2139&view=rev
Author: mdkinney
Date: 2011-04-13 23:45:20 +0000 (Wed, 13 Apr 2011)
Log Message:
-----------
Add "guiop" opcode to VFR compiler
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2011-04-13 23:44:28 UTC (rev 2138)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2011-04-13 23:45:20 UTC (rev 2139)
@@ -2,7 +2,7 @@
The definition of CFormPkg's member function
-Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2011, 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
@@ -1697,6 +1697,25 @@
}
};
+class CIfrGuid : public CIfrObj, public CIfrOpHeader {
+private:
+ EFI_IFR_GUID *mGuid;
+
+public:
+ CIfrGuid (UINT8 Size) : CIfrObj (EFI_IFR_GUID_OP, (CHAR8 **)&mGuid, sizeof (EFI_IFR_GUID)+Size),
+ CIfrOpHeader (EFI_IFR_GUID_OP, &mGuid->Header, sizeof (EFI_IFR_GUID)+Size) {
+ memset (&mGuid->Guid, 0, sizeof (EFI_GUID));
+ }
+
+ VOID SetGuid (IN EFI_GUID *Guid) {
+ memcpy (&mGuid->Guid, Guid, sizeof (EFI_GUID));
+ }
+
+ VOID SetData (IN UINT8* DataBuff, IN UINT8 Size) {
+ memcpy ((UINT8 *)mGuid + sizeof (EFI_IFR_GUID), DataBuff, Size);
+ }
+};
+
class CIfrDup : public CIfrObj, public CIfrOpHeader {
private:
EFI_IFR_DUP *mDup;
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-04-13 23:44:28 UTC (rev 2138)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-04-13 23:45:20 UTC (rev 2139)
@@ -1,5 +1,5 @@
/*++
-Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2011, 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
@@ -233,6 +233,11 @@
#token Refresh("refresh") "refresh"
#token Interval("interval") "interval"
#token VarstoreDevice("varstoredevice") "varstoredevice"
+#token GuidOp("guidop") "guidop"
+#token EndGuidOp("endguidop") "endguidop"
+#token DataType("datatype") "datatype"
+#token Data("data") "data"
+
//
// Define the class and subclass tokens
//
@@ -559,10 +564,197 @@
vfrStatementVarStoreNameValue |
vfrStatementDefaultStore |
vfrStatementDisableIfFormSet |
- vfrStatementSuppressIfFormSet
+ vfrStatementSuppressIfFormSet |
+ vfrStatementExtension
)*
;
+vfrStatementExtension:
+ <<
+ EFI_GUID Guid;
+ CIfrGuid *GuidObj = NULL;
+ CHAR8 *TypeName = NULL;
+ UINT32 TypeSize = 0;
+ UINT8 *DataBuff = NULL;
+ UINT32 Size = 0;
+ UINT8 Idx = 0;
+ UINT32 LineNum;
+ BOOLEAN IsStruct = FALSE;
+ UINT32 ArrayNum = 0;
+ >>
+ L:GuidOp
+ Uuid "=" guidDefinition[Guid]
+ {"," DataType "="
+ (
+ U64:"UINT64" {OpenBracket AN1:Number CloseBracket <<ArrayNum = _STOU32(AN1->getText());>>}
+ << TypeName = U64->getText(); LineNum = U64->getLine(); >>
+ | U32:"UINT32" {OpenBracket AN2:Number CloseBracket <<ArrayNum = _STOU32(AN2->getText());>>}
+ << TypeName = U32->getText(); LineNum = U32->getLine(); >>
+ | U16:"UINT16" {OpenBracket AN3:Number CloseBracket <<ArrayNum = _STOU32(AN3->getText());>>}
+ << TypeName = U16->getText(); LineNum = U16->getLine(); >>
+ | U8:"UINT8" {OpenBracket AN4:Number CloseBracket <<ArrayNum = _STOU32(AN4->getText());>>}
+ << TypeName = U8->getText(); LineNum = U8->getLine(); >>
+ | BL:"BOOLEAN" {OpenBracket AN5:Number CloseBracket <<ArrayNum = _STOU32(AN5->getText());>>}
+ << TypeName = BL->getText(); LineNum = BL->getLine(); >>
+ | SI:"EFI_STRING_ID" {OpenBracket AN6:Number CloseBracket <<ArrayNum = _STOU32(AN6->getText());>>}
+ << TypeName = SI->getText(); LineNum = SI->getLine(); >>
+ | D:"EFI_HII_DATE" {OpenBracket AN7:Number CloseBracket <<ArrayNum = _STOU32(AN7->getText());>>}
+ << TypeName = D->getText(); LineNum = D->getLine(); IsStruct = TRUE;>>
+ | T:"EFI_HII_TIME" {OpenBracket AN8:Number CloseBracket <<ArrayNum = _STOU32(AN8->getText());>>}
+ << TypeName = T->getText(); LineNum = T->getLine(); IsStruct = TRUE;>>
+ | TN:StringIdentifier {OpenBracket AN9:Number CloseBracket <<ArrayNum = _STOU32(AN9->getText());>>}
+ << TypeName = TN->getText(); LineNum = TN->getLine(); IsStruct = TRUE;>>
+ )
+ <<
+ _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &TypeSize), LineNum);
+ if (ArrayNum > 0) {
+ Size = TypeSize*ArrayNum;
+ } else {
+ Size = TypeSize;
+ }
+ if (Size > (128 - sizeof (EFI_IFR_GUID))) return;
+ DataBuff = (UINT8 *)malloc(Size);
+ for (Idx = 0; Idx < Size; Idx++) {
+ DataBuff[Idx] = 0;
+ }
+ >>
+ vfrExtensionData [DataBuff, Size, TypeName, TypeSize, IsStruct, ArrayNum]
+ }
+ <<
+ {
+ GuidObj = new CIfrGuid(Size);
+ if (GuidObj != NULL) {
+ GuidObj->SetLineNo(L->getLine());
+ GuidObj->SetGuid (&Guid);
+ }
+ }
+ if (TypeName != NULL) {
+ GuidObj->SetData(DataBuff, Size);
+ }
+ >>
+ {","
+ (
+ vfrStatementExtension
+ )*
+ E:EndGuidOp << GuidObj->SetScope(1); CRT_END_OP (E); >>
+ }
+ <<
+ if (GuidObj != NULL) delete GuidObj;
+ if (DataBuff != NULL) free(DataBuff);
+ >>
+ ";"
+;
+
+vfrExtensionData[UINT8 *DataBuff, UINT32 Size, CHAR8 *TypeName, UINT32 TypeSize, BOOLEAN IsStruct, UINT32 ArrayNum]:
+ <<
+ CHAR8 *TFName = NULL;
+ UINT32 ArrayIdx = 0;
+ UINT16 FieldOffset;
+ UINT8 FieldType;
+ UINT32 FieldSize;
+ UINT64 Data_U64 = 0;
+ UINT32 Data_U32 = 0;
+ UINT16 Data_U16 = 0;
+ UINT8 Data_U8 = 0;
+ BOOLEAN Data_BL = 0;
+ EFI_STRING_ID Data_SID = 0;
+ BOOLEAN IsArray = FALSE;
+ UINT8 *ByteOffset = NULL;
+ >>
+(
+ ("," "data" {OpenBracket IDX1:Number CloseBracket <<IsArray = TRUE;>>}
+ <<
+ ArrayIdx = 0;
+ if (IsArray == TRUE) {
+ ArrayIdx = _STOU8(IDX1->getText());
+ if (ArrayIdx >= ArrayNum) return;
+ IsArray = FALSE;
+ }
+ ByteOffset = DataBuff + (ArrayIdx * TypeSize);
+ if (IsStruct == TRUE) {
+ _STRCAT(&TFName, TypeName);
+ }
+ >>
+ {("." FN:StringIdentifier
+ <<
+ if (IsStruct == TRUE) {
+ _STRCAT(&TFName, ".");
+ _STRCAT(&TFName, FN->getText());
+ }
+ >>
+ {
+ OpenBracket IDX2:Number CloseBracket
+ <<
+ if (IsStruct == TRUE) {
+ _STRCAT(&TFName, "[");
+ _STRCAT(&TFName, IDX2->getText());
+ _STRCAT(&TFName, "]");
+ }
+ >>
+ }
+ )*
+ }
+
+ "=" RD:Number
+ <<
+ if (IsStruct == FALSE) {
+ if (strcmp ("UINT64", TypeName) == 0) {
+ Data_U64 = _STOU64(RD->getText());
+ memcpy (ByteOffset, &Data_U64, TypeSize);
+ }else if (strcmp ("UINT32", TypeName) == 0) {
+ Data_U32 = _STOU32(RD->getText());
+ memcpy (ByteOffset, &Data_U32, TypeSize);
+ }else if (strcmp ("UINT16", TypeName) == 0) {
+ Data_U16 = _STOU16(RD->getText());
+ memcpy (ByteOffset, &Data_U16, TypeSize);
+ }else if (strcmp ("UINT8", TypeName) == 0) {
+ Data_U8 = _STOU8(RD->getText());
+ memcpy (ByteOffset, &Data_U8, TypeSize);
+ }else if (strcmp ("BOOLEAN", TypeName)== 0) {
+ Data_BL = _STOU8(RD->getText());
+ memcpy (ByteOffset, &Data_BL, TypeSize);
+ }else if (strcmp ("EFI_STRING_ID", TypeName) == 0) {
+ Data_SID = _STOSID(RD->getText());
+ memcpy (ByteOffset, &Data_SID, TypeSize);
+ }
+ } else {
+ gCVfrVarDataTypeDB.GetDataFieldInfo(TFName, FieldOffset, FieldType, FieldSize);
+ switch (FieldType) {
+ case EFI_IFR_TYPE_NUM_SIZE_8:
+ Data_U8 = _STOU8(RD->getText());
+ memcpy (ByteOffset + FieldOffset, &Data_U8, FieldSize);
+ break;
+ case EFI_IFR_TYPE_NUM_SIZE_16:
+ Data_U16 = _STOU16(RD->getText());
+ memcpy (ByteOffset + FieldOffset, &Data_U16, FieldSize);
+ break;
+ case EFI_IFR_TYPE_NUM_SIZE_32:
+ Data_U32 = _STOU32(RD->getText());
+ memcpy (ByteOffset + FieldOffset, &Data_U32, FieldSize);
+ break;
+ case EFI_IFR_TYPE_NUM_SIZE_64:
+ Data_U64 = _STOU64(RD->getText());
+ memcpy (ByteOffset + FieldOffset, &Data_U64, FieldSize);
+ break;
+ case EFI_IFR_TYPE_BOOLEAN:
+ Data_BL = _STOU8(RD->getText());
+ memcpy (ByteOffset + FieldOffset, &Data_BL, FieldSize);
+ break;
+ case EFI_IFR_TYPE_STRING:
+ Data_SID = _STOSID(RD->getText());
+ memcpy (ByteOffset + FieldOffset, &Data_SID, FieldSize);
+ break;
+ default:
+ break;
+ }
+ }
+ if (TFName != NULL) { delete TFName; TFName = NULL; }
+ >>
+ )*
+)
+;
+
+
vfrStatementDefaultStore :
<< UINT16 DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD; >>
D:DefaultStore N:StringIdentifier ","
@@ -1060,7 +1252,8 @@
vfrStatementLabel |
vfrStatementBanner |
// Just for framework vfr compatibility
- vfrStatementInvalid
+ vfrStatementInvalid |
+ vfrStatementExtension
)*
E:EndForm <<
if (mCompatibleMode) {
@@ -2146,7 +2339,8 @@
vfrStatementNoSubmitIf |
vfrStatementDisableIfQuest |
vfrStatementRefresh |
- vfrStatementVarstoreDevice
+ vfrStatementVarstoreDevice |
+ vfrStatementExtension
;
vfrStatementQuestionTagList :
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2011-04-13 23:44:28 UTC (rev 2138)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2011-04-13 23:45:20 UTC (rev 2139)
@@ -622,6 +622,9 @@
if (*VarStr == ']') {
VarStr++;
}
+ if (*VarStr == '.') {
+ VarStr++;
+ }
return VFR_RETURN_SUCCESS;
case ']':
return VFR_RETURN_DATA_STRING_ERROR;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2011-07-15 15:31:51
|
Revision: 2217
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2217&view=rev
Author: ydong10
Date: 2011-07-15 15:31:45 +0000 (Fri, 15 Jul 2011)
Log Message:
-----------
Fix GCC64 build fail
Signed-off-by: ydong10
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2011-07-15 05:46:35 UTC (rev 2216)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2011-07-15 15:31:45 UTC (rev 2217)
@@ -3182,22 +3182,22 @@
CVfrStringDB::FindStringBlock (
IN CHAR8 *StringData,
IN EFI_STRING_ID StringId,
- OUT UINTN *StringTextOffset,
+ OUT UINT32 *StringTextOffset,
OUT UINT8 *BlockType
)
{
CHAR8 *BlockHdr;
EFI_STRING_ID CurrentStringId;
- UINTN BlockSize;
- UINTN Index;
+ UINT32 BlockSize;
+ UINT32 Index;
CHAR8 *StringTextPtr;
- UINTN Offset;
+ UINT32 Offset;
UINT16 StringCount;
UINT16 SkipCount;
UINT8 Length8;
EFI_HII_SIBT_EXT2_BLOCK Ext2;
UINT32 Length32;
- UINTN StringSize;
+ UINT32 StringSize;
CurrentStringId = 1;
@@ -3414,10 +3414,10 @@
CVfrStringDB::GetUnicodeStringTextOrSize (
OUT EFI_STRING StringDest, OPTIONAL
IN CHAR8 *StringSrc,
- IN OUT UINTN *BufferSize
+ IN OUT UINT32 *BufferSize
)
{
- UINTN StringSize;
+ UINT32 StringSize;
CHAR16 *StringPtr;
StringSize = sizeof (CHAR16);
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h 2011-07-15 05:46:35 UTC (rev 2216)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h 2011-07-15 15:31:45 UTC (rev 2217)
@@ -431,14 +431,14 @@
EFI_STATUS FindStringBlock (
IN CHAR8 *StringData,
IN EFI_STRING_ID StringId,
- OUT UINTN *StringTextOffset,
+ OUT UINT32 *StringTextOffset,
OUT UINT8 *BlockType
);
EFI_STATUS GetUnicodeStringTextOrSize (
OUT EFI_STRING StringDest, OPTIONAL
IN CHAR8 *StringSrc,
- IN OUT UINTN *BufferSize
+ IN OUT UINT32 *BufferSize
);
public:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2011-07-19 09:23:35
|
Revision: 2226
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2226&view=rev
Author: ydong10
Date: 2011-07-19 09:23:29 +0000 (Tue, 19 Jul 2011)
Log Message:
-----------
Refine the code to avoid parse vfr file failed with GCC44
Signed-off-by: ydong10
Reviewed-by: lgao4
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-07-19 09:19:48 UTC (rev 2225)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-07-19 09:23:29 UTC (rev 2226)
@@ -894,7 +894,7 @@
Name "=" "STRING_TOKEN" "\(" VN:Number "\)" ","
VarSize "=" N:Number "," <<
IsUEFI23EfiVarstore = FALSE;
- gCVfrStringDB.GetVarStoreNameFormStringId(_STOSID(VN->getText()), &StoreName);
+ StoreName = gCVfrStringDB.GetVarStoreNameFormStringId(_STOSID(VN->getText()));
if (StoreName == NULL) {
_PCATCH (VFR_RETURN_UNSUPPORTED, VN->getLine(), "Can't get varstore name for this StringId!");
}
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2011-07-19 09:19:48 UTC (rev 2225)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2011-07-19 09:23:29 UTC (rev 2226)
@@ -3067,82 +3067,84 @@
mStringFileName[FileLen - 1] = '\0';
}
-VOID
+CHAR8 *
CVfrStringDB::GetVarStoreNameFormStringId (
- IN EFI_STRING_ID StringId,
- OUT CHAR8 **VarStoreName
+ IN EFI_STRING_ID StringId
)
{
FILE *pInFile = NULL;
UINT32 NameOffset;
UINT32 Length;
- CHAR8 *StringPtr;
+ UINT8 *StringPtr;
CHAR8 *StringName;
CHAR16 *UnicodeString;
+ CHAR8 *VarStoreName = NULL;
CHAR8 *DestTmp;
+ UINT8 *Current;
EFI_STATUS Status;
CHAR8 LineBuf[EFI_IFR_MAX_LENGTH];
UINT8 BlockType;
- EFI_HII_STRING_PACKAGE_HDR PkgHeader;
+ EFI_HII_STRING_PACKAGE_HDR *PkgHeader;
- if (VarStoreName == NULL) {
- return;
- }
-
- *VarStoreName = NULL;
-
if (mStringFileName == '\0' ) {
- return;
+ return NULL;
}
- if ((pInFile = fopen (mStringFileName, "r")) == NULL) {
- return;
+ if ((pInFile = fopen (mStringFileName, "rb")) == NULL) {
+ return NULL;
}
//
- // fgets will add "\0" at the end of the string, so need to add one byte extra buffer.
+ // Get file length.
//
- while (fgets ((char *)(&PkgHeader), sizeof (EFI_HII_STRING_PACKAGE_HDR), pInFile) != NULL) {
-
- if (PkgHeader.Header.Type != EFI_HII_PACKAGE_STRINGS) {
- fclose (pInFile);
- return;
- }
+ fseek (pInFile, 0, SEEK_END);
+ Length = ftell (pInFile);
+ fseek (pInFile, 0, SEEK_SET);
- Length = PkgHeader.HdrSize - sizeof (EFI_HII_STRING_PACKAGE_HDR) + 1 + 1;
- if (fgets (LineBuf, Length, pInFile) == NULL) {
- fclose (pInFile);
- return;
- }
-
- Length = PkgHeader.Header.Length - PkgHeader.HdrSize + 1;
- StringPtr = new CHAR8[Length];
- if (StringPtr == NULL) {
- fclose (pInFile);
- }
-
- if (fgets (StringPtr, Length, pInFile) == NULL ) {
- fclose (pInFile);
- return;
- }
+ //
+ // Get file data.
+ //
+ StringPtr = new UINT8[Length];
+ if (StringPtr == NULL) {
+ fclose (pInFile);
+ return NULL;
+ }
+ fread ((char *)StringPtr, sizeof (UINT8), Length, pInFile);
+ fclose (pInFile);
- if (strcmp (LineBuf, "en-US") == 0) {
- //
- // Skip the data that the language is not english.
- //
+ PkgHeader = (EFI_HII_STRING_PACKAGE_HDR *) StringPtr;
+ //
+ // Check the String package.
+ //
+ if (PkgHeader->Header.Type != EFI_HII_PACKAGE_STRINGS) {
+ delete StringPtr;
+ return NULL;
+ }
+
+ //
+ // Search the language, only search the "en-US".
+ //
+ Current = StringPtr;
+ while (strcmp (PkgHeader->Language, "en-US") != 0) {
+ Current += PkgHeader->Header.Length;
+ PkgHeader = (EFI_HII_STRING_PACKAGE_HDR *) Current;
+ //
+ // If can't find "en-US" string package, just return the first string package.
+ //
+ if (Current - StringPtr >= Length) {
+ Current = StringPtr;
break;
}
- delete StringPtr;
}
+ Current += PkgHeader->HdrSize;
//
// Find the string block according the stringId.
//
- Status = FindStringBlock(StringPtr, StringId, &NameOffset, &BlockType);
+ Status = FindStringBlock(Current, StringId, &NameOffset, &BlockType);
if (Status != EFI_SUCCESS) {
delete StringPtr;
- fclose (pInFile);
- return;
+ return NULL;
}
//
@@ -3153,18 +3155,18 @@
case EFI_HII_SIBT_STRING_SCSU_FONT:
case EFI_HII_SIBT_STRINGS_SCSU:
case EFI_HII_SIBT_STRINGS_SCSU_FONT:
- StringName = StringPtr + NameOffset;
- *VarStoreName = new CHAR8[strlen(StringName) + 1];
- strcpy (*VarStoreName, StringName);
+ StringName = (CHAR8*)(Current + NameOffset);
+ VarStoreName = new CHAR8[strlen(StringName) + 1];
+ strcpy (VarStoreName, StringName);
break;
case EFI_HII_SIBT_STRING_UCS2:
case EFI_HII_SIBT_STRING_UCS2_FONT:
case EFI_HII_SIBT_STRINGS_UCS2:
case EFI_HII_SIBT_STRINGS_UCS2_FONT:
- UnicodeString = (CHAR16*)(StringPtr + NameOffset);
- Status = GetUnicodeStringTextOrSize (NULL, (CHAR8*)UnicodeString, &Length) ;
+ UnicodeString = (CHAR16*)(Current + NameOffset);
+ Length = GetUnicodeStringTextSize ((UINT8*)UnicodeString) ;
DestTmp = new CHAR8[Length / 2 + 1];
- *VarStoreName = DestTmp;
+ VarStoreName = DestTmp;
while (*UnicodeString != '\0') {
*(DestTmp++) = (CHAR8) *(UnicodeString++);
}
@@ -3175,22 +3177,23 @@
}
delete StringPtr;
- fclose (pInFile);
+
+ return VarStoreName;
}
EFI_STATUS
CVfrStringDB::FindStringBlock (
- IN CHAR8 *StringData,
+ IN UINT8 *StringData,
IN EFI_STRING_ID StringId,
OUT UINT32 *StringTextOffset,
OUT UINT8 *BlockType
)
{
- CHAR8 *BlockHdr;
+ UINT8 *BlockHdr;
EFI_STRING_ID CurrentStringId;
UINT32 BlockSize;
UINT32 Index;
- CHAR8 *StringTextPtr;
+ UINT8 *StringTextPtr;
UINT32 Offset;
UINT16 StringCount;
UINT16 SkipCount;
@@ -3198,7 +3201,7 @@
EFI_HII_SIBT_EXT2_BLOCK Ext2;
UINT32 Length32;
UINT32 StringSize;
-
+
CurrentStringId = 1;
//
@@ -3268,7 +3271,7 @@
// Use StringSize to store the size of the specified string, including the NULL
// terminator.
//
- GetUnicodeStringTextOrSize (NULL, StringTextPtr, &StringSize);
+ StringSize = GetUnicodeStringTextSize (StringTextPtr);
BlockSize += Offset + StringSize;
CurrentStringId++;
break;
@@ -3280,7 +3283,7 @@
// Use StrSize to store the size of the specified string, including the NULL
// terminator.
//
- GetUnicodeStringTextOrSize (NULL, StringTextPtr, &StringSize);
+ StringSize = GetUnicodeStringTextSize (StringTextPtr);
BlockSize += Offset + StringSize;
CurrentStringId++;
break;
@@ -3291,7 +3294,7 @@
BlockSize += Offset;
memcpy (&StringCount, BlockHdr + sizeof (EFI_HII_STRING_BLOCK), sizeof (UINT16));
for (Index = 0; Index < StringCount; Index++) {
- GetUnicodeStringTextOrSize (NULL, StringTextPtr, &StringSize);
+ StringSize = GetUnicodeStringTextSize (StringTextPtr);
BlockSize += StringSize;
if (CurrentStringId == StringId) {
*BlockType = *BlockHdr;
@@ -3313,7 +3316,7 @@
sizeof (UINT16)
);
for (Index = 0; Index < StringCount; Index++) {
- GetUnicodeStringTextOrSize (NULL, StringTextPtr, &StringSize);
+ StringSize = GetUnicodeStringTextSize (StringTextPtr);
BlockSize += StringSize;
if (CurrentStringId == StringId) {
*BlockType = *BlockHdr;
@@ -3410,11 +3413,9 @@
return EFI_NOT_FOUND;
}
-EFI_STATUS
-CVfrStringDB::GetUnicodeStringTextOrSize (
- OUT EFI_STRING StringDest, OPTIONAL
- IN CHAR8 *StringSrc,
- IN OUT UINT32 *BufferSize
+UINT32
+CVfrStringDB::GetUnicodeStringTextSize (
+ IN UINT8 *StringSrc
)
{
UINT32 StringSize;
@@ -3426,17 +3427,7 @@
StringSize += sizeof (CHAR16);
}
- if (*BufferSize < StringSize) {
- *BufferSize = StringSize;
- return EFI_BUFFER_TOO_SMALL;
- }
-
- if (StringDest != NULL) {
- memcpy (StringDest, StringSrc, StringSize);
- }
-
- *BufferSize = StringSize;
- return EFI_SUCCESS;
+ return StringSize;
}
BOOLEAN VfrCompatibleMode = FALSE;
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h 2011-07-19 09:19:48 UTC (rev 2225)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h 2011-07-19 09:23:29 UTC (rev 2226)
@@ -175,7 +175,7 @@
VOID RegisterNewType (IN SVfrDataType *);
EFI_VFR_RETURN_CODE ExtractStructTypeName (IN CHAR8 *&, OUT CHAR8 *);
- EFI_VFR_RETURN_CODE GetTypeField (IN CHAR8 *, IN SVfrDataType *, IN SVfrDataField *&);
+ EFI_VFR_RETURN_CODE GetTypeField (IN CONST CHAR8 *, IN SVfrDataType *, IN SVfrDataField *&);
EFI_VFR_RETURN_CODE GetFieldOffset (IN SVfrDataField *, IN UINT32, OUT UINT32 &);
UINT8 GetFieldWidth (IN SVfrDataField *);
UINT32 GetFieldSize (IN SVfrDataField *, IN UINT32);
@@ -429,16 +429,14 @@
CHAR8 *mStringFileName;
EFI_STATUS FindStringBlock (
- IN CHAR8 *StringData,
+ IN UINT8 *StringData,
IN EFI_STRING_ID StringId,
OUT UINT32 *StringTextOffset,
OUT UINT8 *BlockType
);
- EFI_STATUS GetUnicodeStringTextOrSize (
- OUT EFI_STRING StringDest, OPTIONAL
- IN CHAR8 *StringSrc,
- IN OUT UINT32 *BufferSize
+ UINT32 GetUnicodeStringTextSize (
+ IN UINT8 *StringSrc
);
public:
@@ -449,9 +447,8 @@
IN CHAR8 *StringFileName
);
- VOID GetVarStoreNameFormStringId (
- IN EFI_STRING_ID StringId,
- OUT CHAR8 **VarStoreName
+ CHAR8 * GetVarStoreNameFormStringId (
+ IN EFI_STRING_ID StringId
);
};
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lg...@us...> - 2011-09-14 08:37:58
|
Revision: 2312
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2312&view=rev
Author: lgao4
Date: 2011-09-14 08:37:47 +0000 (Wed, 14 Sep 2011)
Log Message:
-----------
Enhance VfrCompiler to auto create question for the referred DataField without definition.
Signed-off-by: lgao4
Reviewed-by: ydong10
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2011-09-14 08:25:30 UTC (rev 2311)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2011-09-14 08:37:47 UTC (rev 2312)
@@ -561,22 +561,24 @@
CHAR8 *VarStr;
UINT32 ArrayIdx;
CHAR8 FName[MAX_NAME_LEN];
+ CHAR8 *SName;
+ CHAR8 *NewStr;
EFI_VFR_RETURN_CODE ReturnCode;
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
+ //
+ // Declare all questions as Numeric in DisableIf True
+ //
+ // DisableIf
+ CIfrDisableIf DIObj;
+ DIObj.SetLineNo (LineNo);
+
+ //TrueOpcode
+ CIfrTrue TObj (LineNo);
+
+ // Declare Numeric qeustion for each undefined question.
for (pNode = PendingAssignList; pNode != NULL; pNode = pNode->mNext) {
if (pNode->mFlag == PENDING) {
- //
- // declare this question as Numeric in SuppressIf True
- //
- // SuppressIf
- CIfrSuppressIf SIObj;
- SIObj.SetLineNo (LineNo);
-
- //TrueOpcode
- CIfrTrue TObj (LineNo);
-
- //Numeric qeustion
CIfrNumeric CNObj;
EFI_VARSTORE_INFO Info;
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;
@@ -639,7 +641,16 @@
ReturnCode = lCVfrDataStorage.GetEfiVarStoreInfo (&Info);
} else if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) {
VarStr = pNode->mKey;
- ReturnCode = lCVfrVarDataTypeDB.GetDataFieldInfo (VarStr, Info.mInfo.mVarOffset, Info.mVarType, Info.mVarTotalSize);
+ //convert VarStr with store name to VarStr with structure name
+ ReturnCode = lCVfrDataStorage.GetBufferVarStoreDataTypeName (FName, &SName);
+ if (ReturnCode == VFR_RETURN_SUCCESS) {
+ NewStr = new CHAR8[strlen (VarStr) + strlen (SName) + 1];
+ NewStr[0] = '\0';
+ strcpy (NewStr, SName);
+ strcat (NewStr, VarStr + strlen (FName));
+ ReturnCode = lCVfrVarDataTypeDB.GetDataFieldInfo (NewStr, Info.mInfo.mVarOffset, Info.mVarType, Info.mVarTotalSize);
+ delete NewStr;
+ }
} else {
ReturnCode = VFR_RETURN_UNSUPPORTED;
}
@@ -657,7 +668,7 @@
// For undefined Efi VarStore type question
// Append the extended guided opcode to contain VarName
//
- if (VarStoreType == EFI_VFR_VARSTORE_EFI) {
+ if (VarStoreType == EFI_VFR_VARSTORE_EFI || VfrCompatibleMode) {
CIfrVarEqName CVNObj (QId, Info.mInfo.mVarName);
CVNObj.SetLineNo (LineNo);
}
@@ -667,13 +678,15 @@
//
CIfrEnd CEObj;
CEObj.SetLineNo (LineNo);
- //
- // End for SuppressIf
- //
- CIfrEnd SEObj;
- SEObj.SetLineNo (LineNo);
}
}
+
+ //
+ // End for DisableIf
+ //
+ CIfrEnd SEObj;
+ SEObj.SetLineNo (LineNo);
+
return VFR_RETURN_SUCCESS;
}
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-09-14 08:25:30 UTC (rev 2311)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-09-14 08:37:47 UTC (rev 2312)
@@ -1387,20 +1387,22 @@
CIfrLabel LObj3;
LObj3.SetLineNo(E->getLine());
LObj3.SetNumber (0xffff); //add end label for UEFI, label number hardcode 0xffff
- //
- // Declare undefined Question
- //
- if (gCFormPkg.HavePendingUnassigned()) {
- gCFormPkg.DeclarePendingQuestion (
- gCVfrVarDataTypeDB,
- mCVfrDataStorage,
- mCVfrQuestionDB,
- &mFormsetGuid,
- E->getLine()
- );
- }
}
+
//
+ // Declare undefined Question so that they can be used in expression.
+ //
+ if (gCFormPkg.HavePendingUnassigned()) {
+ gCFormPkg.DeclarePendingQuestion (
+ gCVfrVarDataTypeDB,
+ mCVfrDataStorage,
+ mCVfrQuestionDB,
+ &mFormsetGuid,
+ E->getLine()
+ );
+ }
+
+ //
// mCVfrQuestionDB.PrintAllQuestion();
//
CRT_END_OP (E);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2011-10-10 14:30:16
|
Revision: 2363
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2363&view=rev
Author: ydong10
Date: 2011-10-10 14:30:06 +0000 (Mon, 10 Oct 2011)
Log Message:
-----------
Refine check question id validation logic to avoid label conflict
Signed-off-by: ydong10
Reviewed-by: lgao4
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2011-10-10 08:20:54 UTC (rev 2362)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2011-10-10 14:30:06 UTC (rev 2363)
@@ -1061,12 +1061,8 @@
mRef2->FormId = FormId;
}
- EFI_VFR_RETURN_CODE SetQuestionId (IN EFI_QUESTION_ID QuestionId) {
- if (QuestionId == EFI_QUESTION_ID_INVALID) {
- return VFR_RETURN_UNDEFINED;
- }
+ VOID SetQuestionId (IN EFI_QUESTION_ID QuestionId) {
mRef2->QuestionId = QuestionId;
- return VFR_RETURN_SUCCESS;
}
};
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-10-10 08:20:54 UTC (rev 2362)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-10-10 14:30:06 UTC (rev 2363)
@@ -1682,8 +1682,13 @@
FormId "=" F3:Number "," << RefType = 2; FId = _STOFID(F3->getText()); >>
Question "="
(
- QN3:StringIdentifier "," << mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); >>
- | QN3:Number "," << QId = _STOQID(QN3->getText()); >>
+ QN3:StringIdentifier "," <<
+ mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask);
+ if (QId == EFI_QUESTION_ID_INVALID) {
+ _PCATCH(VFR_RETURN_UNDEFINED, QN3);
+ }
+ >>
+ | QN4:Number "," << QId = _STOQID(QN4->getText()); >>
)
)
|
@@ -1730,7 +1735,7 @@
QHObj = R2Obj;
R2Obj->SetLineNo(G->getLine());
R2Obj->SetFormId (FId);
- _PCATCH(R2Obj->SetQuestionId (QId), QN3);
+ R2Obj->SetQuestionId (QId);
break;
}
case 1:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2011-10-27 01:35:32
|
Revision: 2382
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2382&view=rev
Author: ydong10
Date: 2011-10-27 01:35:26 +0000 (Thu, 27 Oct 2011)
Log Message:
-----------
Patch for:
1. Enable stringval opcode
2. Numeric doesn't support BOOLEAN data type, now enable BOOLEAN type has the same data size to UINT8.
Signed-off-by: ydong10
Reviewed-by: lgao4
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2011-10-26 06:01:39 UTC (rev 2381)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2011-10-27 01:35:26 UTC (rev 2382)
@@ -662,6 +662,13 @@
CNObj.SetQuestionId (QId);
CNObj.SetVarStoreInfo (&Info);
+ //
+ // Numeric doesn't support BOOLEAN data type.
+ // BOOLEAN type has the same data size to UINT8.
+ //
+ if (Info.mVarType == EFI_IFR_TYPE_BOOLEAN) {
+ Info.mVarType = EFI_IFR_TYPE_NUM_SIZE_8;
+ }
CNObj.SetFlags (0, Info.mVarType);
//
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-10-26 06:01:39 UTC (rev 2381)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-10-27 01:35:26 UTC (rev 2382)
@@ -3629,6 +3629,7 @@
| question2refExp[$RootLevel, $ExpOpCount]
| stringref2Exp[$RootLevel, $ExpOpCount]
| toboolExp[$RootLevel, $ExpOpCount]
+ | tostringExp[$RootLevel, $ExpOpCount]
| unintExp[$RootLevel, $ExpOpCount]
| toupperExp[$RootLevel, $ExpOpCount]
| tolwerExp[$RootLevel, $ExpOpCount]
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2011-11-22 06:18:53
|
Revision: 2423
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2423&view=rev
Author: ydong10
Date: 2011-11-22 06:18:47 +0000 (Tue, 22 Nov 2011)
Log Message:
-----------
Patch includes:
1.Refine support for Question_Ref3 opcode.
2.Add set default value logic.
Signed-off-by: ydong10
Reviewed-by: lgao4
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2011-11-21 08:41:08 UTC (rev 2422)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2011-11-22 06:18:47 UTC (rev 2423)
@@ -670,6 +670,25 @@
Info.mVarType = EFI_IFR_TYPE_NUM_SIZE_8;
}
CNObj.SetFlags (0, Info.mVarType);
+ //
+ // Use maximum value not to limit the vaild value for the undefined question.
+ //
+ switch (Info.mVarType) {
+ case EFI_IFR_TYPE_NUM_SIZE_64:
+ CNObj.SetMinMaxStepData ((UINT64) 0, (UINT64) -1 , (UINT64) 0);
+ break;
+ case EFI_IFR_TYPE_NUM_SIZE_32:
+ CNObj.SetMinMaxStepData ((UINT32) 0, (UINT32) -1 , (UINT32) 0);
+ break;
+ case EFI_IFR_TYPE_NUM_SIZE_16:
+ CNObj.SetMinMaxStepData ((UINT16) 0, (UINT16) -1 , (UINT16) 0);
+ break;
+ case EFI_IFR_TYPE_NUM_SIZE_8:
+ CNObj.SetMinMaxStepData ((UINT8) 0, (UINT8) -1 , (UINT8) 0);
+ break;
+ default:
+ break;
+ }
//
// For undefined Efi VarStore type question
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-11-21 08:41:08 UTC (rev 2422)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2011-11-22 06:18:47 UTC (rev 2423)
@@ -3218,7 +3218,7 @@
| ideqvalExp[$RootLevel, $ExpOpCount]
| ideqidExp[$RootLevel, $ExpOpCount]
| ideqvallistExp[$RootLevel, $ExpOpCount]
- | questionref13Exp[$RootLevel, $ExpOpCount]
+ | questionref1Exp[$RootLevel, $ExpOpCount]
| rulerefExp[$RootLevel, $ExpOpCount]
| stringref1Exp[$RootLevel, $ExpOpCount]
| pushthisExp[$RootLevel, $ExpOpCount]
@@ -3453,50 +3453,26 @@
>>
;
-questionref13Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
+questionref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
<<
- UINT8 Type = 0x1;
- EFI_STRING_ID DevPath = EFI_STRING_ID_INVALID;
- EFI_GUID Guid = {0,};
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;
UINT32 BitMask;
CHAR8 *QName = NULL;
UINT32 LineNo = 0;
>>
L:QuestionRef
- (
- (
- << Type = 0x3; >>
- {
- Path "=" "STRING_TOKEN" "\(" S:Number "\)" << Type = 0x4; DevPath = _STOSID(S->getText()); >>
- }
- {
- Uuid "=" guidDefinition[Guid] << Type = 0x5; >>
- }
- )
- |
- (
- "\("
- (
+ "\("
+ (
QN:StringIdentifier <<
QName = QN->getText();
- LineNo = QN->getLine();
+ LineNo = QN->getLine();
mCVfrQuestionDB.GetQuestionId (QN->getText(), NULL, QId, BitMask);
>>
| ID:Number << QId = _STOQID(ID->getText()); >>
)
- "\)"
- )
- )
+ "\)"
<<
- switch (Type) {
- case 0x1: {CIfrQuestionRef1 QR1Obj(L->getLine()); _SAVE_OPHDR_COND (QR1Obj, ($ExpOpCount == 0), L->getLine()); QR1Obj.SetQuestionId (QId, QName, LineNo); break;}
- case 0x3: {CIfrQuestionRef3 QR3Obj(L->getLine()); _SAVE_OPHDR_COND (QR3Obj, ($ExpOpCount == 0), L->getLine()); break;}
- case 0x4: {CIfrQuestionRef3_2 QR3_2Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_2Obj, ($ExpOpCount == 0), L->getLine()); QR3_2Obj.SetDevicePath (DevPath); break;}
- case 0x5: {CIfrQuestionRef3_3 QR3_3Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_3Obj, ($ExpOpCount == 0), L->getLine()); QR3_3Obj.SetDevicePath (DevPath); QR3_3Obj.SetGuid (&Guid); break;}
- }
- $ExpOpCount++;
- >>
+ { CIfrQuestionRef1 QR1Obj(L->getLine()); _SAVE_OPHDR_COND (QR1Obj, ($ExpOpCount == 0), L->getLine()); QR1Obj.SetQuestionId (QId, QName, LineNo); } $ExpOpCount++; >>
;
rulerefExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
@@ -3628,7 +3604,7 @@
vfrExpressionUnaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
lengthExp[$RootLevel, $ExpOpCount]
| bitwisenotExp[$RootLevel, $ExpOpCount]
- | question2refExp[$RootLevel, $ExpOpCount]
+ | question23refExp[$RootLevel, $ExpOpCount]
| stringref2Exp[$RootLevel, $ExpOpCount]
| toboolExp[$RootLevel, $ExpOpCount]
| tostringExp[$RootLevel, $ExpOpCount]
@@ -3650,10 +3626,30 @@
<< { CIfrBitWiseNot BWNObj(L->getLine()); $ExpOpCount++; } >>
;
-question2refExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
+question23refExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
+ <<
+ UINT8 Type = 0x1;
+ EFI_STRING_ID DevPath = EFI_STRING_ID_INVALID;
+ EFI_GUID Guid = {0,};
+ >>
L:QuestionRefVal
- "\(" vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] "\)"
- << { CIfrQuestionRef2 QR2Obj(L->getLine()); $ExpOpCount++; } >>
+ "\("
+ {
+ DevicePath "=" "STRING_TOKEN" "\(" S:Number "\)" "," << Type = 0x2; DevPath = _STOSID(S->getText()); >>
+ }
+ {
+ Uuid "=" guidDefinition[Guid] "," << Type = 0x3; >>
+ }
+ vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount]
+ "\)"
+ <<
+ switch (Type) {
+ case 0x1: {CIfrQuestionRef2 QR2Obj(L->getLine()); _SAVE_OPHDR_COND (QR2Obj, ($ExpOpCount == 0), L->getLine()); break;}
+ case 0x2: {CIfrQuestionRef3_2 QR3_2Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_2Obj, ($ExpOpCount == 0), L->getLine()); QR3_2Obj.SetDevicePath (DevPath); break;}
+ case 0x3: {CIfrQuestionRef3_3 QR3_3Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_3Obj, ($ExpOpCount == 0), L->getLine()); QR3_3Obj.SetDevicePath (DevPath); QR3_3Obj.SetGuid (&Guid); break;}
+ }
+ $ExpOpCount++;
+ >>
;
stringref2Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2012-01-16 05:48:26
|
Revision: 2480
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2480&view=rev
Author: ydong10
Date: 2012-01-16 05:48:20 +0000 (Mon, 16 Jan 2012)
Log Message:
-----------
Enhance code logic when get string info base on the input StringId.
Signed-off-by:ydong10
Reviewed-by: mdkinney
Reviewed-by: lgao4
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2012-01-13 05:52:23 UTC (rev 2479)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2012-01-16 05:48:20 UTC (rev 2480)
@@ -2,7 +2,7 @@
Vfr common library functions.
-Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2012, 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
@@ -3067,6 +3067,83 @@
mStringFileName[FileLen - 1] = '\0';
}
+
+/**
+ Returns TRUE or FALSE whether SupportedLanguages contains the best matching language
+ from a set of supported languages.
+
+ @param[in] SupportedLanguages A pointer to a Null-terminated ASCII string that
+ contains a set of language codes.
+ @param[in] Language A variable that contains pointers to Null-terminated
+ ASCII strings that contain one language codes.
+
+ @retval FALSE The best matching language could not be found in SupportedLanguages.
+ @retval TRUE The best matching language could be found in SupportedLanguages.
+
+**/
+BOOLEAN
+CVfrStringDB::GetBestLanguage (
+ IN CONST CHAR8 *SupportedLanguages,
+ IN CHAR8 *Language
+ )
+{
+ UINTN CompareLength;
+ UINTN LanguageLength;
+ CONST CHAR8 *Supported;
+
+ if (SupportedLanguages == NULL || Language == NULL){
+ return FALSE;
+ }
+
+ //
+ // Determine the length of the first RFC 4646 language code in Language
+ //
+ for (LanguageLength = 0; Language[LanguageLength] != 0 && Language[LanguageLength] != ';'; LanguageLength++);
+
+ //
+ // Trim back the length of Language used until it is empty
+ //
+ while (LanguageLength > 0) {
+ //
+ // Loop through all language codes in SupportedLanguages
+ //
+ for (Supported = SupportedLanguages; *Supported != '\0'; Supported += CompareLength) {
+ //
+ // Skip ';' characters in Supported
+ //
+ for (; *Supported != '\0' && *Supported == ';'; Supported++);
+ //
+ // Determine the length of the next language code in Supported
+ //
+ for (CompareLength = 0; Supported[CompareLength] != 0 && Supported[CompareLength] != ';'; CompareLength++);
+ //
+ // If Language is longer than the Supported, then skip to the next language
+ //
+ if (LanguageLength > CompareLength) {
+ continue;
+ }
+
+ //
+ // See if the first LanguageLength characters in Supported match Language
+ //
+ if (strncmp (Supported, Language, LanguageLength) == 0) {
+ return TRUE;
+ }
+ }
+
+ //
+ // Trim Language from the right to the next '-' character
+ //
+ for (LanguageLength--; LanguageLength > 0 && Language[LanguageLength] != '-'; LanguageLength--);
+ }
+
+ //
+ // No matches were found
+ //
+ return FALSE;
+}
+
+
CHAR8 *
CVfrStringDB::GetVarStoreNameFormStringId (
IN EFI_STRING_ID StringId
@@ -3122,17 +3199,18 @@
}
//
- // Search the language, only search the "en-US".
+ // Search the language, get best language base on RFC 4647 matching algorithm.
//
Current = StringPtr;
- while (strcmp (PkgHeader->Language, "en-US") != 0) {
+ while (!GetBestLanguage ("en", PkgHeader->Language)) {
Current += PkgHeader->Header.Length;
PkgHeader = (EFI_HII_STRING_PACKAGE_HDR *) Current;
//
- // If can't find "en-US" string package, just return the first string package.
+ // If can't find string package base on language, just return the first string package.
//
if (Current - StringPtr >= Length) {
Current = StringPtr;
+ PkgHeader = (EFI_HII_STRING_PACKAGE_HDR *) StringPtr;
break;
}
}
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h 2012-01-13 05:52:23 UTC (rev 2479)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h 2012-01-16 05:48:20 UTC (rev 2480)
@@ -2,7 +2,7 @@
Vfr common library functions.
-Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2012, 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
@@ -438,6 +438,11 @@
UINT32 GetUnicodeStringTextSize (
IN UINT8 *StringSrc
);
+
+ BOOLEAN GetBestLanguage (
+ IN CONST CHAR8 *SupportedLanguages,
+ IN CHAR8 *Language
+ );
public:
CVfrStringDB ();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2012-09-27 11:28:58
|
Revision: 2553
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2553&view=rev
Author: ydong10
Date: 2012-09-27 11:28:48 +0000 (Thu, 27 Sep 2012)
Log Message:
-----------
Refine the logic to auto generate opcode for not defined variable at the end of the form set instead of at the end of the form.
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
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp 2012-09-27 10:54:08 UTC (rev 2552)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp 2012-09-27 11:28:48 UTC (rev 2553)
@@ -2,7 +2,7 @@
VfrCompiler main class and main function.
-Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2012, 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
@@ -554,11 +554,50 @@
}
VOID
+CVfrCompiler::UpdateInfoForDynamicOpcode (
+ VOID
+ )
+{
+ SIfrRecord *pRecord;
+
+ if (!gNeedAdjustOpcode) {
+ return;
+ }
+
+ //
+ // Base on the original offset info to update the record list.
+ //
+ if (!gCIfrRecordInfoDB.IfrAdjustDynamicOpcodeInRecords()) {
+ DebugError (NULL, 0, 1001, "Error parsing vfr file", "Can find the offset in the record.");
+ }
+
+ //
+ // Base on the opcode binary length to recalculate the offset for each opcode.
+ //
+ gCIfrRecordInfoDB.IfrAdjustOffsetForRecord();
+
+ //
+ // Base on the offset to find the binary address.
+ //
+ pRecord = gCIfrRecordInfoDB.GetRecordInfoFromOffset(gAdjustOpcodeOffset);
+ while (pRecord != NULL) {
+ pRecord->mIfrBinBuf = gCFormPkg.GetBufAddrBaseOnOffset(pRecord->mOffset);
+ if (pRecord->mIfrBinBuf == NULL) {
+ DebugError (NULL, 0, 0001, "Error parsing vfr file", " 0x%X. offset not allocated.", pRecord->mOffset);
+ }
+ pRecord = pRecord->mNext;
+ }
+}
+
+VOID
CVfrCompiler::AdjustBin (
VOID
)
{
EFI_VFR_RETURN_CODE Status;
+
+ UpdateInfoForDynamicOpcode ();
+
//
// Check Binary Code consistent between Form and IfrRecord
//
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h 2012-09-27 10:54:08 UTC (rev 2552)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h 2012-09-27 11:28:48 UTC (rev 2553)
@@ -87,6 +87,7 @@
VOID SET_RUN_STATUS (IN COMPILER_RUN_STATUS);
BOOLEAN IS_RUN_STATUS (IN COMPILER_RUN_STATUS);
+ VOID UpdateInfoForDynamicOpcode (VOID);
public:
COMPILER_RUN_STATUS RunStatus (VOID) {
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2012-09-27 10:54:08 UTC (rev 2552)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2012-09-27 11:28:48 UTC (rev 2553)
@@ -152,12 +152,39 @@
PendingAssignList = NULL;
}
+SBufferNode *
+CFormPkg::CreateNewNode (
+ VOID
+ )
+{
+ SBufferNode *Node;
+
+ Node = new SBufferNode;
+ if (Node == NULL) {
+ return NULL;
+ }
+
+ Node->mBufferStart = new CHAR8[mBufferSize];
+ if (Node->mBufferStart == NULL) {
+ delete Node;
+ return NULL;
+ } else {
+ memset (Node->mBufferStart, 0, mBufferSize);
+ Node->mBufferEnd = Node->mBufferStart + mBufferSize;
+ Node->mBufferFree = Node->mBufferStart;
+ Node->mNext = NULL;
+ }
+
+ return Node;
+}
+
CHAR8 *
CFormPkg::IfrBinBufferGet (
IN UINT32 Len
)
{
- CHAR8 *BinBuffer = NULL;
+ CHAR8 *BinBuffer = NULL;
+ SBufferNode *Node = NULL;
if ((Len == 0) || (Len > mBufferSize)) {
return NULL;
@@ -167,24 +194,11 @@
BinBuffer = mCurrBufferNode->mBufferFree;
mCurrBufferNode->mBufferFree += Len;
} else {
- SBufferNode *Node;
-
- Node = new SBufferNode;
+ Node = CreateNewNode ();
if (Node == NULL) {
return NULL;
}
- Node->mBufferStart = new CHAR8[mBufferSize];
- if (Node->mBufferStart == NULL) {
- delete Node;
- return NULL;
- } else {
- memset (Node->mBufferStart, 0, mBufferSize);
- Node->mBufferEnd = Node->mBufferStart + mBufferSize;
- Node->mBufferFree = Node->mBufferStart;
- Node->mNext = NULL;
- }
-
if (mBufferNodeQueueTail == NULL) {
mBufferNodeQueueHead = mBufferNodeQueueTail = Node;
} else {
@@ -245,7 +259,7 @@
}
if (mReadBufferNode == NULL) {
- return 0;
+ return 0;
}
for (Index = 0; Index < Size; Index++) {
@@ -256,7 +270,7 @@
return Index;
} else {
mReadBufferOffset = 0;
- Buffer[Index] = mReadBufferNode->mBufferStart[mReadBufferOffset++];
+ Index --;
}
}
}
@@ -402,6 +416,9 @@
}
#define BYTES_PRE_LINE 0x10
+UINT32 gAdjustOpcodeOffset = 0;
+BOOLEAN gNeedAdjustOpcode = FALSE;
+UINT32 gAdjustOpcodeLen = 0;
EFI_VFR_RETURN_CODE
CFormPkg::GenCFile (
@@ -548,13 +565,236 @@
}
}
+SBufferNode *
+CFormPkg::GetBinBufferNodeForAddr (
+ IN CHAR8 *BinBuffAddr
+ )
+{
+ SBufferNode *TmpNode;
+
+ TmpNode = mBufferNodeQueueHead;
+
+ while (TmpNode != NULL) {
+ if (TmpNode->mBufferStart <= BinBuffAddr && TmpNode->mBufferFree >= BinBuffAddr) {
+ return TmpNode;
+ }
+
+ TmpNode = TmpNode->mNext;
+ }
+
+ return NULL;
+}
+
+SBufferNode *
+CFormPkg::GetNodeBefore(
+ IN SBufferNode *CurrentNode
+ )
+{
+ SBufferNode *FirstNode = mBufferNodeQueueHead;
+ SBufferNode *LastNode = mBufferNodeQueueHead;
+
+ while (FirstNode != NULL) {
+ if (FirstNode == CurrentNode) {
+ break;
+ }
+
+ LastNode = FirstNode;
+ FirstNode = FirstNode->mNext;
+ }
+
+ if (FirstNode == NULL) {
+ LastNode = NULL;
+ }
+
+ return LastNode;
+}
+
EFI_VFR_RETURN_CODE
+CFormPkg::InsertNodeBefore(
+ IN SBufferNode *CurrentNode,
+ IN SBufferNode *NewNode
+ )
+{
+ SBufferNode *LastNode = GetNodeBefore (CurrentNode);
+
+ if (LastNode == NULL) {
+ return VFR_RETURN_MISMATCHED;
+ }
+
+ NewNode->mNext = LastNode->mNext;
+ LastNode->mNext = NewNode;
+
+ return VFR_RETURN_SUCCESS;
+}
+
+CHAR8 *
+CFormPkg::GetBufAddrBaseOnOffset (
+ IN UINT32 Offset
+ )
+{
+ SBufferNode *TmpNode;
+ UINT32 TotalBufLen;
+ UINT32 CurrentBufLen;
+
+ TotalBufLen = 0;
+
+ for (TmpNode = mBufferNodeQueueHead; TmpNode != NULL; TmpNode = TmpNode->mNext) {
+ CurrentBufLen = TmpNode->mBufferFree - TmpNode->mBufferStart;
+ if (Offset >= TotalBufLen && Offset < TotalBufLen + CurrentBufLen) {
+ return TmpNode->mBufferStart + (Offset - TotalBufLen);
+ }
+
+ TotalBufLen += CurrentBufLen;
+ }
+
+ return NULL;
+}
+
+EFI_VFR_RETURN_CODE
+CFormPkg::AdjustDynamicInsertOpcode (
+ IN CHAR8 *LastFormEndAddr,
+ IN CHAR8 *InsertOpcodeAddr
+ )
+{
+ SBufferNode *LastFormEndNode;
+ SBufferNode *InsertOpcodeNode;
+ SBufferNode *NewRestoreNodeBegin;
+ SBufferNode *NewRestoreNodeEnd;
+ SBufferNode *NewLastEndNode;
+ SBufferNode *TmpNode;
+ UINT32 NeedRestoreCodeLen;
+
+ NewRestoreNodeEnd = NULL;
+
+ LastFormEndNode = GetBinBufferNodeForAddr(LastFormEndAddr);
+ InsertOpcodeNode = GetBinBufferNodeForAddr(InsertOpcodeAddr);
+
+ if (LastFormEndNode == InsertOpcodeNode) {
+ //
+ // Create New Node to save the restore opcode.
+ //
+ NeedRestoreCodeLen = InsertOpcodeAddr - LastFormEndAddr;
+ gAdjustOpcodeLen = NeedRestoreCodeLen;
+ NewRestoreNodeBegin = CreateNewNode ();
+ if (NewRestoreNodeBegin == NULL) {
+ return VFR_RETURN_OUT_FOR_RESOURCES;
+ }
+ memcpy (NewRestoreNodeBegin->mBufferFree, LastFormEndAddr, NeedRestoreCodeLen);
+ NewRestoreNodeBegin->mBufferFree += NeedRestoreCodeLen;
+
+ //
+ // Override the restore buffer data.
+ //
+ memcpy (LastFormEndAddr, InsertOpcodeAddr, InsertOpcodeNode->mBufferFree - InsertOpcodeAddr);
+ InsertOpcodeNode->mBufferFree -= NeedRestoreCodeLen;
+ memset (InsertOpcodeNode->mBufferFree, 0, NeedRestoreCodeLen);
+ } else {
+ //
+ // Create New Node to save the restore opcode.
+ //
+ NeedRestoreCodeLen = LastFormEndNode->mBufferFree - LastFormEndAddr;
+ gAdjustOpcodeLen = NeedRestoreCodeLen;
+ NewRestoreNodeBegin = CreateNewNode ();
+ if (NewRestoreNodeBegin == NULL) {
+ return VFR_RETURN_OUT_FOR_RESOURCES;
+ }
+ memcpy (NewRestoreNodeBegin->mBufferFree, LastFormEndAddr, NeedRestoreCodeLen);
+ NewRestoreNodeBegin->mBufferFree += NeedRestoreCodeLen;
+ //
+ // Override the restore buffer data.
+ //
+ LastFormEndNode->mBufferFree -= NeedRestoreCodeLen;
+ //
+ // Link the restore data to new node.
+ //
+ NewRestoreNodeBegin->mNext = LastFormEndNode->mNext;
+
+ //
+ // Count the Adjust opcode len.
+ //
+ TmpNode = LastFormEndNode->mNext;
+ while (TmpNode != InsertOpcodeNode) {
+ gAdjustOpcodeLen += TmpNode->mBufferFree - TmpNode->mBufferStart;
+ TmpNode = TmpNode->mNext;
+ }
+
+ //
+ // Create New Node to save the last node of restore opcode.
+ //
+ NeedRestoreCodeLen = InsertOpcodeAddr - InsertOpcodeNode->mBufferStart;
+ gAdjustOpcodeLen += NeedRestoreCodeLen;
+ if (NeedRestoreCodeLen > 0) {
+ NewRestoreNodeEnd = CreateNewNode ();
+ if (NewRestoreNodeEnd == NULL) {
+ return VFR_RETURN_OUT_FOR_RESOURCES;
+ }
+ memcpy (NewRestoreNodeEnd->mBufferFree, InsertOpcodeNode->mBufferStart, NeedRestoreCodeLen);
+ NewRestoreNodeEnd->mBufferFree += NeedRestoreCodeLen;
+ //
+ // Override the restore buffer data.
+ //
+ memcpy (InsertOpcodeNode->mBufferStart, InsertOpcodeAddr, InsertOpcodeNode->mBufferFree - InsertOpcodeAddr);
+ InsertOpcodeNode->mBufferFree -= InsertOpcodeAddr - InsertOpcodeNode->mBufferStart;
+
+ //
+ // Insert the last restore data node.
+ //
+ TmpNode = GetNodeBefore (InsertOpcodeNode);
+ if (TmpNode == LastFormEndNode) {
+ NewRestoreNodeBegin->mNext = NewRestoreNodeEnd;
+ } else {
+ TmpNode->mNext = NewRestoreNodeEnd;
+ }
+ //
+ // Connect the dynamic opcode node to the node before last form end node.
+ //
+ LastFormEndNode->mNext = InsertOpcodeNode;
+ }
+ }
+
+ if (mBufferNodeQueueTail->mBufferFree - mBufferNodeQueueTail->mBufferStart > 2) {
+ //
+ // End form set opcode all in the mBufferNodeQueueTail node.
+ //
+ NewLastEndNode = CreateNewNode ();
+ if (NewLastEndNode == NULL) {
+ return VFR_RETURN_OUT_FOR_RESOURCES;
+ }
+ NewLastEndNode->mBufferStart[0] = 0x29;
+ NewLastEndNode->mBufferStart[1] = 0x02;
+ NewLastEndNode->mBufferFree += 2;
+
+ mBufferNodeQueueTail->mBufferFree -= 2;
+
+ mBufferNodeQueueTail->mNext = NewRestoreNodeBegin;
+ if (NewRestoreNodeEnd != NULL) {
+ NewRestoreNodeEnd->mNext = NewLastEndNode;
+ } else {
+ NewRestoreNodeBegin->mNext = NewLastEndNode;
+ }
+
+ mBufferNodeQueueTail = NewLastEndNode;
+ } else if (mBufferNodeQueueTail->mBufferFree - mBufferNodeQueueTail->mBufferStart == 2) {
+ TmpNode = GetNodeBefore(mBufferNodeQueueTail);
+ TmpNode->mNext = NewRestoreNodeBegin;
+ if (NewRestoreNodeEnd != NULL) {
+ NewRestoreNodeEnd->mNext = mBufferNodeQueueTail;
+ } else {
+ NewRestoreNodeBegin->mNext = mBufferNodeQueueTail;
+ }
+ }
+
+ return VFR_RETURN_SUCCESS;
+}
+
+EFI_VFR_RETURN_CODE
CFormPkg::DeclarePendingQuestion (
IN CVfrVarDataTypeDB &lCVfrVarDataTypeDB,
IN CVfrDataStorage &lCVfrDataStorage,
IN CVfrQuestionDB &lCVfrQuestionDB,
IN EFI_GUID *LocalFormSetGuid,
- IN UINT32 LineNo
+ IN UINT32 LineNo,
+ OUT CHAR8 **InsertOpcodeAddr
)
{
SPendingAssign *pNode;
@@ -572,6 +812,7 @@
// DisableIf
CIfrDisableIf DIObj;
DIObj.SetLineNo (LineNo);
+ *InsertOpcodeAddr = DIObj.GetObjBinAddr ();
//TrueOpcode
CIfrTrue TObj (LineNo);
@@ -983,6 +1224,82 @@
return QuestionHead->QuestionId;
}
+SIfrRecord *
+CIfrRecordInfoDB::GetRecordInfoFromOffset (
+ IN UINT32 Offset
+ )
+{
+ SIfrRecord *pNode = NULL;
+
+ for (pNode = mIfrRecordListHead; pNode != NULL; pNode = pNode->mNext) {
+ if (pNode->mOffset == Offset) {
+ return pNode;
+ }
+ }
+
+ return pNode;
+}
+
+BOOLEAN
+CIfrRecordInfoDB::IfrAdjustDynamicOpcodeInRecords (
+ VOID
+ )
+{
+ UINT32 OpcodeOffset;
+ SIfrRecord *pNode, *pPreNode;
+ SIfrRecord *pStartNode, *pNodeBeforeStart;
+ SIfrRecord *pEndNode;
+
+ pStartNode = NULL;
+ pEndNode = NULL;
+ OpcodeOffset = 0;
+
+ //
+ // Base on the offset info to get the node.
+ //
+ for (pNode = mIfrRecordListHead; pNode->mNext != NULL; pPreNode = pNode,pNode = pNode->mNext) {
+ if (OpcodeOffset == gAdjustOpcodeOffset) {
+ pStartNode = pNode;
+ pNodeBeforeStart = pPreNode;
+ } else if (OpcodeOffset == gAdjustOpcodeOffset + gAdjustOpcodeLen) {
+ pEndNode = pPreNode;
+ }
+
+ OpcodeOffset += pNode->mBinBufLen;
+ }
+
+ //
+ // Check the value.
+ //
+ if (pEndNode == NULL || pStartNode == NULL) {
+ return FALSE;
+ }
+
+ //
+ // Adjust the node. pPreNode save the Node before mIfrRecordListTail
+ //
+ pNodeBeforeStart->mNext = pEndNode->mNext;
+ pPreNode->mNext = pStartNode;
+ pEndNode->mNext = mIfrRecordListTail;
+
+ return TRUE;
+}
+
+VOID
+CIfrRecordInfoDB::IfrAdjustOffsetForRecord (
+ VOID
+ )
+{
+ UINT32 OpcodeOffset;
+ SIfrRecord *pNode;
+
+ OpcodeOffset = 0;
+ for (pNode = mIfrRecordListHead; pNode != NULL; pNode = pNode->mNext) {
+ pNode->mOffset = OpcodeOffset;
+ OpcodeOffset += pNode->mBinBufLen;
+ }
+}
+
EFI_VFR_RETURN_CODE
CIfrRecordInfoDB::IfrRecordAdjust (
VOID
@@ -1195,11 +1512,7 @@
// Update Ifr Opcode Offset
//
if (Status == VFR_RETURN_SUCCESS) {
- OpcodeOffset = 0;
- for (pNode = mIfrRecordListHead; pNode != NULL; pNode = pNode->mNext) {
- pNode->mOffset = OpcodeOffset;
- OpcodeOffset += pNode->mBinBufLen;
- }
+ IfrAdjustOffsetForRecord ();
}
return Status;
}
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2012-09-27 10:54:08 UTC (rev 2552)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2012-09-27 11:28:48 UTC (rev 2553)
@@ -115,6 +115,10 @@
VOID _WRITE_PKG_LINE (IN FILE *, IN UINT32 , IN CONST CHAR8 *, IN CHAR8 *, IN UINT32);
VOID _WRITE_PKG_END (IN FILE *, IN UINT32 , IN CONST CHAR8 *, IN CHAR8 *, IN UINT32);
+ SBufferNode * GetBinBufferNodeForAddr (IN CHAR8 *);
+ SBufferNode * CreateNewNode ();
+ SBufferNode * GetNodeBefore (IN SBufferNode *);
+ EFI_VFR_RETURN_CODE InsertNodeBefore (IN SBufferNode *, IN SBufferNode *);
private:
SPendingAssign *PendingAssignList;
@@ -145,12 +149,22 @@
IN CVfrDataStorage &lCVfrDataStorage,
IN CVfrQuestionDB &lCVfrQuestionDB,
IN EFI_GUID *LocalFormSetGuid,
- IN UINT32 LineNo
+ IN UINT32 LineNo,
+ OUT CHAR8 **InsertOpcodeAddr
);
+ EFI_VFR_RETURN_CODE AdjustDynamicInsertOpcode (
+ IN CHAR8 *LastFormEndAddr,
+ IN CHAR8 *InsertOpcodeAddr
+ );
+ CHAR8 * GetBufAddrBaseOnOffset (
+ IN UINT32 Offset
+ );
};
extern CFormPkg gCFormPkg;
extern CVfrStringDB gCVfrStringDB;
+extern UINT32 gAdjustOpcodeOffset;
+extern BOOLEAN gNeedAdjustOpcode;
struct SIfrRecord {
UINT32 mLineNo;
@@ -189,6 +203,10 @@
mSwitch = FALSE;
}
+ SIfrRecord * GetRecordInfoFromOffset (IN UINT32);
+ VOID IfrAdjustOffsetForRecord (VOID);
+ BOOLEAN IfrAdjustDynamicOpcodeInRecords (VOID);
+
UINT32 IfrRecordRegister (IN UINT32, IN CHAR8 *, IN UINT8, IN UINT32);
VOID IfrRecordInfoUpdate (IN UINT32, IN UINT32, IN CHAR8*, IN UINT8, IN UINT32);
VOID IfrRecordOutput (IN FILE *, IN UINT32 LineNo);
@@ -227,6 +245,10 @@
return mObjBinBuf;
}
+ inline UINT32 GetObjBinOffset (VOID) {
+ return mPkgOffset;
+ }
+
inline UINT8 GetObjBinLen (VOID) {
return mObjBinLen;
}
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2012-09-27 10:54:08 UTC (rev 2552)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2012-09-27 11:28:48 UTC (rev 2553)
@@ -494,6 +494,7 @@
UINT8 ClassGuidNum = 0;
CIfrFormSet *FSObj = NULL;
UINT16 C, SC;
+ CHAR8* InsertOpcodeAddr = NULL;
>>
L:FormSet
Uuid "=" guidDefinition[Guid] ","
@@ -585,7 +586,34 @@
//
_DeclareDefaultFrameworkVarStore (GET_LINENO(E));
}
- CRT_END_OP (E); if (FSObj != NULL) delete FSObj;
+
+ //
+ // Declare undefined Question so that they can be used in expression.
+ //
+ if (gCFormPkg.HavePendingUnassigned()) {
+ gCFormPkg.DeclarePendingQuestion (
+ gCVfrVarDataTypeDB,
+ mCVfrDataStorage,
+ mCVfrQuestionDB,
+ &mFormsetGuid,
+ E->getLine(),
+ &InsertOpcodeAddr
+ );
+ gNeedAdjustOpcode = TRUE;
+ }
+
+ CRT_END_OP (E);
+
+ if (gNeedAdjustOpcode) {
+ gCFormPkg.AdjustDynamicInsertOpcode (
+ mLastFormEndAddr,
+ InsertOpcodeAddr
+ );
+ }
+
+ if (FSObj != NULL) {
+ delete FSObj;
+ }
>>
";"
;
@@ -1389,23 +1417,7 @@
LObj3.SetNumber (0xffff); //add end label for UEFI, label number hardcode 0xffff
}
- //
- // Declare undefined Question so that they can be used in expression.
- //
- if (gCFormPkg.HavePendingUnassigned()) {
- gCFormPkg.DeclarePendingQuestion (
- gCVfrVarDataTypeDB,
- mCVfrDataStorage,
- mCVfrQuestionDB,
- &mFormsetGuid,
- E->getLine()
- );
- }
-
- //
- // mCVfrQuestionDB.PrintAllQuestion();
- //
- CRT_END_OP (E);
+ {CIfrEnd EObj; EObj.SetLineNo (E->getLine()); mLastFormEndAddr = EObj.GetObjBinAddr (); gAdjustOpcodeOffset = EObj.GetObjBinOffset ();}
>>
";"
;
@@ -3904,6 +3916,7 @@
EFI_VARSTORE_INFO mCurrQestVarInfo;
EFI_GUID *mOverrideClassGuid;
+ CHAR8* mLastFormEndAddr;
//
// For framework vfr compatibility
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2012-12-17 03:08:29
|
Revision: 2564
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2564&view=rev
Author: ydong10
Date: 2012-12-17 03:08:20 +0000 (Mon, 17 Dec 2012)
Log Message:
-----------
Enhance to check for the return status of the function.
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/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp 2012-11-02 05:39:20 UTC (rev 2563)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp 2012-12-17 03:08:20 UTC (rev 2564)
@@ -596,6 +596,10 @@
{
EFI_VFR_RETURN_CODE Status;
+ if (!IS_RUN_STATUS(STATUS_COMPILEED)) {
+ return;
+ }
+
UpdateInfoForDynamicOpcode ();
//
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2012-11-02 05:39:20 UTC (rev 2563)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2012-12-17 03:08:20 UTC (rev 2564)
@@ -591,7 +591,7 @@
// Declare undefined Question so that they can be used in expression.
//
if (gCFormPkg.HavePendingUnassigned()) {
- gCFormPkg.DeclarePendingQuestion (
+ mParserStatus += gCFormPkg.DeclarePendingQuestion (
gCVfrVarDataTypeDB,
mCVfrDataStorage,
mCVfrQuestionDB,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2012-12-17 04:48:24
|
Revision: 2565
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2565&view=rev
Author: ydong10
Date: 2012-12-17 04:48:18 +0000 (Mon, 17 Dec 2012)
Log Message:
-----------
For default opcode, generate binary data base on the input type info.
Signed-off-by: Eric Dong <eri...@in...>
Reviewed-by: Liming Gao <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2012-12-17 03:08:20 UTC (rev 2564)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2012-12-17 04:48:18 UTC (rev 2565)
@@ -922,14 +922,15 @@
public:
CIfrDefault (
+ IN UINT8 Size,
IN UINT16 DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD,
IN UINT8 Type = EFI_IFR_TYPE_OTHER,
IN EFI_IFR_TYPE_VALUE Value = gZeroEfiIfrTypeValue
- ) : CIfrObj (EFI_IFR_DEFAULT_OP, (CHAR8 **)&mDefault),
- CIfrOpHeader (EFI_IFR_DEFAULT_OP, &mDefault->Header) {
+ ) : CIfrObj (EFI_IFR_DEFAULT_OP, (CHAR8 **)&mDefault, Size),
+ CIfrOpHeader (EFI_IFR_DEFAULT_OP, &mDefault->Header, Size) {
mDefault->Type = Type;
- mDefault->Value = Value;
mDefault->DefaultId = DefaultId;
+ memcpy (&(mDefault->Value), &Value, Size - OFFSET_OF (EFI_IFR_DEFAULT, Value));
}
VOID SetDefaultId (IN UINT16 DefaultId) {
@@ -941,7 +942,7 @@
}
VOID SetValue (IN EFI_IFR_TYPE_VALUE Value) {
- mDefault->Value = Value;
+ memcpy (&mDefault->Value, &Value, mDefault->Header.Length - OFFSET_OF (EFI_IFR_DEFAULT, Value));
}
};
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2012-12-17 03:08:20 UTC (rev 2564)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2012-12-17 04:48:18 UTC (rev 2565)
@@ -1472,6 +1472,8 @@
EFI_DEFAULT_ID DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
CHAR8 *VarStoreName = NULL;
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
+ UINT8 Size = 0;
+ BOOLEAN TypeError = FALSE;
>>
D:Default
(
@@ -1484,7 +1486,53 @@
_PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");
}
}
- DObj = new CIfrDefault;
+ switch (_GET_CURRQEST_DATATYPE()) {
+ case EFI_IFR_TYPE_NUM_SIZE_8:
+ Size = 1;
+ break;
+
+ case EFI_IFR_TYPE_NUM_SIZE_16:
+ Size = 2;
+ break;
+
+ case EFI_IFR_TYPE_NUM_SIZE_32:
+ Size = 4;
+ break;
+
+ case EFI_IFR_TYPE_NUM_SIZE_64:
+ Size = 8;
+ break;
+
+ case EFI_IFR_TYPE_DATE:
+ Size = 4;
+ break;
+
+ case EFI_IFR_TYPE_TIME:
+ Size = 3;
+ break;
+
+ case EFI_IFR_TYPE_REF:
+ Size = 22;
+ break;
+
+ case EFI_IFR_TYPE_STRING:
+ Size = 2;
+ break;
+
+ case EFI_IFR_TYPE_BOOLEAN:
+ Size = 1;
+ break;
+
+ default:
+ TypeError = TRUE;
+ Size = sizeof (EFI_IFR_TYPE_VALUE);
+ break;
+ }
+ if (TypeError) {
+ _PCATCH (VFR_RETURN_FATAL_ERROR, D->getLine(), "Default data type error.");
+ }
+ Size += OFFSET_OF (EFI_IFR_DEFAULT, Value);
+ DObj = new CIfrDefault (Size);
DObj->SetLineNo(D->getLine());
DObj->SetType (_GET_CURRQEST_DATATYPE());
DObj->SetValue(Val);
@@ -1991,6 +2039,7 @@
CHAR8 *VarIdStr[3] = {NULL, };
CIfrDate DObj;
EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;
+ UINT8 Size = OFFSET_OF (EFI_IFR_DEFAULT, Value) + sizeof (EFI_HII_DATE);
>>
L:Date << DObj.SetLineNo(L->getLine()); >>
(
@@ -2027,7 +2076,7 @@
DObj.SetHelp (_STOSID(YH->getText()));
if (VarIdStr[0] != NULL) { delete VarIdStr[0]; } if (VarIdStr[1] != NULL) { delete VarIdStr[1]; } if (VarIdStr[2] != NULL) { delete VarIdStr[2]; }
>>
- << {CIfrDefault DefaultObj(EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_DATE, Val); DefaultObj.SetLineNo(L->getLine());} >>
+ << {CIfrDefault DefaultObj(Size, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_DATE, Val); DefaultObj.SetLineNo(L->getLine());} >>
)
( vfrStatementInconsistentIf )*
)
@@ -2452,6 +2501,7 @@
CHAR8 *VarIdStr[3] = {NULL, };
CIfrTime TObj;
EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;
+ UINT8 Size = OFFSET_OF (EFI_IFR_DEFAULT, Value) + sizeof (EFI_HII_TIME);
>>
L:Time << TObj.SetLineNo(L->getLine()); >>
(
@@ -2488,7 +2538,7 @@
TObj.SetHelp (_STOSID(HH->getText()));
if (VarIdStr[0] != NULL) { delete VarIdStr[0]; } if (VarIdStr[1] != NULL) { delete VarIdStr[1]; } if (VarIdStr[2] != NULL) { delete VarIdStr[2]; }
>>
- << {CIfrDefault DefaultObj(EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_TIME, Val); DefaultObj.SetLineNo(L->getLine());} >>
+ << {CIfrDefault DefaultObj(Size, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_TIME, Val); DefaultObj.SetLineNo(L->getLine());} >>
)
( vfrStatementInconsistentIf )*
)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2013-01-06 06:17:18
|
Revision: 2566
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2566&view=rev
Author: ydong10
Date: 2013-01-06 06:17:11 +0000 (Sun, 06 Jan 2013)
Log Message:
-----------
For option/oneof/numeric opcode, refine code to generate binary data base on the input flag/type info, not always generate the biggest format data.
Signed-off-by: Eric Dong <eri...@in...>
Reviewed-by: Liming Gao <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2012-12-17 04:48:18 UTC (rev 2565)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2013-01-06 06:17:11 UTC (rev 2566)
@@ -2,7 +2,7 @@
The definition of CFormPkg's member 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
@@ -433,6 +433,10 @@
return _FLAGS_ZERO (Flags) ? VFR_RETURN_SUCCESS : VFR_RETURN_FLAGS_UNSUPPORTED;
}
+
+ VOID UpdateCIfrQuestionHeader (IN EFI_IFR_QUESTION_HEADER *Header) {
+ mHeader = Header;
+ }
};
/*
@@ -583,6 +587,10 @@
BOOLEAN IsNumericOpcode () {
return IsNumeric;
}
+
+ VOID UpdateCIfrMinMaxStepData (IN MINMAXSTEP_DATA *MinMaxStepData) {
+ mMinMaxStepData = MinMaxStepData;
+ }
};
static CIfrQuestionHeader *gCurrentQuestion = NULL;
@@ -1300,7 +1308,7 @@
EFI_IFR_NUMERIC *mNumeric;
public:
- CIfrNumeric () : CIfrObj (EFI_IFR_NUMERIC_OP, (CHAR8 **)&mNumeric),
+ CIfrNumeric () : CIfrObj (EFI_IFR_NUMERIC_OP, (CHAR8 **)&mNumeric, sizeof (EFI_IFR_NUMERIC), TRUE),
CIfrOpHeader (EFI_IFR_NUMERIC_OP, &mNumeric->Header),
CIfrQuestionHeader (&mNumeric->Question),
CIfrMinMaxStepData (&mNumeric->data, TRUE) {
@@ -1314,6 +1322,27 @@
gCurrentMinMaxData = NULL;
}
+ VOID ShrinkBinSize (IN UINT16 Size) {
+ //
+ // Update the buffer size which is truly be used later.
+ //
+ ShrinkObjBin(Size);
+ DecLength(Size);
+
+ //
+ // Allocate buffer in gCFormPkg.
+ //
+ _EMIT_PENDING_OBJ();
+
+ //
+ // Update the buffer pointer used by other class.
+ //
+ mNumeric = (EFI_IFR_NUMERIC *) GetObjBinAddr();
+ UpdateHeader (&mNumeric->Header);
+ UpdateCIfrQuestionHeader(&mNumeric->Question);
+ UpdateCIfrMinMaxStepData(&mNumeric->data);
+ }
+
EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {
EFI_VFR_RETURN_CODE Ret;
@@ -1336,7 +1365,7 @@
EFI_IFR_ONE_OF *mOneOf;
public:
- CIfrOneOf () : CIfrObj (EFI_IFR_ONE_OF_OP, (CHAR8 **)&mOneOf),
+ CIfrOneOf () : CIfrObj (EFI_IFR_ONE_OF_OP, (CHAR8 **)&mOneOf, sizeof (EFI_IFR_ONE_OF), TRUE),
CIfrOpHeader (EFI_IFR_ONE_OF_OP, &mOneOf->Header),
CIfrQuestionHeader (&mOneOf->Question),
CIfrMinMaxStepData (&mOneOf->data) {
@@ -1365,6 +1394,27 @@
}
return VFR_RETURN_SUCCESS;
}
+
+ VOID ShrinkBinSize (IN UINT16 Size) {
+ //
+ // Update the buffer size which is truly be used later.
+ //
+ ShrinkObjBin(Size);
+ DecLength(Size);
+
+ //
+ // Allocate buffer in gCFormPkg.
+ //
+ _EMIT_PENDING_OBJ();
+
+ //
+ // Update the buffer pointer used by other class.
+ //
+ mOneOf = (EFI_IFR_ONE_OF *) GetObjBinAddr();
+ UpdateHeader (&mOneOf->Header);
+ UpdateCIfrQuestionHeader(&mOneOf->Question);
+ UpdateCIfrMinMaxStepData(&mOneOf->data);
+ }
};
class CIfrString : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader {
@@ -1627,12 +1677,12 @@
EFI_IFR_ONE_OF_OPTION *mOneOfOption;
public:
- CIfrOneOfOption () : CIfrObj (EFI_IFR_ONE_OF_OPTION_OP, (CHAR8 **)&mOneOfOption),
- CIfrOpHeader (EFI_IFR_ONE_OF_OPTION_OP, &mOneOfOption->Header) {
+ CIfrOneOfOption (UINT8 Size) : CIfrObj (EFI_IFR_ONE_OF_OPTION_OP, (CHAR8 **)&mOneOfOption, Size),
+ CIfrOpHeader (EFI_IFR_ONE_OF_OPTION_OP, &mOneOfOption->Header, Size) {
mOneOfOption->Flags = 0;
mOneOfOption->Option = EFI_STRING_ID_INVALID;
mOneOfOption->Type = EFI_IFR_TYPE_OTHER;
- memset (&mOneOfOption->Value, 0, sizeof (mOneOfOption->Value));
+ memset (&mOneOfOption->Value, 0, Size - OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value));
}
VOID SetOption (IN EFI_STRING_ID Option) {
@@ -1685,7 +1735,7 @@
}
VOID SetValue (IN EFI_IFR_TYPE_VALUE Value) {
- mOneOfOption->Value = Value;
+ memcpy (&mOneOfOption->Value, &Value, mOneOfOption->Header.Length - OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value));
}
UINT8 GetFlags (VOID) {
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2012-12-17 04:48:18 UTC (rev 2565)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-01-06 06:17:11 UTC (rev 2566)
@@ -1,5 +1,5 @@
/*++
-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
@@ -2204,8 +2204,9 @@
vfrStatementNumeric :
<<
CIfrNumeric NObj;
- UINT32 DataTypeSize;
- BOOLEAN IsSupported;
+ UINT32 DataTypeSize;
+ BOOLEAN IsSupported = TRUE;
+ UINT8 ShrinkSize = 0;
>>
L:Numeric << NObj.SetLineNo(L->getLine()); >>
vfrQuestionHeader[NObj] "," << // check data type
@@ -2219,23 +2220,27 @@
{
Key "=" KN:Number "," << AssignQuestionKey (NObj, KN); >>
}
- vfrSetMinMaxStep[NObj]
- vfrStatementQuestionOptionList
- E:EndNumeric <<
- IsSupported = FALSE;
+ vfrSetMinMaxStep[NObj] <<
switch (_GET_CURRQEST_DATATYPE()) {
- case EFI_IFR_TYPE_NUM_SIZE_8:
- case EFI_IFR_TYPE_NUM_SIZE_16:
- case EFI_IFR_TYPE_NUM_SIZE_32:
- case EFI_IFR_TYPE_NUM_SIZE_64:
- IsSupported = TRUE;
+ //
+ // Base on the type to know the actual used size,shrink the buffer
+ // size allocate before.
+ //
+ case EFI_IFR_TYPE_NUM_SIZE_8: ShrinkSize = 21;break;
+ case EFI_IFR_TYPE_NUM_SIZE_16:ShrinkSize = 18;break;
+ case EFI_IFR_TYPE_NUM_SIZE_32:ShrinkSize = 12;break;
+ case EFI_IFR_TYPE_NUM_SIZE_64:break;
+ default:
+ IsSupported = FALSE;
break;
- default:
- break;
}
+ NObj.ShrinkBinSize (ShrinkSize);
if (!IsSupported) {
_PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "Numeric question only support UINT8, UINT16, UINT32 and UINT64 data type.");
}
+ >>
+ vfrStatementQuestionOptionList
+ E:EndNumeric <<
CRT_END_OP (E);
>>
";"
@@ -2282,7 +2287,8 @@
<<
CIfrOneOf OObj;
UINT32 DataTypeSize;
- BOOLEAN IsSupported;
+ BOOLEAN IsSupported = TRUE;
+ UINT8 ShrinkSize = 0;
>>
L:OneOf << OObj.SetLineNo(L->getLine()); >>
vfrQuestionHeader[OObj] "," << //check data type
@@ -2296,22 +2302,27 @@
{
vfrSetMinMaxStep[OObj]
}
- vfrStatementQuestionOptionList
- E:EndOneOf <<
- IsSupported = FALSE;
+ <<
switch (_GET_CURRQEST_DATATYPE()) {
- case EFI_IFR_TYPE_NUM_SIZE_8:
- case EFI_IFR_TYPE_NUM_SIZE_16:
- case EFI_IFR_TYPE_NUM_SIZE_32:
- case EFI_IFR_TYPE_NUM_SIZE_64:
- IsSupported = TRUE;
- break;
+ //
+ // Base on the type to know the actual used size,shrink the buffer
+ // size allocate before.
+ //
+ case EFI_IFR_TYPE_NUM_SIZE_8: ShrinkSize = 21;break;
+ case EFI_IFR_TYPE_NUM_SIZE_16:ShrinkSize = 18;break;
+ case EFI_IFR_TYPE_NUM_SIZE_32:ShrinkSize = 12;break;
+ case EFI_IFR_TYPE_NUM_SIZE_64:break;
default:
+ IsSupported = FALSE;
break;
}
+ OObj.ShrinkBinSize (ShrinkSize);
if (!IsSupported) {
_PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "OneOf question only support UINT8, UINT16, UINT32 and UINT64 data type.");
}
+ >>
+ vfrStatementQuestionOptionList
+ E:EndOneOf <<
CRT_END_OP (E);
>>
";"
@@ -2853,11 +2864,35 @@
vfrStatementOneOfOption :
<<
- EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;
- CIfrOneOfOption OOOObj;
+ EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;
CHAR8 *VarStoreName = NULL;
+ BOOLEAN TypeError = FALSE;
+ UINT8 Size = 0;
+
+ switch (_GET_CURRQEST_DATATYPE()) {
+ case EFI_IFR_TYPE_NUM_SIZE_8: Size = 1; break;
+ case EFI_IFR_TYPE_NUM_SIZE_16: Size = 2; break;
+ case EFI_IFR_TYPE_NUM_SIZE_32: Size = 4; break;
+ case EFI_IFR_TYPE_NUM_SIZE_64: Size = 8; break;
+ case EFI_IFR_TYPE_DATE: Size = 4; break;
+ case EFI_IFR_TYPE_TIME: Size = 3; break;
+ case EFI_IFR_TYPE_REF: Size = 22;break;
+ case EFI_IFR_TYPE_STRING: Size = 2; break;
+ case EFI_IFR_TYPE_BOOLEAN: Size = 1; break;
+ default:
+ TypeError = TRUE;
+ Size = sizeof (EFI_IFR_TYPE_VALUE);
+ break;
+ }
+ Size += OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value);
+ CIfrOneOfOption OOOObj (Size);
>>
- L:Option << OOOObj.SetLineNo(L->getLine()); >>
+ L:Option <<
+ OOOObj.SetLineNo(L->getLine());
+ if (TypeError) {
+ _PCATCH (VFR_RETURN_FATAL_ERROR, L->getLine(), "Get data type error.");
+ }
+ >>
Text "=" "STRING_TOKEN" "\(" S:Number "\)" "," << OOOObj.SetOption (_STOSID(S->getText())); >>
Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] >[Val] ","
<<
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2013-01-16 02:06:21
|
Revision: 2568
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2568&view=rev
Author: ydong10
Date: 2013-01-16 02:06:12 +0000 (Wed, 16 Jan 2013)
Log Message:
-----------
Refine the logic, based on the varstore name and guid to find a varstore, old logic only base on name to find it.
Signed-off-by: Eric Dong <eri...@in...>
Reviewed-by: Liming Gao <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrError.h
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp 2013-01-08 07:39:52 UTC (rev 2567)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp 2013-01-16 02:06:12 UTC (rev 2568)
@@ -2,7 +2,7 @@
VfrCompiler error handler.
-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
@@ -45,6 +45,7 @@
{ VFR_RETURN_DATA_STRING_ERROR, ": data field string error or not support"},
{ VFR_RETURN_DEFAULT_VALUE_REDEFINED, ": default value re-defined with different value"},
{ VFR_RETURN_CONSTANT_ONLY, ": only constant is allowed in the expression"},
+ { VFR_RETURN_VARSTORE_NAME_REDEFINED_ERROR, ": Varstore name is defined by more than one varstores, it can't be referred as varstore, only varstore strucure name could be used."},
{ VFR_RETURN_CODEUNDEFINED, ": undefined Error Code" }
};
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrError.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrError.h 2013-01-08 07:39:52 UTC (rev 2567)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrError.h 2013-01-16 02:06:12 UTC (rev 2568)
@@ -2,7 +2,7 @@
VfrCompiler Error definition
-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
@@ -43,6 +43,7 @@
VFR_RETURN_DATA_STRING_ERROR,
VFR_RETURN_DEFAULT_VALUE_REDEFINED,
VFR_RETURN_CONSTANT_ONLY,
+ VFR_RETURN_VARSTORE_NAME_REDEFINED_ERROR,
VFR_RETURN_CODEUNDEFINED
} EFI_VFR_RETURN_CODE;
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2013-01-08 07:39:52 UTC (rev 2567)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2013-01-16 02:06:12 UTC (rev 2568)
@@ -2,7 +2,7 @@
The definition of CFormPkg's member 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
@@ -805,6 +805,7 @@
CHAR8 *NewStr;
EFI_VFR_RETURN_CODE ReturnCode;
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
+ EFI_VARSTORE_ID VarStoreId = EFI_VARSTORE_ID_INVALID;
//
// Declare all questions as Numeric in DisableIf True
@@ -852,7 +853,7 @@
//
// Get VarStoreType
//
- ReturnCode = lCVfrDataStorage.GetVarStoreType (FName, VarStoreType);
+ ReturnCode = lCVfrDataStorage.GetVarStoreId (FName, &Info.mVarStoreId);
if (ReturnCode == VFR_RETURN_UNDEFINED) {
lCVfrDataStorage.DeclareBufferVarStore (
FName,
@@ -862,18 +863,13 @@
EFI_VARSTORE_ID_INVALID,
FALSE
);
- ReturnCode = lCVfrDataStorage.GetVarStoreType (FName, VarStoreType);
+ 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;
}
-
- ReturnCode = lCVfrDataStorage.GetVarStoreId (FName, &Info.mVarStoreId);
- if (ReturnCode != VFR_RETURN_SUCCESS) {
- gCVfrErrorHandle.PrintMsg (pNode->mLineNo, FName, "Error", "Var Store Type is not defined");
- return ReturnCode;
- }
+ VarStoreType = lCVfrDataStorage.GetVarStoreType (Info.mVarStoreId);
if (*VarStr == '\0' && ArrayIdx != INVALID_ARRAY_INDEX) {
ReturnCode = lCVfrDataStorage.GetNameVarStoreInfo (&Info, ArrayIdx);
@@ -883,7 +879,7 @@
} else if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) {
VarStr = pNode->mKey;
//convert VarStr with store name to VarStr with structure name
- ReturnCode = lCVfrDataStorage.GetBufferVarStoreDataTypeName (FName, &SName);
+ ReturnCode = lCVfrDataStorage.GetBufferVarStoreDataTypeName (Info.mVarStoreId, &SName);
if (ReturnCode == VFR_RETURN_SUCCESS) {
NewStr = new CHAR8[strlen (VarStr) + strlen (SName) + 1];
NewStr[0] = '\0';
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-01-08 07:39:52 UTC (rev 2567)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-01-16 02:06:12 UTC (rev 2568)
@@ -894,7 +894,7 @@
VarStoreId
), LineNum);
VSObj.SetGuid (&Guid);
- _PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId), SN);
+ _PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId, &Guid), SN);
VSObj.SetVarStoreId (VarStoreId);
_PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), LineNum);
VSObj.SetSize ((UINT16) Size);
@@ -980,7 +980,7 @@
TypeName,
VarStoreId
), LineNum);
- _PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId), SN);
+ _PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId, &Guid), SN);
_PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), LineNum);
} else {
_PCATCH(mCVfrDataStorage.DeclareBufferVarStore (
@@ -990,7 +990,7 @@
TypeName,
VarStoreId
), LineNum);
- _PCATCH(mCVfrDataStorage.GetVarStoreId(TN->getText(), &VarStoreId), VN);
+ _PCATCH(mCVfrDataStorage.GetVarStoreId(TN->getText(), &VarStoreId, &Guid), VN);
_PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), N->getLine());
}
VSEObj.SetGuid (&Guid);
@@ -1023,7 +1023,7 @@
Uuid "=" guidDefinition[Guid] << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), SN); >>
<<
VSNVObj.SetGuid (&Guid);
- _PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId), SN);
+ _PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId, &Guid), SN);
VSNVObj.SetVarStoreId (VarStoreId);
>>
";"
@@ -1176,6 +1176,7 @@
CHAR8 *TName = NULL;
EFI_VFR_RETURN_CODE VfrReturnCode = VFR_RETURN_SUCCESS;
EFI_IFR_TYPE_VALUE Dummy = gZeroEfiIfrTypeValue;
+ EFI_GUID *VarGuid = NULL;
>>
(
SN1:StringIdentifier << SName = SN1->getText(); _STRCAT(&VarIdStr, SN1->getText()); >>
@@ -1186,7 +1187,7 @@
_STRCAT(&VarIdStr, "]");
>>
<<
- VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType);
+ VfrReturnCode = mCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId);
if (mCompatibleMode && VfrReturnCode == VFR_RETURN_UNDEFINED) {
mCVfrDataStorage.DeclareBufferVarStore (
SName,
@@ -1196,11 +1197,10 @@
EFI_VARSTORE_ID_INVALID,
FALSE
);
- VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType);
+ VfrReturnCode = mCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId, &mFormsetGuid);
}
if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) {
_PCATCH(VfrReturnCode, SN1);
- _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN1);
_PCATCH(mCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1);
}
@@ -1211,7 +1211,7 @@
(
SN2:StringIdentifier << SName = SN2->getText(); _STRCAT(&VarIdStr, SName); >>
<<
- VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType);
+ VfrReturnCode = mCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId);
if (mCompatibleMode && VfrReturnCode == VFR_RETURN_UNDEFINED) {
mCVfrDataStorage.DeclareBufferVarStore (
SName,
@@ -1221,13 +1221,13 @@
EFI_VARSTORE_ID_INVALID,
FALSE
);
- VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType);
+ VfrReturnCode = mCVfrDataStorage.GetVarStoreId(SName, &$Info.mVarStoreId, &mFormsetGuid);
}
if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) {
_PCATCH(VfrReturnCode, SN2);
- _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN2);
+ VarStoreType = mCVfrDataStorage.GetVarStoreType ($Info.mVarStoreId);
if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) {
- _PCATCH(mCVfrDataStorage.GetBufferVarStoreDataTypeName(SName, &TName), SN2);
+ _PCATCH(mCVfrDataStorage.GetBufferVarStoreDataTypeName(Info.mVarStoreId, &TName), SN2);
_STRCAT(&VarStr, TName);
}
}
@@ -1266,13 +1266,16 @@
break;
case EFI_VFR_VARSTORE_BUFFER:
_PCATCH(gCVfrVarDataTypeDB.GetDataFieldInfo (VarStr, $Info.mInfo.mVarOffset, $Info.mVarType, $Info.mVarTotalSize), SN2->getLine(), VarStr);
+ VarGuid = mCVfrDataStorage.GetVarStoreGuid($Info.mVarStoreId);
_PCATCH((EFI_VFR_RETURN_CODE)gCVfrBufferConfig.Register (
SName,
+ VarGuid,
NULL),
SN2->getLine());
_PCATCH((EFI_VFR_RETURN_CODE)gCVfrBufferConfig.Write (
'a',
SName,
+ VarGuid,
NULL,
$Info.mVarType,
$Info.mInfo.mVarOffset,
@@ -1477,6 +1480,7 @@
CHAR8 *VarStoreName = NULL;
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
UINT32 Size = 0;
+ EFI_GUID *VarGuid = NULL;
>>
D:Default
(
@@ -1518,14 +1522,16 @@
}
<<
if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
- _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), D->getLine());
- _PCATCH(mCVfrDataStorage.GetVarStoreType (VarStoreName, VarStoreType), D->getLine());
- if ((IsExp == FALSE) && (VarStoreType == EFI_VFR_VARSTORE_BUFFER)) {
- _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
- DefaultId,
- _GET_CURRQEST_VARTINFO(),
- VarStoreName,
- _GET_CURRQEST_DATATYPE (),
+ _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), D->getLine());
+ VarGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);
+ VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);
+ if ((IsExp == FALSE) && (VarStoreType == EFI_VFR_VARSTORE_BUFFER)) {
+ _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
+ DefaultId,
+ _GET_CURRQEST_VARTINFO(),
+ VarStoreName,
+ VarGuid,
+ _GET_CURRQEST_DATATYPE (),
Val),
D->getLine()
);
@@ -1870,6 +1876,7 @@
EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;
CHAR8 *VarStoreName = NULL;
UINT32 DataTypeSize;
+ EFI_GUID *VarStoreGuid = NULL;
>>
L:CheckBox << CBObj.SetLineNo(L->getLine()); >>
vfrQuestionHeader[CBObj] "," << //check data type
@@ -1888,6 +1895,7 @@
F:FLAGS "=" vfrCheckBoxFlags[CBObj, F->getLine()] ","
<<
_PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), VFR_RETURN_SUCCESS, L, "Failed to retrieve varstore name");
+ VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);
Val.b = TRUE;
if (CBObj.GetFlags () & 0x01) {
_PCATCH(
@@ -1895,6 +1903,7 @@
EFI_HII_DEFAULT_CLASS_STANDARD,
_GET_CURRQEST_VARTINFO(),
VarStoreName,
+ VarStoreGuid,
_GET_CURRQEST_DATATYPE (),
Val
),
@@ -1909,6 +1918,7 @@
EFI_HII_DEFAULT_CLASS_MANUFACTURING,
_GET_CURRQEST_VARTINFO(),
VarStoreName,
+ VarStoreGuid,
_GET_CURRQEST_DATATYPE (),
Val
),
@@ -2849,6 +2859,7 @@
UINT32 Size = 0;
BOOLEAN TypeError = FALSE;
EFI_VFR_RETURN_CODE ReturnCode = VFR_RETURN_SUCCESS;
+ EFI_GUID *VarStoreGuid = NULL;
if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {
TypeError = TRUE;
@@ -2898,11 +2909,13 @@
F:FLAGS "=" vfrOneOfOptionFlags[OOOObj, F->getLine()]
<<
_PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());
+ VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);
if (OOOObj.GetFlags () & 0x10) {
_PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
EFI_HII_DEFAULT_CLASS_STANDARD,
_GET_CURRQEST_VARTINFO(),
VarStoreName,
+ VarStoreGuid,
_GET_CURRQEST_DATATYPE (),
Val
), L->getLine());
@@ -2912,6 +2925,7 @@
EFI_HII_DEFAULT_CLASS_MANUFACTURING,
_GET_CURRQEST_VARTINFO(),
VarStoreName,
+ VarStoreGuid,
_GET_CURRQEST_DATATYPE (),
Val
), L->getLine());
@@ -3327,8 +3341,8 @@
UINT16 ConstVal;
CHAR8 *VarIdStr;
UINT32 LineNo;
- EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
EFI_VFR_RETURN_CODE VfrReturnCode = VFR_RETURN_SUCCESS;
+ EFI_VARSTORE_ID VarStoreId = EFI_VARSTORE_ID_INVALID;
>>
L:VarEqVal <<
if (!mCompatibleMode) {
@@ -3339,7 +3353,7 @@
OpenParen
VN:Number <<
VarIdStr = NULL; _STRCAT(&VarIdStr, VK->getText()); _STRCAT(&VarIdStr, VN->getText());
- VfrReturnCode = mCVfrDataStorage.GetVarStoreType (VarIdStr, VarStoreType);
+ VfrReturnCode = mCVfrDataStorage.GetVarStoreId (VarIdStr, &VarStoreId);
if (VfrReturnCode == VFR_RETURN_UNDEFINED) {
_PCATCH (mCVfrDataStorage.DeclareEfiVarStore (
VarIdStr,
@@ -4576,7 +4590,7 @@
TypeNameList[Index],
EFI_VARSTORE_ID_INVALID
);
- mCVfrDataStorage.GetVarStoreId(TypeNameList[Index], &VarStoreId);
+ mCVfrDataStorage.GetVarStoreId(TypeNameList[Index], &VarStoreId, &mFormsetGuid);
VSObj.SetVarStoreId (VarStoreId);
gCVfrVarDataTypeDB.GetDataTypeSize(TypeNameList[Index], &Size);
VSObj.SetSize ((UINT16) Size);
@@ -4601,7 +4615,7 @@
(CHAR8 *) DateType,
EFI_VARSTORE_ID_INVALID
);
- mCVfrDataStorage.GetVarStoreId((CHAR8 *) DateName, &VarStoreId);
+ mCVfrDataStorage.GetVarStoreId((CHAR8 *) DateName, &VarStoreId, &mFormsetGuid);
VSObj.SetVarStoreId (VarStoreId);
gCVfrVarDataTypeDB.GetDataTypeSize((CHAR8 *) DateType, &Size);
VSObj.SetSize ((UINT16) Size);
@@ -4622,7 +4636,7 @@
(CHAR8 *) TimeType,
EFI_VARSTORE_ID_INVALID
);
- mCVfrDataStorage.GetVarStoreId((CHAR8 *) TimeName, &VarStoreId);
+ mCVfrDataStorage.GetVarStoreId((CHAR8 *) TimeName, &VarStoreId, &mFormsetGuid);
VSObj.SetVarStoreId (VarStoreId);
gCVfrVarDataTypeDB.GetDataTypeSize((CHAR8 *) TimeType, &Size);
VSObj.SetSize ((UINT16) Size);
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2013-01-08 07:39:52 UTC (rev 2567)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2013-01-16 02:06:12 UTC (rev 2568)
@@ -2,7 +2,7 @@
Vfr common library functions.
-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
@@ -123,11 +123,13 @@
SConfigItem::SConfigItem (
IN CHAR8 *Name,
+ IN EFI_GUID *Guid,
IN CHAR8 *Id
)
{
mName = NULL;
- mId = 0;
+ mGuid = NULL;
+ mId = NULL;
mInfoStrList = NULL;
mNext = NULL;
@@ -137,6 +139,12 @@
}
}
+ if (Guid != NULL) {
+ if ((mGuid = (EFI_GUID *) new CHAR8[sizeof (EFI_GUID)]) != NULL) {
+ memcpy (mGuid, Guid, sizeof (EFI_GUID));
+ }
+ }
+
if (Id != NULL) {
if ((mId = new CHAR8[strlen (Id) + 1]) != NULL) {
strcpy (mId, Id);
@@ -146,6 +154,7 @@
SConfigItem::SConfigItem (
IN CHAR8 *Name,
+ IN EFI_GUID *Guid,
IN CHAR8 *Id,
IN UINT8 Type,
IN UINT16 Offset,
@@ -154,6 +163,7 @@
)
{
mName = NULL;
+ mGuid = NULL;
mId = NULL;
mInfoStrList = NULL;
mNext = NULL;
@@ -164,6 +174,12 @@
}
}
+ if (Guid != NULL) {
+ if ((mGuid = (EFI_GUID *) new CHAR8[sizeof (EFI_GUID)]) != NULL) {
+ memcpy (mGuid, Guid, sizeof (EFI_GUID));
+ }
+ }
+
if (Id != NULL) {
if ((mId = new CHAR8[strlen (Id) + 1]) != NULL) {
strcpy (mId, Id);
@@ -180,6 +196,7 @@
SConfigInfo *Info;
BUFFER_SAFE_FREE (mName);
+ BUFFER_SAFE_FREE (mGuid);
BUFFER_SAFE_FREE (mId);
while (mInfoStrList != NULL) {
Info = mInfoStrList;
@@ -192,18 +209,20 @@
UINT8
CVfrBufferConfig::Register (
IN CHAR8 *Name,
+ IN EFI_GUID *Guid,
IN CHAR8 *Id
)
{
SConfigItem *pNew;
- if (Select (Name) == 0) {
+ if (Select (Name, Guid) == 0) {
return 1;
}
- if ((pNew = new SConfigItem (Name, Id)) == NULL) {
+ if ((pNew = new SConfigItem (Name, Guid, Id)) == NULL) {
return 2;
}
+
if (mItemListHead == NULL) {
mItemListHead = pNew;
mItemListTail = pNew;
@@ -234,18 +253,19 @@
UINT8
CVfrBufferConfig::Select (
- IN CHAR8 *Name,
- IN CHAR8 *Id
+ IN CHAR8 *Name,
+ IN EFI_GUID *Guid,
+ IN CHAR8 *Id
)
{
SConfigItem *p;
- if (Name == NULL) {
+ if (Name == NULL || Guid == NULL) {
mItemListPos = mItemListHead;
return 0;
} else {
for (p = mItemListHead; p != NULL; p = p->mNext) {
- if (strcmp (p->mName, Name) != 0) {
+ if ((strcmp (p->mName, Name) != 0) || (memcmp (p->mGuid, Guid, sizeof (EFI_GUID)) != 0)) {
continue;
}
@@ -269,6 +289,7 @@
CVfrBufferConfig::Write (
IN CONST CHAR8 Mode,
IN CHAR8 *Name,
+ IN EFI_GUID *Guid,
IN CHAR8 *Id,
IN UINT8 Type,
IN UINT16 Offset,
@@ -280,14 +301,14 @@
SConfigItem *pItem;
SConfigInfo *pInfo;
- if ((Ret = Select (Name)) != 0) {
+ if ((Ret = Select (Name, Guid)) != 0) {
return Ret;
}
switch (Mode) {
case 'a' : // add
- if (Select (Name, Id) != 0) {
- if ((pItem = new SConfigItem (Name, Id, Type, Offset, (UINT16) Width, Value)) == NULL) {
+ if (Select (Name, Guid, Id) != 0) {
+ if ((pItem = new SConfigItem (Name, Guid, Id, Type, Offset, (UINT16) Width, Value)) == NULL) {
return 2;
}
if (mItemListHead == NULL) {
@@ -1578,7 +1599,7 @@
return VFR_RETURN_EFIVARSTORE_SIZE_ERROR;
}
- if (GetVarStoreId (StoreName, &VarStoreId) == VFR_RETURN_SUCCESS) {
+ ...
[truncated message content] |
|
From: <yd...@us...> - 2013-02-06 02:09:38
|
Revision: 2571
http://edk2-buildtools.svn.sourceforge.net/edk2-buildtools/?rev=2571&view=rev
Author: ydong10
Date: 2013-02-06 02:09:31 +0000 (Wed, 06 Feb 2013)
Log Message:
-----------
Add code to allocate buffer for numeric opcode before end opcode to avoid ifr data error.
Signed-off-by: Eric Dong <eri...@in...>
Reviewed-by: Liming Gao <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2013-01-25 06:09:07 UTC (rev 2570)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2013-02-06 02:09:31 UTC (rev 2571)
@@ -803,6 +803,7 @@
CHAR8 FName[MAX_NAME_LEN];
CHAR8 *SName;
CHAR8 *NewStr;
+ UINT32 ShrinkSize;
EFI_VFR_RETURN_CODE ReturnCode;
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
EFI_VARSTORE_ID VarStoreId = EFI_VARSTORE_ID_INVALID;
@@ -823,7 +824,7 @@
if (pNode->mFlag == PENDING) {
CIfrNumeric CNObj;
EFI_VARSTORE_INFO Info;
- EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;
+ EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;
CNObj.SetLineNo (LineNo);
CNObj.SetPrompt (0x0);
@@ -913,19 +914,24 @@
switch (Info.mVarType) {
case EFI_IFR_TYPE_NUM_SIZE_64:
CNObj.SetMinMaxStepData ((UINT64) 0, (UINT64) -1 , (UINT64) 0);
+ ShrinkSize = 0;
break;
case EFI_IFR_TYPE_NUM_SIZE_32:
CNObj.SetMinMaxStepData ((UINT32) 0, (UINT32) -1 , (UINT32) 0);
+ ShrinkSize = 12;
break;
case EFI_IFR_TYPE_NUM_SIZE_16:
CNObj.SetMinMaxStepData ((UINT16) 0, (UINT16) -1 , (UINT16) 0);
+ ShrinkSize = 18;
break;
case EFI_IFR_TYPE_NUM_SIZE_8:
CNObj.SetMinMaxStepData ((UINT8) 0, (UINT8) -1 , (UINT8) 0);
+ ShrinkSize = 21;
break;
default:
break;
}
+ CNObj.ShrinkBinSize (ShrinkSize);
//
// For undefined Efi VarStore type question
@@ -935,7 +941,7 @@
CIfrVarEqName CVNObj (QId, Info.mInfo.mVarName);
CVNObj.SetLineNo (LineNo);
}
-
+
//
// End for Numeric
//
@@ -1236,6 +1242,18 @@
return pNode;
}
+/*
+ Add just the op code position.
+
+ From
+
+ | form end opcode + end of if opcode for form ... + Dynamic opcode + form set end opcode |
+
+ To
+
+ | Dynamic opcode + form end opcode + end of if opcode for form ... + form set end opcode |
+
+*/
BOOLEAN
CIfrRecordInfoDB::IfrAdjustDynamicOpcodeInRecords (
VOID
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-01-25 06:09:07 UTC (rev 2570)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-02-06 02:09:31 UTC (rev 2571)
@@ -604,6 +604,10 @@
CRT_END_OP (E);
+ //
+ // Adjust the pending question position.
+ // Move the position from current to before the end of the last form in the form set.
+ //
if (gNeedAdjustOpcode) {
gCFormPkg.AdjustDynamicInsertOpcode (
mLastFormEndAddr,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2013-08-09 07:07:28
|
Revision: 2594
http://sourceforge.net/p/edk2-buildtools/code/2594
Author: ydong10
Date: 2013-08-09 07:07:25 +0000 (Fri, 09 Aug 2013)
Log Message:
-----------
Report warning info or error info when two default value is set for one question.
Signed-off-by: Eric Dong <eri...@in...>
Reviewed-by: Liming Gao <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/EfiVfr.h
trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h
trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrError.h
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
Modified: trunk/BaseTools/Source/C/VfrCompile/EfiVfr.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/EfiVfr.h 2013-07-31 10:58:26 UTC (rev 2593)
+++ trunk/BaseTools/Source/C/VfrCompile/EfiVfr.h 2013-08-09 07:07:25 UTC (rev 2594)
@@ -38,6 +38,8 @@
#define EFI_STRING_ID_INVALID 0x0
#define EFI_IMAGE_ID_INVALID 0xFFFF
+#define EFI_IFR_MAX_DEFAULT_TYPE 0x10
+
typedef enum {
QUESTION_NORMAL,
QUESTION_DATE,
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp 2013-07-31 10:58:26 UTC (rev 2593)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp 2013-08-09 07:07:25 UTC (rev 2594)
@@ -82,6 +82,7 @@
mOptions.CPreprocessorOptions = NULL;
mOptions.CompatibleMode = FALSE;
mOptions.HasOverrideClassGuid = FALSE;
+ mOptions.WarningAsError = FALSE;
memset (&mOptions.OverrideClassGuid, 0, sizeof (EFI_GUID));
if (Argc == 1) {
@@ -153,6 +154,8 @@
goto Fail;
}
mOptions.HasOverrideClassGuid = TRUE;
+ } else if (stricmp(Argv[Index], "-w") == 0 || stricmp(Argv[Index], "--warning-as-error") == 0) {
+ mOptions.WarningAsError = TRUE;
} else {
DebugError (NULL, 0, 1000, "Unknown option", "unrecognized option %s", Argv[Index]);
goto Fail;
@@ -425,6 +428,8 @@
" -g, --guid",
" override class guid input",
" format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
+ " -w --warning-as-error",
+ " treat warning as an error",
NULL
};
for (Index = 0; Help[Index] != NULL; Index++) {
@@ -516,6 +521,7 @@
InFileName = (mOptions.SkipCPreprocessor == TRUE) ? mOptions.VfrFileName : mOptions.PreprocessorOutputFileName;
gCVfrErrorHandle.SetInputFile (InFileName);
+ gCVfrErrorHandle.SetWarningAsError(mOptions.WarningAsError);
if ((pInFile = fopen (InFileName, "r")) == NULL) {
DebugError (NULL, 0, 0001, "Error opening the input file", InFileName);
@@ -802,6 +808,8 @@
)
{
COMPILER_RUN_STATUS Status;
+
+ SetPrintLevel(WARNING_LOG_LEVEL);
CVfrCompiler Compiler(Argc, Argv);
Compiler.PreProcess();
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h 2013-07-31 10:58:26 UTC (rev 2593)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h 2013-08-09 07:07:25 UTC (rev 2594)
@@ -57,6 +57,7 @@
BOOLEAN CompatibleMode;
BOOLEAN HasOverrideClassGuid;
EFI_GUID OverrideClassGuid;
+ BOOLEAN WarningAsError;
} OPTIONS;
typedef enum {
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp 2013-07-31 10:58:26 UTC (rev 2593)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp 2013-08-09 07:07:25 UTC (rev 2594)
@@ -49,14 +49,20 @@
{ VFR_RETURN_CODEUNDEFINED, ": undefined Error Code" }
};
+static SVFR_WARNING_HANDLE VFR_WARNING_HANDLE_TABLE [] = {
+ { VFR_WARNING_DEFAULT_VALUE_REDEFINED, ": default value re-defined with different value"},
+ { VFR_WARNING_CODEUNDEFINED, ": undefined Warning Code" }
+};
+
CVfrErrorHandle::CVfrErrorHandle (
VOID
)
{
- mInputFileName = NULL;
- mScopeRecordListHead = NULL;
- mScopeRecordListTail = NULL;
- mVfrErrorHandleTable = VFR_ERROR_HANDLE_TABLE;
+ mInputFileName = NULL;
+ mScopeRecordListHead = NULL;
+ mScopeRecordListTail = NULL;
+ mVfrErrorHandleTable = VFR_ERROR_HANDLE_TABLE;
+ mVfrWarningHandleTable = VFR_WARNING_HANDLE_TABLE;
}
CVfrErrorHandle::~CVfrErrorHandle (
@@ -75,12 +81,21 @@
delete pNode;
}
- mScopeRecordListHead = NULL;
- mScopeRecordListTail = NULL;
- mVfrErrorHandleTable = NULL;
+ mScopeRecordListHead = NULL;
+ mScopeRecordListTail = NULL;
+ mVfrErrorHandleTable = NULL;
+ mVfrWarningHandleTable = NULL;
}
VOID
+CVfrErrorHandle::SetWarningAsError (
+ IN BOOLEAN WarningAsError
+ )
+{
+ mWarningAsError = WarningAsError;
+}
+
+VOID
CVfrErrorHandle::SetInputFile (
IN CHAR8 *InputFile
)
@@ -243,4 +258,41 @@
}
}
+UINT8
+CVfrErrorHandle::HandleWarning (
+ IN EFI_VFR_WARNING_CODE WarningCode,
+ IN UINT32 LineNum,
+ IN CHAR8 *TokName
+ )
+{
+ UINT32 Index;
+ CHAR8 *FileName = NULL;
+ UINT32 FileLine;
+ CONST CHAR8 *WarningMsg = NULL;
+
+ if (mVfrWarningHandleTable == NULL) {
+ return 1;
+ }
+
+ GetFileNameLineNum (LineNum, &FileName, &FileLine);
+
+ if (mWarningAsError) {
+ Error (FileName, FileLine, 0x2220, "warning treated as error", NULL);
+ }
+
+ for (Index = 0; mVfrWarningHandleTable[Index].mWarningCode != VFR_WARNING_CODEUNDEFINED; Index++) {
+ if (WarningCode == mVfrWarningHandleTable[Index].mWarningCode) {
+ WarningMsg = mVfrWarningHandleTable[Index].mWarningMsg;
+ break;
+ }
+ }
+
+ if (WarningMsg != NULL) {
+ Warning (FileName, FileLine, 0, TokName, (CHAR8 *) "\t%s\n", (CHAR8 *) WarningMsg);
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
CVfrErrorHandle gCVfrErrorHandle;
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrError.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrError.h 2013-07-31 10:58:26 UTC (rev 2593)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrError.h 2013-08-09 07:07:25 UTC (rev 2594)
@@ -47,11 +47,21 @@
VFR_RETURN_CODEUNDEFINED
} EFI_VFR_RETURN_CODE;
+typedef enum {
+ VFR_WARNING_DEFAULT_VALUE_REDEFINED = 0,
+ VFR_WARNING_CODEUNDEFINED
+} EFI_VFR_WARNING_CODE;
+
typedef struct _SVFR_ERROR_HANDLE {
EFI_VFR_RETURN_CODE mErrorCode;
CONST CHAR8 *mErrorMsg;
} SVFR_ERROR_HANDLE;
+typedef struct _SVFR_WARNING_HANDLE {
+ EFI_VFR_WARNING_CODE mWarningCode;
+ CONST CHAR8 *mWarningMsg;
+} SVFR_WARNING_HANDLE;
+
struct SVfrFileScopeRecord {
CHAR8 *mFileName;
UINT32 mWholeScopeLine;
@@ -66,17 +76,21 @@
private:
CHAR8 *mInputFileName;
SVFR_ERROR_HANDLE *mVfrErrorHandleTable;
+ SVFR_WARNING_HANDLE *mVfrWarningHandleTable;
SVfrFileScopeRecord *mScopeRecordListHead;
SVfrFileScopeRecord *mScopeRecordListTail;
+ BOOLEAN mWarningAsError;
public:
CVfrErrorHandle (VOID);
~CVfrErrorHandle (VOID);
+ VOID SetWarningAsError (IN BOOLEAN);
VOID SetInputFile (IN CHAR8 *);
VOID ParseFileScopeRecord (IN CHAR8 *, IN UINT32);
VOID GetFileNameLineNum (IN UINT32, OUT CHAR8 **, OUT UINT32 *);
UINT8 HandleError (IN EFI_VFR_RETURN_CODE, IN UINT32 LineNum = 0, IN CHAR8 *TokName = NULL);
+ UINT8 HandleWarning (IN EFI_VFR_WARNING_CODE, IN UINT32 LineNum = 0, IN CHAR8 *TokName = NULL);
VOID PrintMsg (IN UINT32 LineNum = 0, IN CHAR8 *TokName = NULL, IN CONST CHAR8 *MsgType = "Error", IN CONST CHAR8 *ErrorMsg = "");
};
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-07-31 10:58:26 UTC (rev 2593)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-08-09 07:07:25 UTC (rev 2594)
@@ -1108,6 +1108,7 @@
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;
CHAR8 *QName = NULL;
CHAR8 *VarIdStr = NULL;
+ mUsedDefaultCount = 0;
>>
{
Name "=" QN:StringIdentifier "," <<
@@ -1525,6 +1526,7 @@
>>
}
<<
+ CheckDuplicateDefaultValue (DefaultId, D);
if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
_PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), D->getLine());
VarGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);
@@ -1902,6 +1904,7 @@
VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);
Val.b = TRUE;
if (CBObj.GetFlags () & 0x01) {
+ CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_STANDARD, F);
_PCATCH(
mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
EFI_HII_DEFAULT_CLASS_STANDARD,
@@ -1917,6 +1920,7 @@
);
}
if (CBObj.GetFlags () & 0x02) {
+ CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_MANUFACTURING, F);
_PCATCH(
mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
EFI_HII_DEFAULT_CLASS_MANUFACTURING,
@@ -2915,6 +2919,7 @@
_PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());
VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);
if (OOOObj.GetFlags () & 0x10) {
+ CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_STANDARD, F);
_PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
EFI_HII_DEFAULT_CLASS_STANDARD,
_GET_CURRQEST_VARTINFO(),
@@ -2925,6 +2930,7 @@
), L->getLine());
}
if (OOOObj.GetFlags () & 0x20) {
+ CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_MANUFACTURING, F);
_PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
EFI_HII_DEFAULT_CLASS_MANUFACTURING,
_GET_CURRQEST_VARTINFO(),
@@ -3998,6 +4004,12 @@
CHAR8* mLastFormEndAddr;
//
+// Whether the question already has default value.
+//
+ UINT16 mUsedDefaultArray[EFI_IFR_MAX_DEFAULT_TYPE];
+ UINT16 mUsedDefaultCount;
+
+//
// For framework vfr compatibility
//
BOOLEAN mCompatibleMode;
@@ -4011,6 +4023,7 @@
UINT8 _GET_CURRQEST_DATATYPE ();
UINT32 _GET_CURRQEST_VARSIZE ();
UINT32 _GET_CURRQEST_ARRAY_SIZE();
+ VOID CheckDuplicateDefaultValue (IN EFI_DEFAULT_ID, IN ANTLRTokenPtr);
public:
VOID _PCATCH (IN INTN, IN INTN, IN ANTLRTokenPtr, IN CONST CHAR8 *);
@@ -4871,4 +4884,25 @@
mCompatibleMode = Mode;
mCVfrQuestionDB.SetCompatibleMode (Mode);
}
+
+VOID
+EfiVfrParser::CheckDuplicateDefaultValue (
+ IN EFI_DEFAULT_ID DefaultId,
+ IN ANTLRTokenPtr Tok
+ )
+{
+ UINT16 Index;
+
+ for(Index = 0; Index < mUsedDefaultCount; Index++) {
+ if (mUsedDefaultArray[Index] == DefaultId) {
+ gCVfrErrorHandle.HandleWarning (VFR_WARNING_DEFAULT_VALUE_REDEFINED, Tok->getLine(), Tok->getText());
+ }
+ }
+
+ if (mUsedDefaultCount >= EFI_IFR_MAX_DEFAULT_TYPE - 1) {
+ gCVfrErrorHandle.HandleError (VFR_RETURN_FATAL_ERROR, Tok->getLine(), Tok->getText());
+ }
+
+ mUsedDefaultArray[mUsedDefaultCount++] = DefaultId;
+}
>>
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2013-07-31 10:58:26 UTC (rev 2593)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2013-08-09 07:07:25 UTC (rev 2594)
@@ -323,10 +323,6 @@
// tranverse the list to find out if there's already the value for the same offset
for (pInfo = mItemListPos->mInfoStrList; pInfo != NULL; pInfo = pInfo->mNext) {
if (pInfo->mOffset == Offset) {
- // check if the value and width are the same; return error if not
- if ((Id != NULL) && (pInfo->mWidth != Width || memcmp(pInfo->mValue, &Value, Width) != 0)) {
- return VFR_RETURN_DEFAULT_VALUE_REDEFINED;
- }
return 0;
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2013-10-12 02:12:49
|
Revision: 2603
http://sourceforge.net/p/edk2-buildtools/code/2603
Author: ydong10
Date: 2013-10-12 02:12:44 +0000 (Sat, 12 Oct 2013)
Log Message:
-----------
Enable varid field for name/value varstore.
Signed-off-by: Eric Dong <eri...@in...>
Reviewed-by: Liming Gao <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-09-24 09:31:38 UTC (rev 2602)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2013-10-12 02:12:44 UTC (rev 2603)
@@ -1018,12 +1018,29 @@
<<
EFI_GUID Guid;
CIfrVarStoreNameValue VSNVObj;
- EFI_VARSTORE_ID VarStoreId;
+ EFI_VARSTORE_ID VarStoreId = EFI_VARSTORE_ID_INVALID;
+ BOOLEAN Created = FALSE;
>>
L:NameValueVarStore << VSNVObj.SetLineNo(L->getLine()); >>
- SN:StringIdentifier "," << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText()), SN); >>
+ SN:StringIdentifier ","
+ {
+ VarId "=" ID:Number "," <<
+ _PCATCH(
+ (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,
+ (INTN)TRUE,
+ ID,
+ "varid 0 is not allowed."
+ );
+ >>
+ }
(
- Name "=" "STRING_TOKEN" "\(" N:Number "\)" "," << _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText())), SN); >>
+ Name "=" "STRING_TOKEN" "\(" N:Number "\)" "," <<
+ if (!Created) {
+ _PCATCH(mCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText(), VarStoreId), SN);
+ Created = TRUE;
+ }
+ _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText())), SN);
+ >>
)+
Uuid "=" guidDefinition[Guid] << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), SN); >>
<<
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2013-09-24 09:31:38 UTC (rev 2602)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp 2013-10-12 02:12:44 UTC (rev 2603)
@@ -1512,21 +1512,30 @@
EFI_VFR_RETURN_CODE
CVfrDataStorage::DeclareNameVarStoreBegin (
- IN CHAR8 *StoreName
+ IN CHAR8 *StoreName,
+ IN EFI_VARSTORE_ID VarStoreId
)
{
SVfrVarStorageNode *pNode = NULL;
- EFI_VARSTORE_ID VarStoreId;
+ EFI_VARSTORE_ID TmpVarStoreId;
if (StoreName == NULL) {
return VFR_RETURN_FATAL_ERROR;
}
- if (GetVarStoreId (StoreName, &VarStoreId) == VFR_RETURN_SUCCESS) {
+ if (GetVarStoreId (StoreName, &TmpVarStoreId) == VFR_RETURN_SUCCESS) {
return VFR_RETURN_REDEFINED;
}
+
+ if (VarStoreId == EFI_VARSTORE_ID_INVALID) {
+ VarStoreId = GetFreeVarStoreId (EFI_VFR_VARSTORE_NAME);
+ } else {
+ if (ChekVarStoreIdFree (VarStoreId) == FALSE) {
+ return VFR_RETURN_VARSTOREID_REDEFINED;
+ }
+ MarkVarStoreIdUsed (VarStoreId);
+ }
- VarStoreId = GetFreeVarStoreId (EFI_VFR_VARSTORE_NAME);
if ((pNode = new SVfrVarStorageNode (StoreName, VarStoreId)) == NULL) {
return VFR_RETURN_UNDEFINED;
}
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h 2013-09-24 09:31:38 UTC (rev 2602)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h 2013-10-12 02:12:44 UTC (rev 2603)
@@ -300,7 +300,7 @@
SVfrVarStorageNode * GetEfiVarStoreList () {
return mEfiVarStoreList;
}
- EFI_VFR_RETURN_CODE DeclareNameVarStoreBegin (CHAR8 *);
+ EFI_VFR_RETURN_CODE DeclareNameVarStoreBegin (CHAR8 *, EFI_VARSTORE_ID);
EFI_VFR_RETURN_CODE NameTableAddItem (EFI_STRING_ID);
EFI_VFR_RETURN_CODE DeclareNameVarStoreEnd (EFI_GUID *);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
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: <lg...@us...> - 2014-01-22 07:15:30
|
Revision: 2646
http://sourceforge.net/p/edk2-buildtools/code/2646
Author: lgao4
Date: 2014-01-22 07:15:25 +0000 (Wed, 22 Jan 2014)
Log Message:
-----------
VfrCompiler used memcpy() on the overlapped buffer and caused data corruption. This commit replaces memcpy() with memmove() if the source or the destination buffer is not created in the function, so that the overlapped buffers can be copied correctly.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Gary Ching-Pang Lin <gl...@su...>
Reviewed-by: Gao, Liming <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2014-01-16 02:46:46 UTC (rev 2645)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp 2014-01-22 07:15:25 UTC (rev 2646)
@@ -82,7 +82,7 @@
IN UINT32 Len
)
{
- memcpy (mAddr, Addr, (mLen < Len ? mLen : Len));
+ memmove (mAddr, Addr, (mLen < Len ? mLen : Len));
mFlag = ASSIGNED;
}
@@ -685,7 +685,7 @@
//
// Override the restore buffer data.
//
- memcpy (LastFormEndAddr, InsertOpcodeAddr, InsertOpcodeNode->mBufferFree - InsertOpcodeAddr);
+ memmove (LastFormEndAddr, InsertOpcodeAddr, InsertOpcodeNode->mBufferFree - InsertOpcodeAddr);
InsertOpcodeNode->mBufferFree -= NeedRestoreCodeLen;
memset (InsertOpcodeNode->mBufferFree, 0, NeedRestoreCodeLen);
} else {
@@ -733,7 +733,7 @@
//
// Override the restore buffer data.
//
- memcpy (InsertOpcodeNode->mBufferStart, InsertOpcodeAddr, InsertOpcodeNode->mBufferFree - InsertOpcodeAddr);
+ memmove (InsertOpcodeNode->mBufferStart, InsertOpcodeAddr, InsertOpcodeNode->mBufferFree - InsertOpcodeAddr);
InsertOpcodeNode->mBufferFree -= InsertOpcodeAddr - InsertOpcodeNode->mBufferStart;
//
@@ -1542,7 +1542,7 @@
//
ObjBinBuf = gCFormPkg.IfrBinBufferGet (mObjBinLen);
if (ObjBinBuf != NULL) {
- memcpy (ObjBinBuf, mObjBinBuf, mObjBinLen);
+ memmove (ObjBinBuf, mObjBinBuf, mObjBinLen);
}
//
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2014-01-16 02:46:46 UTC (rev 2645)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2014-01-22 07:15:25 UTC (rev 2646)
@@ -368,7 +368,7 @@
VOID VARSTORE_INFO (OUT EFI_VARSTORE_INFO *Info) {
if (Info != NULL) {
Info->mVarStoreId = mHeader->VarStoreId;
- memcpy (&Info->mVarStoreId, &mHeader->VarStoreInfo, sizeof (Info->mVarStoreId));
+ memmove (&Info->mVarStoreId, &mHeader->VarStoreInfo, sizeof (Info->mVarStoreId));
}
}
@@ -615,7 +615,7 @@
}
VOID SetGuid (IN EFI_GUID *Guid) {
- memcpy (&mFormSet->Guid, Guid, sizeof (EFI_GUID));
+ memmove (&mFormSet->Guid, Guid, sizeof (EFI_GUID));
}
VOID SetFormSetTitle (IN EFI_STRING_ID FormSetTitle) {
@@ -627,7 +627,7 @@
}
VOID SetClassGuid (IN EFI_GUID *Guid) {
- memcpy (&(mClassGuid[mFormSet->Flags++]), Guid, sizeof (EFI_GUID));
+ memmove (&(mClassGuid[mFormSet->Flags++]), Guid, sizeof (EFI_GUID));
}
UINT8 GetFlags() {
@@ -749,7 +749,7 @@
IncLength (sizeof (EFI_IFR_FORM_MAP_METHOD));
mMethodMap->MethodTitle = MethodTitle;
- memcpy (&(mMethodMap->MethodIdentifier), MethodGuid, sizeof (EFI_GUID));
+ memmove (&(mMethodMap->MethodIdentifier), MethodGuid, sizeof (EFI_GUID));
mMethodMap ++;
}
}
@@ -769,7 +769,7 @@
}
VOID SetGuid (IN EFI_GUID *Guid) {
- memcpy (&mVarStore->Guid, Guid, sizeof (EFI_GUID));
+ memmove (&mVarStore->Guid, Guid, sizeof (EFI_GUID));
}
VOID SetVarStoreId (IN EFI_VARSTORE_ID VarStoreId) {
@@ -809,7 +809,7 @@
}
VOID SetGuid (IN EFI_GUID *Guid) {
- memcpy (&mVarStoreEfi->Guid, Guid, sizeof (EFI_GUID));
+ memmove (&mVarStoreEfi->Guid, Guid, sizeof (EFI_GUID));
}
VOID SetVarStoreId (IN UINT16 VarStoreId) {
@@ -863,7 +863,7 @@
}
VOID SetGuid (IN EFI_GUID *Guid) {
- memcpy (&mVarStoreNameValue->Guid, Guid, sizeof (EFI_GUID));
+ memmove (&mVarStoreNameValue->Guid, Guid, sizeof (EFI_GUID));
}
VOID SetVarStoreId (IN UINT16 VarStoreId) {
@@ -938,7 +938,7 @@
CIfrOpHeader (EFI_IFR_DEFAULT_OP, &mDefault->Header, Size) {
mDefault->Type = Type;
mDefault->DefaultId = DefaultId;
- memcpy (&(mDefault->Value), &Value, Size - OFFSET_OF (EFI_IFR_DEFAULT, Value));
+ memmove (&(mDefault->Value), &Value, Size - OFFSET_OF (EFI_IFR_DEFAULT, Value));
}
VOID SetDefaultId (IN UINT16 DefaultId) {
@@ -950,7 +950,7 @@
}
VOID SetValue (IN EFI_IFR_TYPE_VALUE Value) {
- memcpy (&mDefault->Value, &Value, mDefault->Header.Length - OFFSET_OF (EFI_IFR_DEFAULT, Value));
+ memmove (&mDefault->Value, &Value, mDefault->Header.Length - OFFSET_OF (EFI_IFR_DEFAULT, Value));
}
};
@@ -1673,7 +1673,7 @@
}
VOID SetRefreshEventGroutId (IN EFI_GUID *RefreshEventGroupId) {
- memcpy (&mRefreshId->RefreshEventGroupId, RefreshEventGroupId, sizeof (EFI_GUID));
+ memmove (&mRefreshId->RefreshEventGroupId, RefreshEventGroupId, sizeof (EFI_GUID));
}
};
@@ -1755,7 +1755,7 @@
}
VOID SetValue (IN EFI_IFR_TYPE_VALUE Value) {
- memcpy (&mOneOfOption->Value, &Value, mOneOfOption->Header.Length - OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value));
+ memmove (&mOneOfOption->Value, &Value, mOneOfOption->Header.Length - OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value));
}
UINT8 GetFlags (VOID) {
@@ -1904,11 +1904,11 @@
}
VOID SetGuid (IN EFI_GUID *Guid) {
- memcpy (&mGuid->Guid, Guid, sizeof (EFI_GUID));
+ memmove (&mGuid->Guid, Guid, sizeof (EFI_GUID));
}
VOID SetData (IN UINT8* DataBuff, IN UINT8 Size) {
- memcpy ((UINT8 *)mGuid + sizeof (EFI_IFR_GUID), DataBuff, Size);
+ memmove ((UINT8 *)mGuid + sizeof (EFI_IFR_GUID), DataBuff, Size);
}
};
@@ -2214,7 +2214,7 @@
}
VOID SetPermissions (IN EFI_GUID *Permissions) {
- memcpy (&mSecurity->Permissions, Permissions, sizeof (EFI_GUID));
+ memmove (&mSecurity->Permissions, Permissions, sizeof (EFI_GUID));
}
};
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2014-06-09 10:28:03
|
Revision: 2665
http://sourceforge.net/p/edk2-buildtools/code/2665
Author: ydong10
Date: 2014-06-09 10:27:59 +0000 (Mon, 09 Jun 2014)
Log Message:
-----------
Add report error message logic for string to integer functions in VfrCompiler (STOU8, STOU16, STOU32, STOU64).
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Aaron Pop <aa...@am...>
Reviewed-by: Eric Dong <eri...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2014-05-19 09:53:07 UTC (rev 2664)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrFormPkg.h 2014-06-09 10:27:59 UTC (rev 2665)
@@ -2,7 +2,7 @@
The definition of CFormPkg's member function
-Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2014, 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
@@ -1343,7 +1343,7 @@
UpdateCIfrMinMaxStepData(&mNumeric->data);
}
- EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {
+ EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags, BOOLEAN DisplaySettingsSpecified = FALSE) {
EFI_VFR_RETURN_CODE Ret;
Ret = CIfrQuestionHeader::SetFlags (HFlags);
@@ -1351,10 +1351,10 @@
return Ret;
}
- if (LFlags & EFI_IFR_DISPLAY) {
+ if (DisplaySettingsSpecified == FALSE) {
+ mNumeric->Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC;
+ } else {
mNumeric->Flags = LFlags;
- } else {
- mNumeric->Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC;
}
return VFR_RETURN_SUCCESS;
}
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2014-05-19 09:53:07 UTC (rev 2664)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2014-06-09 10:27:59 UTC (rev 2665)
@@ -1,5 +1,5 @@
/*++
-Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2014, 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
@@ -2277,8 +2277,9 @@
UINT8 HFlags = 0;
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
BOOLEAN IsSetType = FALSE;
+ BOOLEAN IsDisplaySpecified = FALSE;
>>
- numericFlagsField[HFlags, LFlags, IsSetType] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType] )*
+ numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified ] )*
<<
//check data type flag
if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
@@ -2297,19 +2298,19 @@
} else if (IsSetType){
_GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;
}
- _PCATCH(NObj.SetFlags (HFlags, LFlags), LineNum);
+ _PCATCH(NObj.SetFlags (HFlags, LFlags, IsDisplaySpecified), LineNum);
>>
;
-numericFlagsField [UINT8 & HFlags, UINT8 & LFlags, BOOLEAN & IsSetType] :
+numericFlagsField [UINT8 & HFlags, UINT8 & LFlags, BOOLEAN & IsSetType, BOOLEAN & IsDisplaySpecified] :
N:Number << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>
| "NUMERIC_SIZE_1" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_1; IsSetType = TRUE;>>
| "NUMERIC_SIZE_2" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_2; IsSetType = TRUE;>>
| "NUMERIC_SIZE_4" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_4; IsSetType = TRUE;>>
| "NUMERIC_SIZE_8" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_8; IsSetType = TRUE;>>
- | "DISPLAY_INT_DEC" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC; >>
- | "DISPLAY_UINT_DEC" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC; >>
- | "DISPLAY_UINT_HEX" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX; >>
+ | "DISPLAY_INT_DEC" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC; IsDisplaySpecified = TRUE;>>
+ | "DISPLAY_UINT_DEC" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC; IsDisplaySpecified = TRUE;>>
+ | "DISPLAY_UINT_HEX" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX; IsDisplaySpecified = TRUE;>>
| questionheaderFlagsField[HFlags]
;
@@ -2366,8 +2367,9 @@
UINT8 HFlags = 0;
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
BOOLEAN IsSetType = FALSE;
+ BOOLEAN IsDisplaySpecified = FALSE;
>>
- numericFlagsField[HFlags, LFlags, IsSetType] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType] )*
+ numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified] )*
<<
//check data type flag
if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2014-06-09 10:38:28
|
Revision: 2667
http://sourceforge.net/p/edk2-buildtools/code/2667
Author: ydong10
Date: 2014-06-09 10:38:25 +0000 (Mon, 09 Jun 2014)
Log Message:
-----------
Fix undefined behavior in VfrCompiler.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Reza Jelveh <rez...@tu...>
Reviewed-by: Eric Dong <eri...@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 2014-06-09 10:33:24 UTC (rev 2666)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp 2014-06-09 10:38:25 UTC (rev 2667)
@@ -372,6 +372,8 @@
mPreProcessCmd = (CHAR8 *) PREPROCESSOR_COMMAND;
mPreProcessOpt = (CHAR8 *) PREPROCESSOR_OPTIONS;
+ SET_RUN_STATUS (STATUS_STARTED);
+
OptionInitialization(Argc, Argv);
if ((IS_RUN_STATUS(STATUS_FAILED)) || (IS_RUN_STATUS(STATUS_DEAD))) {
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h 2014-06-09 10:33:24 UTC (rev 2666)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrCompiler.h 2014-06-09 10:38:25 UTC (rev 2667)
@@ -60,7 +60,8 @@
} OPTIONS;
typedef enum {
- STATUS_INITIALIZED = 1,
+ STATUS_STARTED = 0,
+ STATUS_INITIALIZED,
STATUS_PREPROCESSED,
STATUS_COMPILEED,
STATUS_GENBINARY,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2014-06-18 02:15:59
|
Revision: 2669
http://sourceforge.net/p/edk2-buildtools/code/2669
Author: ydong10
Date: 2014-06-18 02:15:55 +0000 (Wed, 18 Jun 2014)
Log Message:
-----------
Refine the string to UINT* convert logic, not report error for this, just report warning. Also refine the logic, add the line info in the warning info.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eri...@in...>
Reviewed-by: Liming Gao <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrError.h
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp 2014-06-13 07:12:55 UTC (rev 2668)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp 2014-06-18 02:15:55 UTC (rev 2669)
@@ -51,6 +51,7 @@
static SVFR_WARNING_HANDLE VFR_WARNING_HANDLE_TABLE [] = {
{ VFR_WARNING_DEFAULT_VALUE_REDEFINED, ": default value re-defined with different value"},
+ { VFR_WARNING_STRING_TO_UINT_OVERFLOW, ": String to UINT* Overflow"},
{ VFR_WARNING_CODEUNDEFINED, ": undefined Warning Code" }
};
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrError.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrError.h 2014-06-13 07:12:55 UTC (rev 2668)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrError.h 2014-06-18 02:15:55 UTC (rev 2669)
@@ -49,6 +49,7 @@
typedef enum {
VFR_WARNING_DEFAULT_VALUE_REDEFINED = 0,
+ VFR_WARNING_STRING_TO_UINT_OVERFLOW,
VFR_WARNING_CODEUNDEFINED
} EFI_VFR_WARNING_CODE;
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2014-06-13 07:12:55 UTC (rev 2668)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2014-06-18 02:15:55 UTC (rev 2669)
@@ -295,7 +295,7 @@
"," ID:StringIdentifier << Identifier = ID->getText(); >>
}
{
- "," N:Number << PackAction |= VFR_PACK_ASSIGN; PackNumber = _STOU32(N->getText()); >>
+ "," N:Number << PackAction |= VFR_PACK_ASSIGN; PackNumber = _STOU32(N->getText(), N->getLine()); >>
}
<< gCVfrVarDataTypeDB.Pack (LineNum, PackAction, Identifier, PackNumber); >>
;
@@ -305,7 +305,7 @@
UINT32 LineNum;
UINT32 PackNumber = DEFAULT_PACK_ALIGN;
>>
- N:Number << LineNum = N->getLine(); PackNumber = _STOU32(N->getText()); >>
+ N:Number << LineNum = N->getLine(); PackNumber = _STOU32(N->getText(), N->getLine()); >>
<< gCVfrVarDataTypeDB.Pack (LineNum, VFR_PACK_ASSIGN, NULL, PackNumber); >>
;
@@ -354,7 +354,7 @@
D:"UINT64"
N:StringIdentifier
{
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>
+ OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>
}
";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>
;
@@ -364,7 +364,7 @@
D:"UINT32"
N:StringIdentifier
{
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>
+ OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>
}
";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>
;
@@ -376,7 +376,7 @@
("UINT16" | "CHAR16")
N:StringIdentifier
{
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>
+ OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>
}
";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), (CHAR8 *) "UINT16", ArrayNum), N); >>
;
@@ -386,7 +386,7 @@
D:"UINT8"
N:StringIdentifier
{
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>
+ OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>
}
";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>
;
@@ -396,7 +396,7 @@
D:"BOOLEAN"
N:StringIdentifier
{
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>
+ OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>
}
";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>
;
@@ -406,7 +406,7 @@
D:"EFI_STRING_ID"
N:StringIdentifier
{
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>
+ OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>
}
";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>
;
@@ -416,7 +416,7 @@
D:"EFI_HII_DATE"
N:StringIdentifier
{
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>
+ OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>
}
";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>
;
@@ -426,7 +426,7 @@
D:"EFI_HII_TIME"
N:StringIdentifier
{
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>
+ OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>
}
";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>
;
@@ -436,7 +436,7 @@
D:"EFI_HII_REF"
N:StringIdentifier
{
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>
+ OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>
}
";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>
;
@@ -446,7 +446,7 @@
T:StringIdentifier
N:StringIdentifier
{
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>
+ OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText(), I->getLine()); >>
}
";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), T->getText(), ArrayNum), T); >>
;
@@ -458,14 +458,14 @@
guidSubDefinition [EFI_GUID &Guid] :
G4:Number "," G5:Number "," G6:Number "," G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number
<<
- Guid.Data4[0] = _STOU8(G4->getText());
- Guid.Data4[1] = _STOU8(G5->getText());
- Guid.Data4[2] = _STOU8(G6->getText());
- Guid.Data4[3] = _STOU8(G7->getText());
- Guid.Data4[4] = _STOU8(G8->getText());
- Guid.Data4[5] = _STOU8(G9->getText());
- Guid.Data4[6] = _STOU8(G10->getText());
- Guid.Data4[7] = _STOU8(G11->getText());
+ Guid.Data4[0] = _STOU8(G4->getText(), G4->getLine());
+ Guid.Data4[1] = _STOU8(G5->getText(), G5->getLine());
+ Guid.Data4[2] = _STOU8(G6->getText(), G6->getLine());
+ Guid.Data4[3] = _STOU8(G7->getText(), G7->getLine());
+ Guid.Data4[4] = _STOU8(G8->getText(), G8->getLine());
+ Guid.Data4[5] = _STOU8(G9->getText(), G9->getLine());
+ Guid.Data4[6] = _STOU8(G10->getText(), G10->getLine());
+ Guid.Data4[7] = _STOU8(G11->getText(), G11->getLine());
>>
;
@@ -473,9 +473,9 @@
OpenBrace
G1:Number "," G2:Number "," G3:Number ","
<<
- Guid.Data1 = _STOU32 (G1->getText());
- Guid.Data2 = _STOU16 (G2->getText());
- Guid.Data3 = _STOU16 (G3->getText());
+ Guid.Data1 = _STOU32 (G1->getText(), G1->getLine());
+ Guid.Data2 = _STOU16 (G2->getText(), G2->getLine());
+ Guid.Data3 = _STOU16 (G3->getText(), G3->getLine());
>>
(
OpenBrace guidSubDefinition[Guid] CloseBrace
@@ -568,8 +568,8 @@
if (mCompatibleMode) {
memcpy (&mFormsetGuid, &Guid, sizeof (EFI_GUID));
}
- FSObj->SetFormSetTitle (_STOSID(S1->getText()));
- FSObj->SetHelp (_STOSID(S2->getText()));
+ FSObj->SetFormSetTitle (_STOSID(S1->getText(), S1->getLine()));
+ FSObj->SetHelp (_STOSID(S2->getText(), S2->getLine()));
>>
{
FC:Class "=" classDefinition[C] "," << {CIfrClass CObj;SET_LINE_INFO (CObj, FC); CObj.SetClass(C);} >>
@@ -656,25 +656,25 @@
Uuid "=" guidDefinition[Guid]
{"," DataType "="
(
- U64:"UINT64" {OpenBracket AN1:Number CloseBracket <<ArrayNum = _STOU32(AN1->getText());>>}
+ U64:"UINT64" {OpenBracket AN1:Number CloseBracket <<ArrayNum = _STOU32(AN1->getText(), AN1->getLine());>>}
<< TypeName = U64->getText(); LineNum = U64->getLine(); >>
- | U32:"UINT32" {OpenBracket AN2:Number CloseBracket <<ArrayNum = _STOU32(AN2->getText());>>}
+ | U32:"UINT32" {OpenBracket AN2:Number CloseBracket <<ArrayNum = _STOU32(AN2->getText(), AN2->getLine());>>}
<< TypeName = U32->getText(); LineNum = U32->getLine(); >>
- | U16:"UINT16" {OpenBracket AN3:Number CloseBracket <<ArrayNum = _STOU32(AN3->getText());>>}
+ | U16:"UINT16" {OpenBracket AN3:Number CloseBracket <<ArrayNum = _STOU32(AN3->getText(), AN3->getLine());>>}
<< TypeName = U16->getText(); LineNum = U16->getLine(); >>
- | U8:"UINT8" {OpenBracket AN4:Number CloseBracket <<ArrayNum = _STOU32(AN4->getText());>>}
+ | U8:"UINT8" {OpenBracket AN4:Number CloseBracket <<ArrayNum = _STOU32(AN4->getText(), AN4->getLine());>>}
<< TypeName = U8->getText(); LineNum = U8->getLine(); >>
- | BL:"BOOLEAN" {OpenBracket AN5:Number CloseBracket <<ArrayNum = _STOU32(AN5->getText());>>}
+ | BL:"BOOLEAN" {OpenBracket AN5:Number CloseBracket <<ArrayNum = _STOU32(AN5->getText(), AN5->getLine());>>}
<< TypeName = BL->getText(); LineNum = BL->getLine(); >>
- | SI:"EFI_STRING_ID" {OpenBracket AN6:Number CloseBracket <<ArrayNum = _STOU32(AN6->getText());>>}
+ | SI:"EFI_STRING_ID" {OpenBracket AN6:Number CloseBracket <<ArrayNum = _STOU32(AN6->getText(), AN6->getLine());>>}
<< TypeName = SI->getText(); LineNum = SI->getLine(); >>
- | D:"EFI_HII_DATE" {OpenBracket AN7:Number CloseBracket <<ArrayNum = _STOU32(AN7->getText());>>}
+ | D:"EFI_HII_DATE" {OpenBracket AN7:Number CloseBracket <<ArrayNum = _STOU32(AN7->getText(), AN7->getLine());>>}
<< TypeName = D->getText(); LineNum = D->getLine(); IsStruct = TRUE;>>
- | T:"EFI_HII_TIME" {OpenBracket AN8:Number CloseBracket <<ArrayNum = _STOU32(AN8->getText());>>}
+ | T:"EFI_HII_TIME" {OpenBracket AN8:Number CloseBracket <<ArrayNum = _STOU32(AN8->getText(), AN8->getLine());>>}
<< TypeName = T->getText(); LineNum = T->getLine(); IsStruct = TRUE;>>
- | R:"EFI_HII_REF" {OpenBracket AN9:Number CloseBracket <<ArrayNum = _STOU32(AN9->getText());>>}
+ | R:"EFI_HII_REF" {OpenBracket AN9:Number CloseBracket <<ArrayNum = _STOU32(AN9->getText(), AN9->getLine());>>}
<< TypeName = R->getText(); LineNum = R->getLine(); IsStruct = TRUE;>>
- | TN:StringIdentifier {OpenBracket AN10:Number CloseBracket <<ArrayNum = _STOU32(AN10->getText());>>}
+ | TN:StringIdentifier {OpenBracket AN10:Number CloseBracket <<ArrayNum = _STOU32(AN10->getText(), AN10->getLine());>>}
<< TypeName = TN->getText(); LineNum = TN->getLine(); IsStruct = TRUE;>>
)
<<
@@ -738,7 +738,7 @@
<<
ArrayIdx = 0;
if (IsArray == TRUE) {
- ArrayIdx = _STOU8(IDX1->getText());
+ ArrayIdx = _STOU8(IDX1->getText(), IDX1->getLine());
if (ArrayIdx >= ArrayNum) return;
IsArray = FALSE;
}
@@ -769,49 +769,49 @@
<<
if (IsStruct == FALSE) {
if (strcmp ("UINT64", TypeName) == 0) {
- Data_U64 = _STOU64(RD->getText());
+ Data_U64 = _STOU64(RD->getText(), RD->getLine());
memcpy (ByteOffset, &Data_U64, TypeSize);
}else if (strcmp ("UINT32", TypeName) == 0) {
- Data_U32 = _STOU32(RD->getText());
+ Data_U32 = _STOU32(RD->getText(), RD->getLine());
memcpy (ByteOffset, &Data_U32, TypeSize);
}else if (strcmp ("UINT16", TypeName) == 0) {
- Data_U16 = _STOU16(RD->getText());
+ Data_U16 = _STOU16(RD->getText(), RD->getLine());
memcpy (ByteOffset, &Data_U16, TypeSize);
}else if (strcmp ("UINT8", TypeName) == 0) {
- Data_U8 = _STOU8(RD->getText());
+ Data_U8 = _STOU8(RD->getText(), RD->getLine());
memcpy (ByteOffset, &Data_U8, TypeSize);
}else if (strcmp ("BOOLEAN", TypeName)== 0) {
- Data_BL = _STOU8(RD->getText());
+ Data_BL = _STOU8(RD->getText(), RD->getLine());
memcpy (ByteOffset, &Data_BL, TypeSize);
}else if (strcmp ("EFI_STRING_ID", TypeName) == 0) {
- Data_SID = _STOSID(RD->getText());
+ Data_SID = _STOSID(RD->getText(), RD->getLine());
memcpy (ByteOffset, &Data_SID, TypeSize);
}
} else {
gCVfrVarDataTypeDB.GetDataFieldInfo(TFName, FieldOffset, FieldType, FieldSize);
switch (FieldType) {
case EFI_IFR_TYPE_NUM_SIZE_8:
- Data_U8 = _STOU8(RD->getText());
+ Data_U8 = _STOU8(RD->getText(), RD->getLine());
memcpy (ByteOffset + FieldOffset, &Data_U8, FieldSize);
break;
case EFI_IFR_TYPE_NUM_SIZE_16:
- Data_U16 = _STOU16(RD->getText());
+ Data_U16 = _STOU16(RD->getText(), RD->getLine());
memcpy (ByteOffset + FieldOffset, &Data_U16, FieldSize);
break;
case EFI_IFR_TYPE_NUM_SIZE_32:
- Data_U32 = _STOU32(RD->getText());
+ Data_U32 = _STOU32(RD->getText(), RD->getLine());
memcpy (ByteOffset + FieldOffset, &Data_U32, FieldSize);
break;
case EFI_IFR_TYPE_NUM_SIZE_64:
- Data_U64 = _STOU64(RD->getText());
+ Data_U64 = _STOU64(RD->getText(), RD->getLine());
memcpy (ByteOffset + FieldOffset, &Data_U64, FieldSize);
break;
case EFI_IFR_TYPE_BOOLEAN:
- Data_BL = _STOU8(RD->getText());
+ Data_BL = _STOU8(RD->getText(), RD->getLine());
memcpy (ByteOffset + FieldOffset, &Data_BL, FieldSize);
break;
case EFI_IFR_TYPE_STRING:
- Data_SID = _STOSID(RD->getText());
+ Data_SID = _STOSID(RD->getText(), RD->getLine());
memcpy (ByteOffset + FieldOffset, &Data_SID, FieldSize);
break;
default:
@@ -830,17 +830,17 @@
D:DefaultStore N:StringIdentifier ","
Prompt "=" "STRING_TOKEN" "\(" S:Number "\)"
{
- "," Attribute "=" A:Number << DefaultId = _STOU16(A->getText()); >>
+ "," Attribute "=" A:Number << DefaultId = _STOU16(A->getText(), A->getLine()); >>
}
<<
if (mCVfrDefaultStore.DefaultIdRegistered (DefaultId) == FALSE) {
CIfrDefaultStore DSObj;
- _PCATCH(mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), N->getText(), _STOSID(S->getText()), DefaultId)), D->getLine();
+ _PCATCH(mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), N->getText(), _STOSID(S->getText(), S->getLine()), DefaultId)), D->getLine();
DSObj.SetLineNo(D->getLine());
- DSObj.SetDefaultName (_STOSID(S->getText()));
+ DSObj.SetDefaultName (_STOSID(S->getText(), S->getLine()));
DSObj.SetDefaultId (DefaultId);
} else {
- _PCATCH(mCVfrDefaultStore.ReRegisterDefaultStoreById (DefaultId, N->getText(), _STOSID(S->getText()))), D->getLine();
+ _PCATCH(mCVfrDefaultStore.ReRegisterDefaultStoreById (DefaultId, N->getText(), _STOSID(S->getText(), S->getLine()))), D->getLine();
}
>>
";"
@@ -870,14 +870,14 @@
)
{ Key "=" FID:Number "," << // Key is used to assign Varid in Framework VFR but no use in UEFI2.1 VFR
if (mCompatibleMode) {
- VarStoreId = _STOU16(FID->getText());
+ VarStoreId = _STOU16(FID->getText(), FID->getLine());
}
>>
}
{
VarId "=" ID:Number "," <<
_PCATCH(
- (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,
+ (INTN)(VarStoreId = _STOU16(ID->getText(), ID->getLine())) != 0,
(INTN)TRUE,
ID,
"varid 0 is not allowed."
@@ -936,7 +936,7 @@
{
VarId "=" ID:Number "," <<
_PCATCH(
- (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,
+ (INTN)(VarStoreId = _STOU16(ID->getText(), ID->getLine())) != 0,
(INTN)TRUE,
ID,
"varid 0 is not allowed."
@@ -952,11 +952,11 @@
Name "=" "STRING_TOKEN" "\(" VN:Number "\)" ","
VarSize "=" N:Number "," <<
IsUEFI23EfiVarstore = FALSE;
- StoreName = gCVfrStringDB.GetVarStoreNameFormStringId(_STOSID(VN->getText()));
+ StoreName = gCVfrStringDB.GetVarStoreNameFormStringId(_STOSID(VN->getText(), VN->getLine()));
if (StoreName == NULL) {
_PCATCH (VFR_RETURN_UNSUPPORTED, VN->getLine(), "Can't get varstore name for this StringId!");
}
- Size = _STOU32(N->getText());
+ Size = _STOU32(N->getText(), N->getLine());
switch (Size) {
case 1:
TypeName = (CHAR8 *) "UINT8";
@@ -1012,7 +1012,7 @@
;
vfrVarStoreEfiAttr [UINT32 & Attr] :
- N:Number << $Attr |= _STOU32(N->getText()); >>
+ N:Number << $Attr |= _STOU32(N->getText(), N->getLine()); >>
;
vfrStatementVarStoreNameValue :
@@ -1027,7 +1027,7 @@
{
VarId "=" ID:Number "," <<
_PCATCH(
- (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,
+ (INTN)(VarStoreId = _STOU16(ID->getText(), ID->getLine())) != 0,
(INTN)TRUE,
ID,
"varid 0 is not allowed."
@@ -1040,7 +1040,7 @@
_PCATCH(mCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText(), VarStoreId), SN);
Created = TRUE;
}
- _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText())), SN);
+ _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText(), N->getLine())), SN);
>>
)+
Uuid "=" guidDefinition[Guid] << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), SN); >>
@@ -1069,7 +1069,7 @@
| ClassInputDevice << $Class |= EFI_INPUT_DEVICE_CLASS; >>
| ClassOnBoardDevice << $Class |= EFI_ON_BOARD_DEVICE_CLASS; >>
| ClassOtherDevice << $Class |= EFI_OTHER_DEVICE_CLASS; >>
- | N:Number << $Class |= _STOU16(N->getText()); >>
+ | N:Number << $Class |= _STOU16(N->getText(), N->getLine()); >>
;
subclassDefinition[UINT16 & SubClass] :
@@ -1078,7 +1078,7 @@
| SubclassGeneralApplication << $SubClass |= EFI_GENERAL_APPLICATION_SUBCLASS; >>
| SubclassFrontPage << $SubClass |= EFI_FRONT_PAGE_SUBCLASS; >>
| SubclassSingleUse << $SubClass |= EFI_SINGLE_USE_SUBCLASS; >>
- | N:Number << $SubClass |= _STOU16(N->getText()); >>
+ | N:Number << $SubClass |= _STOU16(N->getText(), N->getLine()); >>
;
vfrStatementDisableIfFormSet :
@@ -1113,8 +1113,8 @@
// the syntax of question header and statement header
//
vfrStatementHeader[CIfrStatementHeader *SHObj] :
- Prompt "=" "STRING_TOKEN" "\(" S1:Number "\)" "," << $SHObj->SetPrompt (_STOSID(S1->getText())); >>
- Help "=" "STRING_TOKEN" "\(" S2:Number "\)" << $SHObj->SetHelp (_STOSID(S2->getText())); >>
+ Prompt "=" "STRING_TOKEN" "\(" S1:Number "\)" "," << $SHObj->SetPrompt (_STOSID(S1->getText(), S1->getLine())); >>
+ Help "=" "STRING_TOKEN" "\(" S2:Number "\)" << $SHObj->SetHelp (_STOSID(S2->getText(), S2->getLine())); >>
;
vfrQuestionHeader[CIfrQuestionHeader & QHObj, EFI_QUESION_TYPE QType = QUESTION_NORMAL]:
@@ -1138,7 +1138,7 @@
{ V:VarId "=" vfrStorageVarId[Info, VarIdStr] "," }
{
QuestionId "=" ID:Number "," <<
- QId = _STOQID(ID->getText());
+ QId = _STOQID(ID->getText(), ID->getLine());
_PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "has already been used please assign another number");
>>
}
@@ -1205,7 +1205,7 @@
(
SN1:StringIdentifier << SName = SN1->getText(); _STRCAT(&VarIdStr, SN1->getText()); >>
OpenBracket I1:Number CloseBracket <<
- Idx = _STOU32(I1->getText());
+ Idx = _STOU32(I1->getText(), I1->getLine());
_STRCAT(&VarIdStr, "[");
_STRCAT(&VarIdStr, I1->getText());
_STRCAT(&VarIdStr, "]");
@@ -1267,7 +1267,7 @@
SF:StringIdentifier << _STRCAT(&VarIdStr, SF->getText()); _STRCAT(&VarStr, SF->getText()); >>
{
OpenBracket I2:Number CloseBracket <<
- Idx = _STOU32(I2->getText());
+ Idx = _STOU32(I2->getText(), I2->getLine());
if (mCompatibleMode) Idx --;
if (Idx > 0) {
//
@@ -1347,7 +1347,7 @@
SF:StringIdentifier << _STRCAT (&VarIdStr, SF->getText()); >>
{
OpenBracket I2:Number CloseBracket <<
- Idx = _STOU32(I2->getText());
+ Idx = _STOU32(I2->getText(), I2->getLine());
if (mCompatibleMode) Idx --;
if (Idx > 0) {
//
@@ -1372,22 +1372,22 @@
N1:Number <<
switch ($Type) {
case EFI_IFR_TYPE_NUM_SIZE_8 :
- $Value.u8 = _STOU8(N1->getText());
+ $Value.u8 = _STOU8(N1->getText(), N1->getLine());
break;
case EFI_IFR_TYPE_NUM_SIZE_16 :
- $Value.u16 = _STOU16(N1->getText());
+ $Value.u16 = _STOU16(N1->getText(), N1->getLine());
break;
case EFI_IFR_TYPE_NUM_SIZE_32 :
- $Value.u32 = _STOU32(N1->getText());
+ $Value.u32 = _STOU32(N1->getText(), N1->getLine());
break;
...
[truncated message content] |
|
From: <yd...@us...> - 2014-07-09 02:47:51
|
Revision: 2671
http://sourceforge.net/p/edk2-buildtools/code/2671
Author: ydong10
Date: 2014-07-09 02:47:47 +0000 (Wed, 09 Jul 2014)
Log Message:
-----------
Report warning info if an action opcode has text two statement.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eri...@in...>
Reviewed-by: Liming Gao <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrError.h
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp 2014-06-25 04:59:46 UTC (rev 2670)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp 2014-07-09 02:47:47 UTC (rev 2671)
@@ -52,6 +52,7 @@
static SVFR_WARNING_HANDLE VFR_WARNING_HANDLE_TABLE [] = {
{ VFR_WARNING_DEFAULT_VALUE_REDEFINED, ": default value re-defined with different value"},
{ VFR_WARNING_STRING_TO_UINT_OVERFLOW, ": String to UINT* Overflow"},
+ { VFR_WARNING_ACTION_WITH_TEXT_TWO, ": Action opcode should not have TextTwo part"},
{ VFR_WARNING_CODEUNDEFINED, ": undefined Warning Code" }
};
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrError.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrError.h 2014-06-25 04:59:46 UTC (rev 2670)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrError.h 2014-07-09 02:47:47 UTC (rev 2671)
@@ -50,6 +50,7 @@
typedef enum {
VFR_WARNING_DEFAULT_VALUE_REDEFINED = 0,
VFR_WARNING_STRING_TO_UINT_OVERFLOW,
+ VFR_WARNING_ACTION_WITH_TEXT_TWO,
VFR_WARNING_CODEUNDEFINED
} EFI_VFR_WARNING_CODE;
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2014-06-25 04:59:46 UTC (rev 2670)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2014-07-09 02:47:47 UTC (rev 2671)
@@ -1685,6 +1685,13 @@
}
<<
if (Flags & EFI_IFR_FLAG_CALLBACK) {
+ if (TxtTwo != EFI_STRING_ID_INVALID) {
+ gCVfrErrorHandle.HandleWarning (
+ VFR_WARNING_ACTION_WITH_TEXT_TWO,
+ S3->getLine(),
+ S3->getText()
+ );
+ }
CIfrAction AObj;
mCVfrQuestionDB.RegisterQuestion (NULL, NULL, QId);
AObj.SetLineNo (F->getLine());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <yd...@us...> - 2014-07-16 01:36:13
|
Revision: 2673
http://sourceforge.net/p/edk2-buildtools/code/2673
Author: ydong10
Date: 2014-07-16 01:36:10 +0000 (Wed, 16 Jul 2014)
Log Message:
-----------
Report warning info if vfr file use the flags used for framework code only.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eri...@in...>
Reviewed-by: Liming Gao <lim...@in...>
Modified Paths:
--------------
trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp
trunk/BaseTools/Source/C/VfrCompile/VfrError.h
trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp 2014-07-14 03:02:20 UTC (rev 2672)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrError.cpp 2014-07-16 01:36:10 UTC (rev 2673)
@@ -53,6 +53,7 @@
{ VFR_WARNING_DEFAULT_VALUE_REDEFINED, ": default value re-defined with different value"},
{ VFR_WARNING_STRING_TO_UINT_OVERFLOW, ": String to UINT* Overflow"},
{ 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" }
};
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrError.h
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrError.h 2014-07-14 03:02:20 UTC (rev 2672)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrError.h 2014-07-16 01:36:10 UTC (rev 2673)
@@ -51,6 +51,7 @@
VFR_WARNING_DEFAULT_VALUE_REDEFINED = 0,
VFR_WARNING_STRING_TO_UINT_OVERFLOW,
VFR_WARNING_ACTION_WITH_TEXT_TWO,
+ VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,
VFR_WARNING_CODEUNDEFINED
} EFI_VFR_WARNING_CODE;
Modified: trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g
===================================================================
--- trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2014-07-14 03:02:20 UTC (rev 2672)
+++ trunk/BaseTools/Source/C/VfrCompile/VfrSyntax.g 2014-07-16 01:36:10 UTC (rev 2673)
@@ -1184,9 +1184,35 @@
ReadOnlyFlag << $Flags |= 0x01; >>
| InteractiveFlag << $Flags |= 0x04; >>
| ResetRequiredFlag << $Flags |= 0x10; >>
- | OptionOnlyFlag << $Flags |= 0x80; >>
- | NVAccessFlag
- | LateCheckFlag
+ | O:OptionOnlyFlag <<
+ if (mCompatibleMode) {
+ $Flags |= 0x80;
+ } else {
+ gCVfrErrorHandle.HandleWarning (
+ VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,
+ O->getLine(),
+ O->getText()
+ );
+ }
+ >>
+ | N:NVAccessFlag <<
+ if (!mCompatibleMode) {
+ gCVfrErrorHandle.HandleWarning (
+ VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,
+ N->getLine(),
+ N->getText()
+ );
+ }
+ >>
+ | L:LateCheckFlag <<
+ if (!mCompatibleMode) {
+ gCVfrErrorHandle.HandleWarning (
+ VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,
+ L->getLine(),
+ L->getText()
+ );
+ }
+ >>
;
vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFlag = TRUE] :
@@ -1617,8 +1643,29 @@
;
flagsField :
- Number | InteractiveFlag | ManufacturingFlag | DefaultFlag |
- NVAccessFlag | ResetRequiredFlag | LateCheckFlag
+ Number
+ | InteractiveFlag
+ | ManufacturingFlag
+ | DefaultFlag
+ | ResetRequiredFlag
+ | N:NVAccessFlag <<
+ if (!mCompatibleMode) {
+ gCVfrErrorHandle.HandleWarning (
+ VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,
+ N->getLine(),
+ N->getText()
+ );
+ }
+ >>
+ | L:LateCheckFlag <<
+ if (!mCompatibleMode) {
+ gCVfrErrorHandle.HandleWarning (
+ VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,
+ L->getLine(),
+ L->getText()
+ );
+ }
+ >>
;
vfrStatementValue :
@@ -3042,11 +3089,31 @@
| "OPTION_DEFAULT" << $LFlags |= 0x10; >>
| "OPTION_DEFAULT_MFG" << $LFlags |= 0x20; >>
| InteractiveFlag << $HFlags |= 0x04; >>
- | NVAccessFlag << $HFlags |= 0x08; >>
| ResetRequiredFlag << $HFlags |= 0x10; >>
- | LateCheckFlag << $HFlags |= 0x20; >>
| ManufacturingFlag << $LFlags |= 0x20; >>
| DefaultFlag << $LFlags |= 0x10; >>
+ | A:NVAccessFlag <<
+ if (mCompatibleMode) {
+ $HFlags |= 0x08;
+ } else {
+ gCVfrErrorHandle.HandleWarning (
+ VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,
+ A->getLine(),
+ A->getText()
+ );
+ }
+ >>
+ | L:LateCheckFlag <<
+ if (mCompatibleMode) {
+ $HFlags |= 0x20;
+ } else {
+ gCVfrErrorHandle.HandleWarning (
+ VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE,
+ L->getLine(),
+ L->getText()
+ );
+ }
+ >>
;
vfrStatementLabel :
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|