]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/VfrCompile/VfrError.cpp
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrError.cpp
index 963bd2da42698659559d1920352cc4cd402eb39e..65bb8e34fde963706a5e8df8a2132abe39e542ad 100644 (file)
@@ -1,15 +1,9 @@
 /** @file\r
-  \r
+\r
   VfrCompiler error handler.\r
 \r
-Copyright (c) 2004 - 2008, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -34,6 +28,7 @@ static SVFR_ERROR_HANDLE VFR_ERROR_HANDLE_TABLE [] = {
   { VFR_RETURN_VARSTOREID_REDEFINED, ": varstore id already defined" },\r
   { VFR_RETURN_UNDEFINED, ": undefined" },\r
   { VFR_RETURN_VAR_NOTDEFINED_BY_QUESTION, ": some variable has not defined by a question"},\r
+  { 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."},\r
   { VFR_RETURN_GET_EFIVARSTORE_ERROR, ": get efi varstore error"},\r
   { VFR_RETURN_EFIVARSTORE_USE_ERROR, ": can not use the efi varstore like this" },\r
   { VFR_RETURN_EFIVARSTORE_SIZE_ERROR, ": unsupport efi varstore size should be <= 8 bytes" },\r
@@ -44,17 +39,29 @@ static SVFR_ERROR_HANDLE VFR_ERROR_HANDLE_TABLE [] = {
   { VFR_RETURN_DATA_STRING_ERROR, ": data field string error or not support"},\r
   { VFR_RETURN_DEFAULT_VALUE_REDEFINED, ": default value re-defined with different value"},\r
   { VFR_RETURN_CONSTANT_ONLY, ": only constant is allowed in the expression"},\r
+  { VFR_RETURN_VARSTORE_NAME_REDEFINED_ERROR, ": Varstore name is defined by more than one varstores, it can't be referred as varstore, only varstore structure name could be used."},\r
+  { VFR_RETURN_BIT_WIDTH_ERROR, ": bit width must be <= sizeof (type) * 8 and the max width can not > 32" },\r
+  { VFR_RETURN_STRING_TO_UINT_OVERFLOW, ": String to UINT* Overflow"},\r
   { VFR_RETURN_CODEUNDEFINED, ": undefined Error Code" }\r
 };\r
 \r
+static SVFR_WARNING_HANDLE VFR_WARNING_HANDLE_TABLE [] = {\r
+  { VFR_WARNING_DEFAULT_VALUE_REDEFINED, ": default value re-defined with different value"},\r
+  { VFR_WARNING_ACTION_WITH_TEXT_TWO, ": Action opcode should not have TextTwo part"},\r
+  { VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ": Not recommend to use obsoleted framework opcode"},\r
+  { VFR_WARNING_CODEUNDEFINED, ": undefined Warning Code" }\r
+};\r
+\r
 CVfrErrorHandle::CVfrErrorHandle (\r
   VOID\r
   )\r
 {\r
-  mInputFileName       = NULL;\r
-  mScopeRecordListHead = NULL;\r
-  mScopeRecordListTail = NULL;\r
-  mVfrErrorHandleTable = VFR_ERROR_HANDLE_TABLE;\r
+  mInputFileName         = NULL;\r
+  mScopeRecordListHead   = NULL;\r
+  mScopeRecordListTail   = NULL;\r
+  mVfrErrorHandleTable   = VFR_ERROR_HANDLE_TABLE;\r
+  mVfrWarningHandleTable = VFR_WARNING_HANDLE_TABLE;\r
+  mWarningAsError        = FALSE;\r
 }\r
 \r
 CVfrErrorHandle::~CVfrErrorHandle (\r
@@ -64,7 +71,7 @@ CVfrErrorHandle::~CVfrErrorHandle (
   SVfrFileScopeRecord *pNode = NULL;\r
 \r
   if (mInputFileName != NULL) {\r
-    delete mInputFileName;\r
+    delete[] mInputFileName;\r
   }\r
 \r
   while (mScopeRecordListHead != NULL) {\r
@@ -73,9 +80,18 @@ CVfrErrorHandle::~CVfrErrorHandle (
     delete pNode;\r
   }\r
 \r
-  mScopeRecordListHead = NULL;\r
-  mScopeRecordListTail = NULL;\r
-  mVfrErrorHandleTable = NULL;\r
+  mScopeRecordListHead   = NULL;\r
+  mScopeRecordListTail   = NULL;\r
+  mVfrErrorHandleTable   = NULL;\r
+  mVfrWarningHandleTable = NULL;\r
+}\r
+\r
+VOID\r
+CVfrErrorHandle::SetWarningAsError (\r
+  IN BOOLEAN  WarningAsError\r
+  )\r
+{\r
+  mWarningAsError = WarningAsError;\r
 }\r
 \r
 VOID\r
@@ -90,7 +106,7 @@ CVfrErrorHandle::SetInputFile (
 }\r
 \r
 SVfrFileScopeRecord::SVfrFileScopeRecord (\r
-  IN CHAR8    *Record, \r
+  IN CHAR8    *Record,\r
   IN UINT32   LineNum\r
   )\r
 {\r
@@ -125,17 +141,16 @@ SVfrFileScopeRecord::~SVfrFileScopeRecord (
   )\r
 {\r
   if (mFileName != NULL) {\r
-    delete mFileName;\r
+    delete[] mFileName;\r
   }\r
 }\r
 \r
 VOID\r
 CVfrErrorHandle::ParseFileScopeRecord (\r
-  IN CHAR8     *Record, \r
+  IN CHAR8     *Record,\r
   IN UINT32    WholeScopeLine\r
   )\r
 {\r
-  CHAR8               *FullPathName = NULL;\r
   SVfrFileScopeRecord *pNode        = NULL;\r
 \r
   if (Record == NULL) {\r
@@ -195,19 +210,19 @@ VOID
 CVfrErrorHandle::PrintMsg (\r
   IN UINT32               LineNum,\r
   IN CHAR8                *TokName,\r
-  IN CHAR8                *MsgType,\r
-  IN CHAR8                *ErrorMsg\r
+  IN CONST CHAR8          *MsgType,\r
+  IN CONST CHAR8          *ErrorMsg\r
   )\r
 {\r
   CHAR8                  *FileName = NULL;\r
   UINT32                 FileLine;\r
-  \r
+\r
   if (strncmp ("Warning", MsgType, strlen ("Warning")) == 0) {\r
-    VerboseMsg (ErrorMsg);\r
+    VerboseMsg ((CHAR8 *) ErrorMsg);\r
     return;\r
   }\r
   GetFileNameLineNum (LineNum, &FileName, &FileLine);\r
-  Error (FileName, FileLine, 0x3000, TokName, "\t%s\n", ErrorMsg);\r
+  Error (FileName, FileLine, 0x3000, TokName, (CHAR8 *) "\t%s\n", (CHAR8 *) ErrorMsg);\r
 }\r
 \r
 UINT8\r
@@ -220,7 +235,7 @@ CVfrErrorHandle::HandleError (
   UINT32                 Index;\r
   CHAR8                  *FileName = NULL;\r
   UINT32                 FileLine;\r
-  CHAR8                  *ErrorMsg = NULL;\r
+  CONST CHAR8            *ErrorMsg = NULL;\r
 \r
   if (mVfrErrorHandleTable == NULL) {\r
     return 1;\r
@@ -235,7 +250,44 @@ CVfrErrorHandle::HandleError (
 \r
   if (ErrorMsg != NULL) {\r
     GetFileNameLineNum (LineNum, &FileName, &FileLine);\r
-    Error (FileName, FileLine, 0x3000, TokName, "\t%s\n", ErrorMsg);\r
+    Error (FileName, FileLine, 0x3000, TokName, (CHAR8 *) "\t%s\n", (CHAR8 *) ErrorMsg);\r
+    return 1;\r
+  } else {\r
+    return 0;\r
+  }\r
+}\r
+\r
+UINT8\r
+CVfrErrorHandle::HandleWarning (\r
+  IN EFI_VFR_WARNING_CODE WarningCode,\r
+  IN UINT32               LineNum,\r
+  IN CHAR8                *TokName\r
+  )\r
+{\r
+  UINT32                 Index;\r
+  CHAR8                  *FileName = NULL;\r
+  UINT32                 FileLine;\r
+  CONST CHAR8            *WarningMsg = NULL;\r
+\r
+  if (mVfrWarningHandleTable == NULL) {\r
+    return 1;\r
+  }\r
+\r
+  GetFileNameLineNum (LineNum, &FileName, &FileLine);\r
+\r
+  if (mWarningAsError) {\r
+    Error (FileName, FileLine, 0x2220, (CHAR8 *) "warning treated as error", NULL);\r
+  }\r
+\r
+  for (Index = 0; mVfrWarningHandleTable[Index].mWarningCode != VFR_WARNING_CODEUNDEFINED; Index++) {\r
+    if (WarningCode == mVfrWarningHandleTable[Index].mWarningCode) {\r
+      WarningMsg = mVfrWarningHandleTable[Index].mWarningMsg;\r
+      break;\r
+    }\r
+  }\r
+\r
+  if (WarningMsg != NULL) {\r
+    Warning (FileName, FileLine, 0, TokName, (CHAR8 *) "\t%s\n", (CHAR8 *) WarningMsg);\r
     return 1;\r
   } else {\r
     return 0;\r