]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Sync BaseTool trunk (version r2670) into EDKII BaseTools.
authorGao, Liming <liming.gao@intel.com>
Tue, 1 Jul 2014 07:10:10 +0000 (07:10 +0000)
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 1 Jul 2014 07:10:10 +0000 (07:10 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Gao, Liming <liming.gao@intel.com>
Reviewed-by: Liu, Yingke D (yingke.d.liu@intel.com)
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15605 6f19259b-4bc3-4df7-8a09-765794883524

53 files changed:
BaseTools/Bin/Win32/BPDG.exe
BaseTools/Bin/Win32/BootSectImage.exe
BaseTools/Bin/Win32/EfiLdrImage.exe
BaseTools/Bin/Win32/EfiRom.exe
BaseTools/Bin/Win32/GenBootSector.exe
BaseTools/Bin/Win32/GenCrc32.exe
BaseTools/Bin/Win32/GenDepex.exe
BaseTools/Bin/Win32/GenFds.exe
BaseTools/Bin/Win32/GenFfs.exe
BaseTools/Bin/Win32/GenFv.exe
BaseTools/Bin/Win32/GenFw.exe
BaseTools/Bin/Win32/GenPage.exe
BaseTools/Bin/Win32/GenPatchPcdTable.exe
BaseTools/Bin/Win32/GenSec.exe
BaseTools/Bin/Win32/GenVtf.exe
BaseTools/Bin/Win32/LzmaCompress.exe
BaseTools/Bin/Win32/PatchPcdValue.exe
BaseTools/Bin/Win32/Split.exe
BaseTools/Bin/Win32/TargetTool.exe
BaseTools/Bin/Win32/TianoCompress.exe
BaseTools/Bin/Win32/Trim.exe
BaseTools/Bin/Win32/UPT.exe
BaseTools/Bin/Win32/VfrCompile.exe
BaseTools/Bin/Win32/VolInfo.exe
BaseTools/Bin/Win32/build.exe
BaseTools/Conf/build_rule.template
BaseTools/Conf/tools_def.template
BaseTools/Source/C/Common/FirmwareVolumeBuffer.c
BaseTools/Source/C/Common/FirmwareVolumeBufferLib.h
BaseTools/Source/C/GNUmakefile
BaseTools/Source/C/Include/Common/BuildVersion.h
BaseTools/Source/C/VfrCompile/GNUmakefile
BaseTools/Source/C/VfrCompile/VfrCompiler.cpp
BaseTools/Source/C/VfrCompile/VfrCompiler.h
BaseTools/Source/C/VfrCompile/VfrError.cpp
BaseTools/Source/C/VfrCompile/VfrError.h
BaseTools/Source/C/VfrCompile/VfrFormPkg.h
BaseTools/Source/C/VfrCompile/VfrSyntax.g
BaseTools/Source/C/VolInfo/VolInfo.c
BaseTools/Source/Python/Common/BuildVersion.py
BaseTools/Source/Python/Common/Parsing.py
BaseTools/Source/Python/Ecc/Configuration.py
BaseTools/Source/Python/Ecc/Ecc.py
BaseTools/Source/Python/Ecc/MetaFileWorkspace/MetaFileParser.py
BaseTools/Source/Python/Ecc/config.ini
BaseTools/Source/Python/GenFds/GenFds.py
BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py
BaseTools/Source/Python/UPT/BuildVersion.py
BaseTools/Source/Python/UPT/Library/String.py
BaseTools/Source/Python/UPT/Xml/ModuleSurfaceAreaXml.py
BaseTools/Source/Python/Workspace/WorkspaceDatabase.py
BaseTools/get_vsvars.bat [new file with mode: 0644]
BaseTools/toolsetup.bat

index 7e7a62192f44e482852065f04934f7aba3c342c5..222e52bcead52b4632e61f990f19b809cec6fc19 100644 (file)
Binary files a/BaseTools/Bin/Win32/BPDG.exe and b/BaseTools/Bin/Win32/BPDG.exe differ
index a2ea5caf229f039e00e55253d9fd1599d02696e0..aac7706705563d07424ca390bc545de41a4990e6 100755 (executable)
Binary files a/BaseTools/Bin/Win32/BootSectImage.exe and b/BaseTools/Bin/Win32/BootSectImage.exe differ
index a417b3052f097a717a6f0ba7db3ffec34d6e4043..8bc61c258574be5d035f1ceb07c20ff99f65f70f 100755 (executable)
Binary files a/BaseTools/Bin/Win32/EfiLdrImage.exe and b/BaseTools/Bin/Win32/EfiLdrImage.exe differ
index 306e2da4cfb73474342196cdd337ae68120e8abc..7808b32aa1c41162387662f185ccb90690ad9d23 100755 (executable)
Binary files a/BaseTools/Bin/Win32/EfiRom.exe and b/BaseTools/Bin/Win32/EfiRom.exe differ
index c87126002e8d6702dc706a1cf80967d1e2e06fa3..ccabd1fd741cf5baa4a6785172c07823cdd0a84b 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenBootSector.exe and b/BaseTools/Bin/Win32/GenBootSector.exe differ
index 3d21de0df4aa59a533a333fe271cee0d730bfa2f..6d8bbfe59bf49d92df65a1c44b2bf11166d6d14c 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenCrc32.exe and b/BaseTools/Bin/Win32/GenCrc32.exe differ
index 540efbdd3bb2877d48463ada36b19e00eccc476e..38d91131c79b0f715415292086d25ada32550824 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenDepex.exe and b/BaseTools/Bin/Win32/GenDepex.exe differ
index 0fe530a57f96180a87dcb46eebac7b82d241bb48..afea542c8840d54ac9859f639986f786c4a3c6af 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFds.exe and b/BaseTools/Bin/Win32/GenFds.exe differ
index bd8d39f347035428355a87322b4bdc78be4f5315..15cffc364a520c15e989d666e44a4da36e6f6a04 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFfs.exe and b/BaseTools/Bin/Win32/GenFfs.exe differ
index e41175ec64ead24b79dbf6d49c542e06f732a32c..45158874d7511a5613d120a97cba7441a595c448 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFv.exe and b/BaseTools/Bin/Win32/GenFv.exe differ
index 1c262ce07decca9d266ebb245987ebac8e7c015c..61d9d03c85c792c59e6956087bf68120cf331257 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenFw.exe and b/BaseTools/Bin/Win32/GenFw.exe differ
index ff4a21b255276183e6878afe449abfae155ce22c..5b85562e1677eb8665dd46ab88591a5c01e44717 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenPage.exe and b/BaseTools/Bin/Win32/GenPage.exe differ
index 6195250cf1e6f4a5b65bdd69114c3a9e1a1a1970..fd62d838412d9b2f072037ed130c1f737b5ff04f 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenPatchPcdTable.exe and b/BaseTools/Bin/Win32/GenPatchPcdTable.exe differ
index 8ee01992360eb87496f4183e78b6909526f22ee2..ed5a94d85170a72d512f306ef0386230cf53ac5e 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenSec.exe and b/BaseTools/Bin/Win32/GenSec.exe differ
index f3689914fe0fdaaba021332f52ee82746ca494f1..e3f3d0701a31b8bafeda076ec125630ff5e61db1 100755 (executable)
Binary files a/BaseTools/Bin/Win32/GenVtf.exe and b/BaseTools/Bin/Win32/GenVtf.exe differ
index f6dd28acf16ce20e48f1438c731c1610330c1292..6726fcc4ea038d08047ec32f02874c14ed043cce 100755 (executable)
Binary files a/BaseTools/Bin/Win32/LzmaCompress.exe and b/BaseTools/Bin/Win32/LzmaCompress.exe differ
index 00d66c98c4e87fec8d1a585a0371c964f8d5ff4c..7e14dc538ca22f92f73faacfac1b465c3e995c23 100755 (executable)
Binary files a/BaseTools/Bin/Win32/PatchPcdValue.exe and b/BaseTools/Bin/Win32/PatchPcdValue.exe differ
index c8b56ecacf9b7ce125ba2c26a5682e1f890e2ac8..a312ca4b24c62073386fef82e4193b258594a93f 100755 (executable)
Binary files a/BaseTools/Bin/Win32/Split.exe and b/BaseTools/Bin/Win32/Split.exe differ
index eb436e2de59f435adebd9734b11d3878b1f13a4a..2c523513c6f104a8b700d720632c7a99f07b9060 100755 (executable)
Binary files a/BaseTools/Bin/Win32/TargetTool.exe and b/BaseTools/Bin/Win32/TargetTool.exe differ
index d48a3e1e1f73271d499820fab6ffa8ad9404112f..1ca5c5a6aa768471d48ff9b96a6ba590e3bdd8dd 100755 (executable)
Binary files a/BaseTools/Bin/Win32/TianoCompress.exe and b/BaseTools/Bin/Win32/TianoCompress.exe differ
index 18ff1a6276b7ab7d2234e1f637a0a528da2c0011..757a67c424b20c63bc224958581b4433d0bec56f 100755 (executable)
Binary files a/BaseTools/Bin/Win32/Trim.exe and b/BaseTools/Bin/Win32/Trim.exe differ
index 684e12bb7cce705dfa6df90b96d13105c2372167..f6d9cf58bef2e1373a1f16055fc769807698628a 100644 (file)
Binary files a/BaseTools/Bin/Win32/UPT.exe and b/BaseTools/Bin/Win32/UPT.exe differ
index c177920caa7592224c64c9e6427f038fcbc9e868..723cccf14406234045cc15a4e0806ee74efe3ff0 100755 (executable)
Binary files a/BaseTools/Bin/Win32/VfrCompile.exe and b/BaseTools/Bin/Win32/VfrCompile.exe differ
index cfc971a97221d7c95d0995a029ab3bd6ac9e388b..2309b031baba15d3a161b2e2480a1e87119baa9f 100755 (executable)
Binary files a/BaseTools/Bin/Win32/VolInfo.exe and b/BaseTools/Bin/Win32/VolInfo.exe differ
index 5953fa3d044d55bfb55c3c521649638ed7fcd8a8..ac2872e96e7638e6f28b9502f61a44ef3054d06b 100755 (executable)
Binary files a/BaseTools/Bin/Win32/build.exe and b/BaseTools/Bin/Win32/build.exe differ
index 6537108cad0a9f0bc27e703f0acb377ff0269e61..c1c0d4cca6e3a54d6227756a6a3b1de73a867ba4 100644 (file)
@@ -1,5 +1,5 @@
 #\r
-#  Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>\r
+#  Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>\r
 #  Portions copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>\r
 #  This program and the accompanying materials\r
 #  are licensed and made available under the terms and conditions of the BSD License\r
         "$(DLINK)" /OUT:${dst} $(DLINK_FLAGS) $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST)\r
 \r
     <Command.GCC>\r
-        "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -\( $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST) -\) $(DLINK2_FLAGS)\r
+        "$(DLINK)" -o ${dst} $(DLINK_FLAGS) --start-group $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST) --end-group $(DLINK2_FLAGS)\r
         "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}\r
 \r
     <Command.ARMGCC, Command.ARMLINUXGCC>\r
-        "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -\( $(DLINK_SPATH) $(STATIC_LIBRARY_FILES) -\) $(DLINK2_FLAGS)\r
+        "$(DLINK)" -o ${dst} $(DLINK_FLAGS) --start-group $(DLINK_SPATH) $(STATIC_LIBRARY_FILES) --end-group $(DLINK2_FLAGS)\r
 \r
     <Command.RVCT>\r
         "$(DLINK)" $(DLINK_FLAGS) -o ${dst} $(DLINK_SPATH) --via $(STATIC_LIBRARY_FILES_LIST) $(DLINK2_FLAGS)\r
         "$(DLINK)" $(DLINK_FLAGS) $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST)\r
 \r
     <Command.GCC>\r
-        "$(DLINK)" $(DLINK_FLAGS) -\( $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST) -\) $(DLINK2_FLAGS)\r
+        "$(DLINK)" $(DLINK_FLAGS) --start-group $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST) --end-group $(DLINK2_FLAGS)\r
 \r
     <Command.ARMGCC, Command.ARMLINUXGCC>\r
-        "$(DLINK)" $(DLINK_FLAGS) -\( $(DLINK_SPATH) $(STATIC_LIBRARY_FILES) -\) $(DLINK2_FLAGS)\r
+        "$(DLINK)" $(DLINK_FLAGS) --start-group $(DLINK_SPATH) $(STATIC_LIBRARY_FILES) --end-group $(DLINK2_FLAGS)\r
 \r
     <Command.RVCT>\r
         "$(DLINK)" $(DLINK_FLAGS) -o ${dst} $(DLINK_SPATH) --via $(STATIC_LIBRARY_FILES_LIST) $(DLINK2_FLAGS)\r
     <Command.GCC>\r
         Trim --asl-file -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i -i $(INC_LIST) ${src}\r
         "$(ASLPP)" $(ASLPP_FLAGS) $(INC) -I${s_path} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii\r
-        "$(ASL)" $(ASL_FLAGS) $(ASL_OUTFLAGS)${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii\r
+        Trim --source-code -l -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iiii $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii \r
+        "$(ASL)" $(ASL_FLAGS) $(ASL_OUTFLAGS)${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iiii\r
 \r
 [C-Code-File.AcpiTable]\r
     <InputFile>\r
       "$(PP)" $(PP_FLAGS) $(INC) ${src} > ${d_path}(+)${s_base}.i\r
       Trim --source-code -o ${d_path}(+)${s_base}.iii ${d_path}(+)${s_base}.i\r
       "$(ASM)" -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj $(ASM_FLAGS) $(INC) ${d_path}(+)${s_base}.iii\r
-      "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -\( $(DLINK_SPATH) $(LIBS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj -\)\r
+      "$(DLINK)" -o ${dst} $(DLINK_FLAGS) --start-group $(DLINK_SPATH) $(LIBS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj --end-group\r
      \r
     <Command.XCODE>\r
       "$(PP)" $(PP_FLAGS) $(INC) ${src} > ${d_path}(+)${s_base}.i\r
index a68218deac441720af392d1c8756e59569513108..f99ddf60ea7e5f085eb052d5b575b80aae7f2078 100644 (file)
@@ -1,5 +1,5 @@
 #\r
-#  Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>\r
+#  Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
 #  Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
 #  Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>\r
 #\r
@@ -162,8 +162,7 @@ DEFINE GCC47_X64_PREFIX        = /usr/bin/
 DEFINE GCC48_IA32_PREFIX       = /usr/bin/\r
 DEFINE GCC48_X64_PREFIX        = /usr/bin/\r
 \r
-DEFINE UNIX_IASL_BIN           = /usr/bin/iasl\r
-#DEFINE UNIX_IASL_BIN           = $(HOME)/programs/iasl\r
+DEFINE UNIX_IASL_BIN           = ENV(IASL_PREFIX)iasl\r
 DEFINE WIN_ASL_BIN_DIR         = C:\ASL\r
 DEFINE WIN_IASL_BIN            = DEF(WIN_ASL_BIN_DIR)\iasl.exe\r
 DEFINE WIN_ASL_BIN             = DEF(WIN_ASL_BIN_DIR)\asl.exe\r
@@ -2875,6 +2874,7 @@ NOOPT_VS2012x86xASL_X64_DLINK_FLAGS    = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT
 #   ASL  - Intel ACPI Source Language Compiler (iasl.exe)\r
 *_DDK3790_*_*_FAMILY        = MSFT\r
 \r
+*_DDK3790_*_*_DLL           = DEF(WINDDK_BIN32)\r
 *_DDK3790_*_MAKE_PATH       = DEF(WINDDK_BIN32)\nmake.exe\r
 *_DDK3790_*_MAKE_FLAGS           = /nologo\r
 *_DDK3790_*_RC_PATH         = DEF(WINDDK_BIN32)\rc.exe\r
@@ -3000,6 +3000,7 @@ NOOPT_DDK3790_IPF_DLINK_FLAGS    = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT:REF,ICF
 #   ASL          - Microsoft ACPI Source Language Compiler (asl.exe)\r
 *_DDK3790xASL_*_*_FAMILY        = MSFT\r
 \r
+*_DDK3790xASL_*_*_DLL           = DEF(WINDDK_BIN32)\r
 *_DDK3790xASL_*_MAKE_PATH       = DEF(WINDDK_BIN32)\nmake.exe\r
 *_DDK3790xASL_*_MAKE_FLAGS           = /nologo\r
 *_DDK3790xASL_*_RC_PATH         = DEF(WINDDK_BIN32)\rc.exe\r
@@ -3127,7 +3128,7 @@ NOOPT_DDK3790xASL_IPF_DLINK_FLAGS    = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT:REF
 DEBUG_*_*_OBJCOPY_ADDDEBUGFLAG     = --add-gnu-debuglink=$(DEBUG_DIR)\$(MODULE_NAME).debug\r
 RELEASE_*_*_OBJCOPY_ADDDEBUGFLAG   =\r
 \r
-DEFINE GCC_ALL_CC_FLAGS            = -g -Os -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-missing-braces -Wno-array-bounds -c -include AutoGen.h\r
+DEFINE GCC_ALL_CC_FLAGS            = -g -Os -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-array-bounds -c -include AutoGen.h\r
 DEFINE GCC_IA32_CC_FLAGS           = DEF(GCC_ALL_CC_FLAGS) -m32 -malign-double -freorder-blocks -freorder-blocks-and-partition -O2 -mno-stack-arg-probe\r
 DEFINE GCC_X64_CC_FLAGS            = DEF(GCC_ALL_CC_FLAGS) -mno-red-zone -Wno-address -mno-stack-arg-probe\r
 DEFINE GCC_IPF_CC_FLAGS            = DEF(GCC_ALL_CC_FLAGS) -minline-int-divide-min-latency\r
@@ -3154,7 +3155,7 @@ DEFINE GCC_IPF_RC_FLAGS            = -I binary -O elf64-ia64-little   -B ia64
 DEFINE GCC_ARM_RC_FLAGS            = -I binary -O elf32-littlearm     -B arm     --rename-section .data=.hii\r
 DEFINE GCC_AARCH64_RC_FLAGS        = -I binary -O elf64-littleaarch64 -B aarch64 --rename-section .data=.hii\r
 \r
-DEFINE GCC44_ALL_CC_FLAGS            = -g -fshort-wchar -fno-stack-protector -fno-strict-aliasing -Wall -Werror -Wno-missing-braces -Wno-array-bounds -ffunction-sections -fdata-sections -c -include AutoGen.h -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings\r
+DEFINE GCC44_ALL_CC_FLAGS            = -g -fshort-wchar -fno-stack-protector -fno-strict-aliasing -Wall -Werror -Wno-array-bounds -ffunction-sections -fdata-sections -c -include AutoGen.h -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings\r
 DEFINE GCC44_IA32_CC_FLAGS           = DEF(GCC44_ALL_CC_FLAGS) -m32 -malign-double -D EFI32\r
 DEFINE GCC44_X64_CC_FLAGS            = DEF(GCC44_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -DNO_BUILTIN_VA_FUNCS -mno-red-zone -Wno-address -mcmodel=large\r
 DEFINE GCC44_IA32_X64_DLINK_COMMON   = -nostdlib -n -q --gc-sections --script=$(EDK_TOOLS_PATH)/Scripts/gcc4.4-ld-script\r
@@ -4036,7 +4037,7 @@ RELEASE_GCC48_AARCH64_CC_FLAGS   = DEF(GCC48_AARCH64_CC_FLAGS) -Wno-unused-but-s
 *_ELFGCC_X64_VFRPP_PATH            = DEF(ELFGCC_BIN)/gcc\r
 *_ELFGCC_X64_RC_PATH               = DEF(ELFGCC_BIN)/objcopy\r
 \r
-*_ELFGCC_X64_CC_FLAGS              = -Os -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-missing-braces -Wno-address -Wno-array-bounds -c -include AutoGen.h -D_EFI_P64\r
+*_ELFGCC_X64_CC_FLAGS              = -Os -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-address -Wno-array-bounds -c -include AutoGen.h -D_EFI_P64\r
 *_ELFGCC_X64_DLINK_FLAGS           = -nostdlib --shared --entry $(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map\r
 *_ELFGCC_X64_SLINK_FLAGS           =\r
 *_ELFGCC_X64_ASM_FLAGS             = -c -x assembler -imacros $(DEST_DIR_DEBUG)/AutoGen.h\r
index 92060e2ca1008510fd64bc5b17ade5eac9282505..fa6ca6bd6d192581bbcd603ec5e5f02272994ddf 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 1999 - 2008, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved.<BR>\r
 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
@@ -32,6 +32,37 @@ Abstract:
         ) \\r
     )\r
 \r
+STATIC\r
+UINT32\r
+FvBufGetSecHdrLen(\r
+   IN EFI_COMMON_SECTION_HEADER *SectionHeader\r
+   )\r
+{\r
+  if (SectionHeader == NULL) {\r
+    return 0;\r
+  }\r
+  if (FvBufExpand3ByteSize(SectionHeader->Size) == 0xffffff) {\r
+    return sizeof(EFI_COMMON_SECTION_HEADER2);\r
+  }\r
+  return sizeof(EFI_COMMON_SECTION_HEADER);\r
+}\r
+\r
+STATIC\r
+UINT32\r
+FvBufGetSecFileLen (\r
+  IN EFI_COMMON_SECTION_HEADER *SectionHeader\r
+  )\r
+{\r
+  UINT32 Length;\r
+  if (SectionHeader == NULL) {\r
+    return 0;\r
+  }\r
+  Length = FvBufExpand3ByteSize(SectionHeader->Size);\r
+  if (Length == 0xffffff) {\r
+    Length = ((EFI_COMMON_SECTION_HEADER2 *)SectionHeader)->ExtendedSize;\r
+  }\r
+  return Length;\r
+}\r
 \r
 //\r
 // Local prototypes\r
@@ -92,7 +123,7 @@ Returns:
     return Status;\r
   }\r
 \r
-  FileToRmLength = FvBufExpand3ByteSize (FileToRm->Size);\r
+  FileToRmLength = FvBufGetFfsFileSize (FileToRm);\r
 \r
   CommonLibBinderSetMem (\r
     FileToRm,\r
@@ -218,7 +249,7 @@ Returns:
   EFI_FFS_FILE_STATE StateBackup;\r
   UINT32 FileSize;\r
 \r
-  FileSize = FvBufExpand3ByteSize (File->Size);\r
+  FileSize = FvBufGetFfsFileSize (File);\r
 \r
   //\r
   // Fill in checksums and state, they must be 0 for checksumming.\r
@@ -231,13 +262,13 @@ Returns:
   File->IntegrityCheck.Checksum.Header =\r
     FvBufCalculateChecksum8 (\r
       (UINT8 *) File,\r
-      sizeof (EFI_FFS_FILE_HEADER)\r
+      FvBufGetFfsHeaderSize (File)\r
       );\r
 \r
   if (File->Attributes & FFS_ATTRIB_CHECKSUM) {\r
     File->IntegrityCheck.Checksum.File = FvBufCalculateChecksum8 (\r
-                                                (VOID*)(File + 1),\r
-                                                FileSize - sizeof (EFI_FFS_FILE_HEADER)\r
+                                                (VOID*)((UINT8 *)File + FvBufGetFfsHeaderSize (File)),\r
+                                                FileSize - FvBufGetFfsHeaderSize (File)\r
                                                 );\r
   } else {\r
     File->IntegrityCheck.Checksum.File = FFS_FIXED_CHECKSUM;\r
@@ -568,7 +599,7 @@ Returns:
   }\r
 \r
   FvbAttributes = hdr->Attributes;\r
-  newSize = FvBufExpand3ByteSize (((EFI_FFS_FILE_HEADER*)File)->Size);\r
+  newSize = FvBufGetFfsFileSize ((EFI_FFS_FILE_HEADER*)File);\r
 \r
   for(\r
       offset = (UINTN)ALIGN_POINTER (hdr->HeaderLength, 8);\r
@@ -587,7 +618,7 @@ Returns:
       // BUGBUG: Need to make sure that the new file does not already\r
       // exist.\r
 \r
-      fsize = FvBufExpand3ByteSize (fhdr->Size);\r
+      fsize = FvBufGetFfsFileSize (fhdr);\r
       if (fsize == 0 || (offset + fsize > fvSize)) {\r
         return EFI_VOLUME_CORRUPTED;\r
       }\r
@@ -725,7 +756,7 @@ Returns:
   }\r
 \r
   erasedUint8 = (UINT8)((hdr->Attributes & EFI_FVB2_ERASE_POLARITY) ? 0xFF : 0);\r
-  NewFileSize = FvBufExpand3ByteSize (((EFI_FFS_FILE_HEADER*)File)->Size);\r
+  NewFileSize = FvBufGetFfsFileSize ((EFI_FFS_FILE_HEADER*)File);\r
 \r
   if (NewFileSize != (UINTN)ALIGN_POINTER (NewFileSize, 8)) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -739,7 +770,7 @@ Returns:
   LastFileSize = 0;\r
   do {\r
     Status = FvBufFindNextFile (Fv, &Key, (VOID **)&LastFile);\r
-    LastFileSize = FvBufExpand3ByteSize (((EFI_FFS_FILE_HEADER*)File)->Size);\r
+    LastFileSize = FvBufGetFfsFileSize ((EFI_FFS_FILE_HEADER*)File);\r
   } while (!EFI_ERROR (Status));\r
 \r
   //\r
@@ -811,6 +842,64 @@ Returns:
   ((UINT8*)SizeDest)[2] = (UINT8)(Size >> 16);\r
 }\r
 \r
+UINT32\r
+FvBufGetFfsFileSize (\r
+  IN EFI_FFS_FILE_HEADER *Ffs\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Get the FFS file size.\r
+\r
+Arguments:\r
+\r
+  Ffs - Pointer to FFS header\r
+\r
+Returns:\r
+\r
+  UINT32\r
+\r
+--*/\r
+{\r
+  if (Ffs == NULL) {\r
+    return 0;\r
+  }\r
+  if (Ffs->Attributes & FFS_ATTRIB_LARGE_FILE) {\r
+    return ((EFI_FFS_FILE_HEADER2 *)Ffs)->ExtendedSize;\r
+  }\r
+  return FvBufExpand3ByteSize(Ffs->Size);\r
+}\r
+\r
+UINT32\r
+FvBufGetFfsHeaderSize (\r
+  IN EFI_FFS_FILE_HEADER *Ffs\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Get the FFS header size.\r
+\r
+Arguments:\r
+\r
+  Ffs - Pointer to FFS header\r
+\r
+Returns:\r
+\r
+  UINT32\r
+\r
+--*/\r
+{\r
+  if (Ffs == NULL) {\r
+    return 0;\r
+  }\r
+  if (Ffs->Attributes & FFS_ATTRIB_LARGE_FILE) {\r
+    return sizeof(EFI_FFS_FILE_HEADER2);\r
+  }\r
+  return sizeof(EFI_FFS_FILE_HEADER);\r
+}\r
+\r
 UINT32\r
 FvBufExpand3ByteSize (\r
   IN VOID* Size\r
@@ -897,7 +986,7 @@ Returns:
     ) {\r
 \r
     fhdr = (EFI_FFS_FILE_HEADER*) ((UINT8*)hdr + *Key);\r
-    fsize = FvBufExpand3ByteSize (fhdr->Size);\r
+    fsize = FvBufGetFfsFileSize (fhdr);\r
 \r
     if (!EFI_TEST_FFS_ATTRIBUTES_BIT(\r
           FvbAttributes,\r
@@ -1089,8 +1178,8 @@ Returns:
     //\r
     // Raw filetypes don't have sections, so we just return the raw data\r
     //\r
-    *RawData = (VOID*)(File + 1);\r
-    *RawDataSize = FvBufExpand3ByteSize (File->Size) - sizeof (*File);\r
+    *RawData = (VOID*)((UINT8 *)File + FvBufGetFfsHeaderSize (File));\r
+    *RawDataSize = FvBufGetFfsFileSize (File) - FvBufGetFfsHeaderSize (File);\r
     return EFI_SUCCESS;\r
   }\r
 \r
@@ -1102,9 +1191,9 @@ Returns:
     return Status;\r
   }\r
 \r
-  *RawData = (VOID*)(Section + 1);\r
+  *RawData = (VOID*)((UINT8 *)Section + FvBufGetSecHdrLen(Section));\r
   *RawDataSize =\r
-    FvBufExpand3ByteSize (Section->Size) - sizeof (*Section);\r
+    FvBufGetSecFileLen (Section) - FvBufGetSecHdrLen(Section);\r
 \r
   return EFI_SUCCESS;\r
 \r
@@ -1144,16 +1233,28 @@ Returns:
   UINT32 NewFileSize;\r
   EFI_RAW_SECTION* NewSection;\r
   UINT32 NewSectionSize;\r
+  UINT32 FfsHdrLen;\r
+  UINT32 SecHdrLen;\r
 \r
   //\r
   // The section size is the DataSize + the size of the section header\r
   //\r
   NewSectionSize = (UINT32)sizeof (EFI_RAW_SECTION) + (UINT32)RawDataSize;\r
+  SecHdrLen = sizeof (EFI_RAW_SECTION);\r
+  if (NewSectionSize >= MAX_SECTION_SIZE) {\r
+    NewSectionSize = (UINT32)sizeof (EFI_RAW_SECTION2) + (UINT32)RawDataSize;\r
+    SecHdrLen = sizeof (EFI_RAW_SECTION2);\r
+  }\r
 \r
   //\r
   // The file size is the size of the file header + the section size\r
   //\r
   NewFileSize = sizeof (EFI_FFS_FILE_HEADER) + NewSectionSize;\r
+  FfsHdrLen = sizeof (EFI_FFS_FILE_HEADER);\r
+  if (NewFileSize >= MAX_FFS_SIZE) {\r
+    NewFileSize = sizeof (EFI_FFS_FILE_HEADER2) + NewSectionSize;\r
+    FfsHdrLen = sizeof (EFI_FFS_FILE_HEADER2);\r
+  }\r
 \r
   //\r
   // Try to allocate a buffer to build the new FFS file in\r
@@ -1167,24 +1268,35 @@ Returns:
   //\r
   // The NewSection follow right after the FFS file header\r
   //\r
-  NewSection = (EFI_RAW_SECTION*)(NewFile + 1);\r
-  FvBufCompact3ByteSize (NewSection->Size, NewSectionSize);\r
+  NewSection = (EFI_RAW_SECTION*)((UINT8*)NewFile + FfsHdrLen);\r
+  if (NewSectionSize >= MAX_SECTION_SIZE) {\r
+    FvBufCompact3ByteSize (NewSection->Size, 0xffffff);\r
+    ((EFI_RAW_SECTION2 *)NewSection)->ExtendedSize = NewSectionSize;\r
+  } else {\r
+    FvBufCompact3ByteSize (NewSection->Size, NewSectionSize);\r
+  }\r
   NewSection->Type = EFI_SECTION_RAW;\r
 \r
   //\r
   // Copy the actual file data into the buffer\r
   //\r
-  CommonLibBinderCopyMem (NewSection + 1, RawData, RawDataSize);\r
+  CommonLibBinderCopyMem ((UINT8 *)NewSection + SecHdrLen, RawData, RawDataSize);\r
 \r
   //\r
   // Initialize the FFS file header\r
   //\r
   CommonLibBinderCopyMem (&NewFile->Name, Filename, sizeof (EFI_GUID));\r
-  FvBufCompact3ByteSize (NewFile->Size, NewFileSize);\r
-  NewFile->Type = EFI_FV_FILETYPE_FREEFORM;\r
   NewFile->Attributes = 0;\r
+  if (NewFileSize >= MAX_FFS_SIZE) {\r
+    FvBufCompact3ByteSize (NewFile->Size, 0x0);\r
+    ((EFI_FFS_FILE_HEADER2 *)NewFile)->ExtendedSize = NewFileSize;\r
+    NewFile->Attributes |= FFS_ATTRIB_LARGE_FILE;\r
+  } else {\r
+    FvBufCompact3ByteSize (NewFile->Size, NewFileSize);\r
+  }\r
+  NewFile->Type = EFI_FV_FILETYPE_FREEFORM;\r
   NewFile->IntegrityCheck.Checksum.Header =\r
-    FvBufCalculateChecksum8 ((UINT8*)NewFile, sizeof (*NewFile));\r
+    FvBufCalculateChecksum8 ((UINT8*)NewFile, FfsHdrLen);\r
   NewFile->IntegrityCheck.Checksum.File = FFS_FIXED_CHECKSUM;\r
   NewFile->State = (UINT8)~( EFI_FILE_HEADER_CONSTRUCTION |\r
                              EFI_FILE_HEADER_VALID |\r
@@ -1239,7 +1351,7 @@ Returns:
   }\r
 \r
   sectionHdr = (EFI_COMMON_SECTION_HEADER*)((UINT8*)SectionsStart + *Key);\r
-  sectionSize = FvBufExpand3ByteSize (sectionHdr->Size);\r
+  sectionSize = FvBufGetSecFileLen (sectionHdr);\r
 \r
   if (sectionSize < sizeof (EFI_COMMON_SECTION_HEADER)) {\r
     return EFI_NOT_FOUND;\r
@@ -1287,10 +1399,10 @@ Returns:
   UINTN                      TotalSectionsSize;\r
   EFI_COMMON_SECTION_HEADER* NextSection;\r
 \r
-  SectionStart = (VOID*)((UINTN)FfsFile + sizeof (EFI_FFS_FILE_HEADER));\r
+  SectionStart = (VOID*)((UINTN)FfsFile + FvBufGetFfsHeaderSize(FfsFile));\r
   TotalSectionsSize =\r
-    FvBufExpand3ByteSize (((EFI_FFS_FILE_HEADER*)FfsFile)->Size) -\r
-    sizeof (EFI_FFS_FILE_HEADER);\r
+    FvBufGetFfsFileSize ((EFI_FFS_FILE_HEADER*)FfsFile) -\r
+    FvBufGetFfsHeaderSize(FfsFile);\r
   Key = 0;\r
   *Count = 0;\r
   while (TRUE) {\r
@@ -1352,10 +1464,10 @@ Returns:
   UINTN                      TotalSectionsSize;\r
   EFI_COMMON_SECTION_HEADER* NextSection;\r
 \r
-  SectionStart = (VOID*)((UINTN)FfsFile + sizeof (EFI_FFS_FILE_HEADER));\r
+  SectionStart = (VOID*)((UINTN)FfsFile + FvBufGetFfsHeaderSize(FfsFile));\r
   TotalSectionsSize =\r
-    FvBufExpand3ByteSize (((EFI_FFS_FILE_HEADER*)FfsFile)->Size) -\r
-    sizeof (EFI_FFS_FILE_HEADER);\r
+    FvBufGetFfsFileSize ((EFI_FFS_FILE_HEADER*)FfsFile) -\r
+    FvBufGetFfsHeaderSize(FfsFile);\r
   Key = 0;\r
   while (TRUE) {\r
     Status = FvBufFindNextSection (\r
@@ -1436,7 +1548,7 @@ Returns:
   EndOfLastFile = (UINT8*)FvHdr + FvHdr->FvLength;\r
   while (!EFI_ERROR (FvBufFindNextFile (Fv, &Key, (VOID **)&FileIt))) {\r
     EndOfLastFile =\r
-      (VOID*)((UINT8*)FileIt + FvBufExpand3ByteSize (FileIt->Size));\r
+      (VOID*)((UINT8*)FileIt + FvBufGetFfsFileSize (FileIt));\r
   }\r
 \r
   //\r
index 12c64f61724c2daac3ab59cc6ff05540b8a10de5..49b380b96195eacceef924ea8213eba7dbd8638a 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 1999 - 2008, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved.<BR>\r
 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
@@ -82,6 +82,16 @@ FvBufExpand3ByteSize (
   IN VOID* Size\r
   );\r
 \r
+UINT32\r
+FvBufGetFfsFileSize (\r
+  IN EFI_FFS_FILE_HEADER *Ffs\r
+  );\r
+\r
+UINT32\r
+FvBufGetFfsHeaderSize (\r
+  IN EFI_FFS_FILE_HEADER *Ffs\r
+  );\r
+\r
 EFI_STATUS\r
 FvBufExtend (\r
   IN VOID **Fv,\r
index 124517b6c1b2fb87d380b03ef00d5c244038174c..6aa37e49fb9e5b18e7bf1a9a4ef59b2908ece0fe 100644 (file)
@@ -19,7 +19,7 @@ ifndef ARCH
   #\r
   uname_m = $(shell uname -m)\r
   $(info Attempting to detect ARCH from 'uname -m': $(uname_m))\r
-  ifeq ($(uname_m),x86_64)\r
+  ifneq (,$(strip $(filter $(uname_m), x86_64 amd64)))\r
     ARCH=X64\r
   endif\r
   ifeq ($(patsubst i%86,IA32,$(uname_m)),IA32)\r
index d3ad7c265b5aa1e2d68ee1dc6212c8416b9a18e7..fb19609479f1756bf0a03753cea48bca2135f582 100644 (file)
@@ -14,4 +14,4 @@
 \r
 **/\r
 \r
-#define __BUILD_VERSION "Build 2649"\r
+#define __BUILD_VERSION "Build 2670"\r
index 82005e11f1fe16333b05e77c5828564e0eb2b6bd..e446d1462a9fa9e1782be46f93f95d4d1542732e 100644 (file)
@@ -53,10 +53,10 @@ VfrLexer.cpp VfrLexer.h: Pccts/dlg/dlg VfrParser.dlg
        Pccts/dlg/dlg -C2 -i -CC -cl VfrLexer -o . VfrParser.dlg\r
 \r
 Pccts/antlr/antlr:\r
-       BIN_DIR='.' make -C Pccts/antlr\r
+       BIN_DIR='.' $(MAKE) -C Pccts/antlr\r
 \r
 Pccts/dlg/dlg:\r
-       BIN_DIR='.' make -C Pccts/dlg\r
+       BIN_DIR='.' $(MAKE) -C Pccts/dlg\r
 \r
 ATokenBuffer.o: Pccts/h/ATokenBuffer.cpp\r
        $(CXX) -c $(VFR_CPPFLAGS) $(INC) $? -o $@\r
@@ -73,7 +73,7 @@ VfrSyntax.o: VfrSyntax.cpp
 clean: localClean\r
 \r
 localClean:\r
-       BIN_DIR='.' make -C Pccts/antlr clean\r
-       BIN_DIR='.' make -C Pccts/dlg clean\r
+       BIN_DIR='.' $(MAKE) -C Pccts/antlr clean\r
+       BIN_DIR='.' $(MAKE) -C Pccts/dlg clean\r
        rm -f $(EXTRA_CLEAN_OBJECTS)\r
 \r
index dd34a1b5333fc76a2b273127e0e03ef1243d3c38..ee10605edb4f873b603c8f08eb1b1b8ceb815ea5 100644 (file)
@@ -372,6 +372,8 @@ CVfrCompiler::CVfrCompiler (
   mPreProcessCmd = (CHAR8 *) PREPROCESSOR_COMMAND;\r
   mPreProcessOpt = (CHAR8 *) PREPROCESSOR_OPTIONS;\r
 \r
+  SET_RUN_STATUS (STATUS_STARTED);\r
+\r
   OptionInitialization(Argc, Argv);\r
 \r
   if ((IS_RUN_STATUS(STATUS_FAILED)) || (IS_RUN_STATUS(STATUS_DEAD))) {\r
index ea20bbc5d9bcab2fb2609618cfe1d9962d7e06fe..3261e9ccdb1f99a36af3409895615bc04762a842 100644 (file)
@@ -60,7 +60,8 @@ typedef struct {
 } OPTIONS;\r
 \r
 typedef enum {\r
-  STATUS_INITIALIZED = 1,\r
+  STATUS_STARTED = 0,\r
+  STATUS_INITIALIZED,\r
   STATUS_PREPROCESSED,\r
   STATUS_COMPILEED,\r
   STATUS_GENBINARY,\r
index 71305364f69ad2d2e4e7c185bcb8ed930b098ff9..ffed732a4171274773fc8ba5c7cedbf554d9f2be 100644 (file)
@@ -51,6 +51,7 @@ static SVFR_ERROR_HANDLE VFR_ERROR_HANDLE_TABLE [] = {
 \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_STRING_TO_UINT_OVERFLOW, ": String to UINT* Overflow"},\r
   { VFR_WARNING_CODEUNDEFINED, ": undefined Warning Code" }\r
 };\r
 \r
index 8e73e2e99732cffabc682555c8b0caf39b0ac617..622cba6cbeb1436a6a3752aafe004705bfaea2fc 100644 (file)
@@ -49,6 +49,7 @@ typedef enum {
 \r
 typedef enum {\r
   VFR_WARNING_DEFAULT_VALUE_REDEFINED = 0,\r
+  VFR_WARNING_STRING_TO_UINT_OVERFLOW,\r
   VFR_WARNING_CODEUNDEFINED\r
 } EFI_VFR_WARNING_CODE;\r
 \r
index c69518af764f5109db0a5c372df59fb62b01b065..17471e6284d20fcda8dfd7f8e0ba0ecac646c50a 100644 (file)
@@ -2,7 +2,7 @@
   \r
   The definition of CFormPkg's member function\r
 \r
-Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>\r
 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
@@ -1343,7 +1343,7 @@ public:
     UpdateCIfrMinMaxStepData(&mNumeric->data);\r
   }\r
 \r
-  EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
+  EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags, BOOLEAN DisplaySettingsSpecified = FALSE) {\r
     EFI_VFR_RETURN_CODE Ret;\r
 \r
     Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
@@ -1351,10 +1351,10 @@ public:
       return Ret;\r
     }\r
 \r
-    if (LFlags & EFI_IFR_DISPLAY) {\r
-      mNumeric->Flags = LFlags;\r
-    } else {\r
+    if (DisplaySettingsSpecified == FALSE) {\r
       mNumeric->Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC;\r
+    } else {\r
+      mNumeric->Flags = LFlags;\r
     }\r
     return VFR_RETURN_SUCCESS;\r
   }\r
index 6f15aaa452a38a4350a146c5231f336933338022..a38f770e3b8c01c628dd1ce86f6e822f7a53a0f9 100644 (file)
@@ -1,5 +1,5 @@
 /*++\r
-Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>\r
 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
@@ -295,7 +295,7 @@ pragmaPackStackDef :
     "," ID:StringIdentifier                         << Identifier = ID->getText(); >>\r
   }\r
   {\r
-    "," N:Number                                    << PackAction |= VFR_PACK_ASSIGN; PackNumber = _STOU32(N->getText()); >>\r
+    "," N:Number                                    << PackAction |= VFR_PACK_ASSIGN; PackNumber = _STOU32(N->getText(), N->getLine()); >>\r
   }\r
                                                     << gCVfrVarDataTypeDB.Pack (LineNum, PackAction, Identifier, PackNumber); >>\r
   ;\r
@@ -305,7 +305,7 @@ pragmaPackNumber :
      UINT32 LineNum;\r
      UINT32 PackNumber = DEFAULT_PACK_ALIGN;\r
   >>\r
-  N:Number                                          << LineNum = N->getLine(); PackNumber = _STOU32(N->getText()); >>\r
+  N:Number                                          << LineNum = N->getLine(); PackNumber = _STOU32(N->getText(), N->getLine()); >>\r
                                                     << gCVfrVarDataTypeDB.Pack (LineNum, VFR_PACK_ASSIGN, NULL, PackNumber); >>\r
   ;\r
 \r
@@ -354,7 +354,7 @@ dataStructField64 :
   D:"UINT64"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -364,7 +364,7 @@ dataStructField32 :
   D:"UINT32"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -376,7 +376,7 @@ dataStructField16 :
   ("UINT16" | "CHAR16")\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), (CHAR8 *) "UINT16", ArrayNum), N); >>\r
   ;\r
@@ -386,7 +386,7 @@ dataStructField8 :
   D:"UINT8"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -396,7 +396,7 @@ dataStructFieldBool :
   D:"BOOLEAN"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -406,7 +406,7 @@ dataStructFieldString :
   D:"EFI_STRING_ID"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -416,7 +416,7 @@ dataStructFieldDate :
   D:"EFI_HII_DATE"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -426,7 +426,7 @@ dataStructFieldTime :
   D:"EFI_HII_TIME"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -436,7 +436,7 @@ dataStructFieldRef :
   D:"EFI_HII_REF"\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
@@ -446,7 +446,7 @@ dataStructFieldUser :
   T:StringIdentifier\r
   N:StringIdentifier\r
   {\r
-    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
+    OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText(), I->getLine()); >>\r
   }\r
   ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), T->getText(), ArrayNum), T); >>\r
   ;\r
@@ -458,14 +458,14 @@ dataStructFieldUser :
 guidSubDefinition [EFI_GUID &Guid] :\r
   G4:Number "," G5:Number "," G6:Number "," G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
                                                     <<\r
-                                                       Guid.Data4[0] = _STOU8(G4->getText());\r
-                                                       Guid.Data4[1] = _STOU8(G5->getText());\r
-                                                       Guid.Data4[2] = _STOU8(G6->getText());\r
-                                                       Guid.Data4[3] = _STOU8(G7->getText());\r
-                                                       Guid.Data4[4] = _STOU8(G8->getText());\r
-                                                       Guid.Data4[5] = _STOU8(G9->getText());\r
-                                                       Guid.Data4[6] = _STOU8(G10->getText());\r
-                                                       Guid.Data4[7] = _STOU8(G11->getText());\r
+                                                       Guid.Data4[0] = _STOU8(G4->getText(), G4->getLine());\r
+                                                       Guid.Data4[1] = _STOU8(G5->getText(), G5->getLine());\r
+                                                       Guid.Data4[2] = _STOU8(G6->getText(), G6->getLine());\r
+                                                       Guid.Data4[3] = _STOU8(G7->getText(), G7->getLine());\r
+                                                       Guid.Data4[4] = _STOU8(G8->getText(), G8->getLine());\r
+                                                       Guid.Data4[5] = _STOU8(G9->getText(), G9->getLine());\r
+                                                       Guid.Data4[6] = _STOU8(G10->getText(), G10->getLine());\r
+                                                       Guid.Data4[7] = _STOU8(G11->getText(), G11->getLine());\r
                                                     >>\r
   ;\r
 \r
@@ -473,9 +473,9 @@ guidDefinition [EFI_GUID &Guid] :
   OpenBrace\r
     G1:Number "," G2:Number "," G3:Number ","\r
                                                     <<\r
-                                                       Guid.Data1 = _STOU32 (G1->getText());\r
-                                                       Guid.Data2 = _STOU16 (G2->getText());\r
-                                                       Guid.Data3 = _STOU16 (G3->getText());\r
+                                                       Guid.Data1 = _STOU32 (G1->getText(), G1->getLine());\r
+                                                       Guid.Data2 = _STOU16 (G2->getText(), G2->getLine());\r
+                                                       Guid.Data3 = _STOU16 (G3->getText(), G3->getLine());\r
                                                     >>\r
     (\r
         OpenBrace guidSubDefinition[Guid] CloseBrace\r
@@ -568,8 +568,8 @@ vfrFormSetDefinition :
                                                       if (mCompatibleMode) {\r
                                                         memcpy (&mFormsetGuid, &Guid, sizeof (EFI_GUID));\r
                                                       }\r
-                                                      FSObj->SetFormSetTitle (_STOSID(S1->getText()));\r
-                                                      FSObj->SetHelp (_STOSID(S2->getText()));\r
+                                                      FSObj->SetFormSetTitle (_STOSID(S1->getText(), S1->getLine()));\r
+                                                      FSObj->SetHelp (_STOSID(S2->getText(), S2->getLine()));\r
                                                     >>\r
   {\r
     FC:Class "=" classDefinition[C] ","             << {CIfrClass CObj;SET_LINE_INFO (CObj, FC); CObj.SetClass(C);} >>\r
@@ -656,25 +656,25 @@ vfrStatementExtension:
   Uuid "=" guidDefinition[Guid]\r
   {"," DataType "=" \r
     (\r
-        U64:"UINT64" {OpenBracket AN1:Number CloseBracket <<ArrayNum = _STOU32(AN1->getText());>>}\r
+        U64:"UINT64" {OpenBracket AN1:Number CloseBracket <<ArrayNum = _STOU32(AN1->getText(), AN1->getLine());>>}\r
                                                       << TypeName = U64->getText(); LineNum = U64->getLine(); >>\r
-      | U32:"UINT32" {OpenBracket AN2:Number CloseBracket <<ArrayNum = _STOU32(AN2->getText());>>}\r
+      | U32:"UINT32" {OpenBracket AN2:Number CloseBracket <<ArrayNum = _STOU32(AN2->getText(), AN2->getLine());>>}\r
                                                       << TypeName = U32->getText(); LineNum = U32->getLine(); >>\r
-      | U16:"UINT16" {OpenBracket AN3:Number CloseBracket <<ArrayNum = _STOU32(AN3->getText());>>}\r
+      | U16:"UINT16" {OpenBracket AN3:Number CloseBracket <<ArrayNum = _STOU32(AN3->getText(), AN3->getLine());>>}\r
                                                       << TypeName = U16->getText(); LineNum = U16->getLine(); >>\r
-      | U8:"UINT8"   {OpenBracket AN4:Number CloseBracket <<ArrayNum = _STOU32(AN4->getText());>>}\r
+      | U8:"UINT8"   {OpenBracket AN4:Number CloseBracket <<ArrayNum = _STOU32(AN4->getText(), AN4->getLine());>>}\r
                                                       << TypeName = U8->getText(); LineNum = U8->getLine(); >>\r
-      | BL:"BOOLEAN" {OpenBracket AN5:Number CloseBracket <<ArrayNum = _STOU32(AN5->getText());>>}\r
+      | BL:"BOOLEAN" {OpenBracket AN5:Number CloseBracket <<ArrayNum = _STOU32(AN5->getText(), AN5->getLine());>>}\r
                                                       << TypeName = BL->getText(); LineNum = BL->getLine(); >>\r
-      | SI:"EFI_STRING_ID" {OpenBracket AN6:Number CloseBracket <<ArrayNum = _STOU32(AN6->getText());>>}\r
+      | SI:"EFI_STRING_ID" {OpenBracket AN6:Number CloseBracket <<ArrayNum = _STOU32(AN6->getText(), AN6->getLine());>>}\r
                                                       << TypeName = SI->getText(); LineNum = SI->getLine(); >>\r
-      | D:"EFI_HII_DATE" {OpenBracket AN7:Number CloseBracket <<ArrayNum = _STOU32(AN7->getText());>>}\r
+      | D:"EFI_HII_DATE" {OpenBracket AN7:Number CloseBracket <<ArrayNum = _STOU32(AN7->getText(), AN7->getLine());>>}\r
                                                       << TypeName = D->getText(); LineNum = D->getLine(); IsStruct = TRUE;>>\r
-      | T:"EFI_HII_TIME" {OpenBracket AN8:Number CloseBracket <<ArrayNum = _STOU32(AN8->getText());>>}\r
+      | T:"EFI_HII_TIME" {OpenBracket AN8:Number CloseBracket <<ArrayNum = _STOU32(AN8->getText(), AN8->getLine());>>}\r
                                                       << TypeName = T->getText(); LineNum = T->getLine(); IsStruct = TRUE;>>\r
-      | R:"EFI_HII_REF" {OpenBracket AN9:Number CloseBracket <<ArrayNum = _STOU32(AN9->getText());>>}\r
+      | R:"EFI_HII_REF" {OpenBracket AN9:Number CloseBracket <<ArrayNum = _STOU32(AN9->getText(), AN9->getLine());>>}\r
                                                       << TypeName = R->getText(); LineNum = R->getLine(); IsStruct = TRUE;>>                                                \r
-      | TN:StringIdentifier {OpenBracket AN10:Number CloseBracket <<ArrayNum = _STOU32(AN10->getText());>>}\r
+      | TN:StringIdentifier {OpenBracket AN10:Number CloseBracket <<ArrayNum = _STOU32(AN10->getText(), AN10->getLine());>>}\r
                                                       << TypeName = TN->getText(); LineNum = TN->getLine(); IsStruct = TRUE;>>\r
     )\r
                                                       <<\r
@@ -738,7 +738,7 @@ vfrExtensionData[UINT8 *DataBuff, UINT32 Size, CHAR8 *TypeName, UINT32 TypeSize,
           <<\r
             ArrayIdx = 0;\r
             if (IsArray == TRUE) {\r
-              ArrayIdx = _STOU8(IDX1->getText());\r
+              ArrayIdx = _STOU8(IDX1->getText(), IDX1->getLine());\r
               if (ArrayIdx >= ArrayNum) return;\r
               IsArray = FALSE;\r
             }\r
@@ -769,49 +769,49 @@ vfrExtensionData[UINT8 *DataBuff, UINT32 Size, CHAR8 *TypeName, UINT32 TypeSize,
           <<\r
             if (IsStruct == FALSE) {\r
               if (strcmp ("UINT64", TypeName) == 0) {\r
-                Data_U64 = _STOU64(RD->getText());\r
+                Data_U64 = _STOU64(RD->getText(), RD->getLine());\r
                 memcpy (ByteOffset, &Data_U64, TypeSize);\r
               }else if (strcmp ("UINT32", TypeName) == 0) {\r
-                Data_U32 = _STOU32(RD->getText());\r
+                Data_U32 = _STOU32(RD->getText(), RD->getLine());\r
                 memcpy (ByteOffset, &Data_U32, TypeSize);                                                    \r
               }else if (strcmp ("UINT16", TypeName) == 0) {\r
-                Data_U16 = _STOU16(RD->getText());\r
+                Data_U16 = _STOU16(RD->getText(), RD->getLine());\r
                 memcpy (ByteOffset, &Data_U16, TypeSize);                                                    \r
               }else if (strcmp ("UINT8", TypeName) == 0) {\r
-                Data_U8 = _STOU8(RD->getText());\r
+                Data_U8 = _STOU8(RD->getText(), RD->getLine());\r
                 memcpy (ByteOffset, &Data_U8, TypeSize);                                                    \r
               }else if (strcmp ("BOOLEAN", TypeName)== 0) {\r
-                Data_BL = _STOU8(RD->getText());\r
+                Data_BL = _STOU8(RD->getText(), RD->getLine());\r
                 memcpy (ByteOffset, &Data_BL, TypeSize);                                                    \r
               }else if (strcmp ("EFI_STRING_ID", TypeName) == 0) {\r
-                Data_SID = _STOSID(RD->getText());\r
+                Data_SID = _STOSID(RD->getText(), RD->getLine());\r
                 memcpy (ByteOffset, &Data_SID, TypeSize);                                                    \r
               }\r
             } else {\r
               gCVfrVarDataTypeDB.GetDataFieldInfo(TFName, FieldOffset, FieldType, FieldSize);\r
               switch (FieldType) {\r
               case EFI_IFR_TYPE_NUM_SIZE_8:\r
-                 Data_U8 = _STOU8(RD->getText());\r
+                 Data_U8 = _STOU8(RD->getText(), RD->getLine());\r
                  memcpy (ByteOffset + FieldOffset, &Data_U8, FieldSize);\r
                  break;\r
               case EFI_IFR_TYPE_NUM_SIZE_16:\r
-                 Data_U16 = _STOU16(RD->getText());\r
+                 Data_U16 = _STOU16(RD->getText(), RD->getLine());\r
                  memcpy (ByteOffset + FieldOffset, &Data_U16, FieldSize);\r
                  break;\r
               case EFI_IFR_TYPE_NUM_SIZE_32:\r
-                 Data_U32 = _STOU32(RD->getText());\r
+                 Data_U32 = _STOU32(RD->getText(), RD->getLine());\r
                  memcpy (ByteOffset + FieldOffset, &Data_U32, FieldSize);\r
                  break;\r
               case EFI_IFR_TYPE_NUM_SIZE_64:\r
-                 Data_U64 = _STOU64(RD->getText());\r
+                 Data_U64 = _STOU64(RD->getText(), RD->getLine());\r
                  memcpy (ByteOffset + FieldOffset, &Data_U64, FieldSize);\r
                  break;\r
               case EFI_IFR_TYPE_BOOLEAN:\r
-                 Data_BL = _STOU8(RD->getText());\r
+                 Data_BL = _STOU8(RD->getText(), RD->getLine());\r
                  memcpy (ByteOffset + FieldOffset, &Data_BL, FieldSize);\r
                  break;\r
               case EFI_IFR_TYPE_STRING:\r
-                 Data_SID = _STOSID(RD->getText());\r
+                 Data_SID = _STOSID(RD->getText(), RD->getLine());\r
                  memcpy (ByteOffset + FieldOffset, &Data_SID, FieldSize);\r
                  break;\r
               default:\r
@@ -830,17 +830,17 @@ vfrStatementDefaultStore :
   D:DefaultStore N:StringIdentifier ","\r
   Prompt "=" "STRING_TOKEN" "\(" S:Number "\)"\r
   {\r
-    "," Attribute "=" A:Number                      << DefaultId = _STOU16(A->getText()); >>\r
+    "," Attribute "=" A:Number                      << DefaultId = _STOU16(A->getText(), A->getLine()); >>\r
   }\r
                                                     <<\r
                                                        if (mCVfrDefaultStore.DefaultIdRegistered (DefaultId) == FALSE) {\r
                                                          CIfrDefaultStore DSObj;\r
-                                                         _PCATCH(mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), N->getText(), _STOSID(S->getText()), DefaultId)), D->getLine();\r
+                                                         _PCATCH(mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), N->getText(), _STOSID(S->getText(), S->getLine()), DefaultId)), D->getLine();\r
                                                          DSObj.SetLineNo(D->getLine());\r
-                                                         DSObj.SetDefaultName (_STOSID(S->getText()));\r
+                                                         DSObj.SetDefaultName (_STOSID(S->getText(), S->getLine()));\r
                                                          DSObj.SetDefaultId (DefaultId);\r
                                                        } else {\r
-                                                         _PCATCH(mCVfrDefaultStore.ReRegisterDefaultStoreById (DefaultId, N->getText(), _STOSID(S->getText()))), D->getLine();\r
+                                                         _PCATCH(mCVfrDefaultStore.ReRegisterDefaultStoreById (DefaultId, N->getText(), _STOSID(S->getText(), S->getLine()))), D->getLine();\r
                                                        }\r
                                                     >>\r
   ";"\r
@@ -870,14 +870,14 @@ vfrStatementVarStoreLinear :
   )\r
   { Key "=" FID:Number ","                          << // Key is used to assign Varid in Framework VFR but no use in UEFI2.1 VFR\r
                                                        if (mCompatibleMode) {\r
-                                                         VarStoreId = _STOU16(FID->getText());\r
+                                                         VarStoreId = _STOU16(FID->getText(), FID->getLine());\r
                                                        }\r
                                                     >>\r
   }\r
   {\r
     VarId "=" ID:Number ","                         <<\r
                                                        _PCATCH(\r
-                                                         (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,\r
+                                                         (INTN)(VarStoreId = _STOU16(ID->getText(), ID->getLine())) != 0,\r
                                                          (INTN)TRUE,\r
                                                          ID,\r
                                                          "varid 0 is not allowed."\r
@@ -936,7 +936,7 @@ vfrStatementVarStoreEfi :
   {\r
     VarId "=" ID:Number ","                         <<\r
                                                        _PCATCH(\r
-                                                         (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,\r
+                                                         (INTN)(VarStoreId = _STOU16(ID->getText(), ID->getLine())) != 0,\r
                                                          (INTN)TRUE,\r
                                                          ID,\r
                                                          "varid 0 is not allowed."\r
@@ -952,11 +952,11 @@ vfrStatementVarStoreEfi :
     Name    "=" "STRING_TOKEN" "\(" VN:Number "\)" ","  \r
     VarSize "=" N:Number ","                        << \r
                                                        IsUEFI23EfiVarstore = FALSE;\r
-                                                       StoreName = gCVfrStringDB.GetVarStoreNameFormStringId(_STOSID(VN->getText()));\r
+                                                       StoreName = gCVfrStringDB.GetVarStoreNameFormStringId(_STOSID(VN->getText(), VN->getLine()));\r
                                                        if (StoreName == NULL) {\r
                                                          _PCATCH (VFR_RETURN_UNSUPPORTED, VN->getLine(), "Can't get varstore name for this StringId!");\r
                                                        }\r
-                                                       Size = _STOU32(N->getText());\r
+                                                       Size = _STOU32(N->getText(), N->getLine());\r
                                                        switch (Size) {\r
                                                        case 1:\r
                                                         TypeName = (CHAR8 *) "UINT8";\r
@@ -1012,7 +1012,7 @@ vfrStatementVarStoreEfi :
   ;\r
 \r
 vfrVarStoreEfiAttr [UINT32 & Attr] :\r
-  N:Number                                          << $Attr |= _STOU32(N->getText()); >>\r
+  N:Number                                          << $Attr |= _STOU32(N->getText(), N->getLine()); >>\r
   ;\r
 \r
 vfrStatementVarStoreNameValue :\r
@@ -1027,7 +1027,7 @@ vfrStatementVarStoreNameValue :
   {\r
     VarId "=" ID:Number ","                         <<\r
                                                        _PCATCH(\r
-                                                         (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,\r
+                                                         (INTN)(VarStoreId = _STOU16(ID->getText(), ID->getLine())) != 0,\r
                                                          (INTN)TRUE,\r
                                                          ID,\r
                                                          "varid 0 is not allowed."\r
@@ -1040,7 +1040,7 @@ vfrStatementVarStoreNameValue :
                                                          _PCATCH(mCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText(), VarStoreId), SN);\r
                                                          Created = TRUE;\r
                                                        }\r
-                                                       _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText())), SN); \r
+                                                       _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText(), N->getLine())), SN); \r
                                                     >>\r
   )+\r
   Uuid "=" guidDefinition[Guid]                     << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), SN); >>\r
@@ -1069,7 +1069,7 @@ validClassNames[UINT16 & Class] :
   | ClassInputDevice                                << $Class |= EFI_INPUT_DEVICE_CLASS; >>\r
   | ClassOnBoardDevice                              << $Class |= EFI_ON_BOARD_DEVICE_CLASS; >>\r
   | ClassOtherDevice                                << $Class |= EFI_OTHER_DEVICE_CLASS; >>\r
-  | N:Number                                        << $Class |= _STOU16(N->getText()); >>\r
+  | N:Number                                        << $Class |= _STOU16(N->getText(), N->getLine()); >>\r
   ;\r
 \r
 subclassDefinition[UINT16 & SubClass] :\r
@@ -1078,7 +1078,7 @@ subclassDefinition[UINT16 & SubClass] :
   | SubclassGeneralApplication                      << $SubClass |= EFI_GENERAL_APPLICATION_SUBCLASS; >>\r
   | SubclassFrontPage                               << $SubClass |= EFI_FRONT_PAGE_SUBCLASS; >>\r
   | SubclassSingleUse                               << $SubClass |= EFI_SINGLE_USE_SUBCLASS; >>\r
-  | N:Number                                        << $SubClass |= _STOU16(N->getText()); >>\r
+  | N:Number                                        << $SubClass |= _STOU16(N->getText(), N->getLine()); >>\r
   ;\r
 \r
 vfrStatementDisableIfFormSet :\r
@@ -1113,8 +1113,8 @@ vfrStatementSuppressIfFormSet :
 // the syntax of question header and statement header\r
 //\r
 vfrStatementHeader[CIfrStatementHeader *SHObj] :\r
-  Prompt "=" "STRING_TOKEN" "\(" S1:Number "\)" "," << $SHObj->SetPrompt (_STOSID(S1->getText())); >>\r
-  Help   "=" "STRING_TOKEN" "\(" S2:Number "\)"     << $SHObj->SetHelp (_STOSID(S2->getText())); >>\r
+  Prompt "=" "STRING_TOKEN" "\(" S1:Number "\)" "," << $SHObj->SetPrompt (_STOSID(S1->getText(), S1->getLine())); >>\r
+  Help   "=" "STRING_TOKEN" "\(" S2:Number "\)"     << $SHObj->SetHelp (_STOSID(S2->getText(), S2->getLine())); >>\r
   ;\r
 \r
 vfrQuestionHeader[CIfrQuestionHeader & QHObj, EFI_QUESION_TYPE QType = QUESTION_NORMAL]:\r
@@ -1138,7 +1138,7 @@ vfrQuestionHeader[CIfrQuestionHeader & QHObj, EFI_QUESION_TYPE QType = QUESTION_
   { V:VarId "=" vfrStorageVarId[Info, VarIdStr] "," }\r
   {\r
     QuestionId "=" ID:Number ","                    <<\r
-                                                       QId = _STOQID(ID->getText());\r
+                                                       QId = _STOQID(ID->getText(), ID->getLine());\r
                                                        _PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "has already been used please assign another number");\r
                                                     >>\r
   }\r
@@ -1205,7 +1205,7 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFl
   (\r
     SN1:StringIdentifier                            << SName = SN1->getText(); _STRCAT(&VarIdStr, SN1->getText()); >>\r
     OpenBracket I1:Number CloseBracket              <<\r
-                                                       Idx = _STOU32(I1->getText());\r
+                                                       Idx = _STOU32(I1->getText(), I1->getLine());\r
                                                        _STRCAT(&VarIdStr, "[");\r
                                                        _STRCAT(&VarIdStr, I1->getText());\r
                                                        _STRCAT(&VarIdStr, "]");\r
@@ -1267,7 +1267,7 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFl
       SF:StringIdentifier                           << _STRCAT(&VarIdStr, SF->getText()); _STRCAT(&VarStr, SF->getText()); >>\r
       {\r
         OpenBracket I2:Number CloseBracket          <<\r
-                                                       Idx = _STOU32(I2->getText());\r
+                                                       Idx = _STOU32(I2->getText(), I2->getLine());\r
                                                        if (mCompatibleMode) Idx --;\r
                                                        if (Idx > 0) {\r
                                                          //\r
@@ -1347,7 +1347,7 @@ vfrQuestionDataFieldName [EFI_QUESTION_ID &QId, UINT32 &Mask, CHAR8 *&VarIdStr,
       SF:StringIdentifier                           << _STRCAT (&VarIdStr, SF->getText()); >>\r
       {\r
         OpenBracket I2:Number CloseBracket          <<\r
-                                                       Idx = _STOU32(I2->getText());\r
+                                                       Idx = _STOU32(I2->getText(), I2->getLine());\r
                                                        if (mCompatibleMode) Idx --;\r
                                                        if (Idx > 0) {\r
                                                          //\r
@@ -1372,22 +1372,22 @@ vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :
     N1:Number                                       <<\r
                                                        switch ($Type) {\r
                                                        case EFI_IFR_TYPE_NUM_SIZE_8 :\r
-                                                         $Value.u8     = _STOU8(N1->getText());\r
+                                                         $Value.u8     = _STOU8(N1->getText(), N1->getLine());\r
                                                        break;\r
                                                        case EFI_IFR_TYPE_NUM_SIZE_16 :\r
-                                                         $Value.u16    = _STOU16(N1->getText());\r
+                                                         $Value.u16    = _STOU16(N1->getText(), N1->getLine());\r
                                                        break;\r
                                                        case EFI_IFR_TYPE_NUM_SIZE_32 :\r
-                                                         $Value.u32    = _STOU32(N1->getText());\r
+                                                         $Value.u32    = _STOU32(N1->getText(), N1->getLine());\r
                                                        break;\r
                                                        case EFI_IFR_TYPE_NUM_SIZE_64 :\r
-                                                         $Value.u64    = _STOU64(N1->getText());\r
+                                                         $Value.u64    = _STOU64(N1->getText(), N1->getLine());\r
                                                        break;\r
                                                        case EFI_IFR_TYPE_BOOLEAN :\r
-                                                         $Value.b      = _STOU8(N1->getText());\r
+                                                         $Value.b      = _STOU8(N1->getText(), N1->getLine());\r
                                                        break;\r
                                                        case EFI_IFR_TYPE_STRING :\r
-                                                         $Value.string = _STOU16(N1->getText());\r
+                                                         $Value.string = _STOU16(N1->getText(), N1->getLine());\r
                                                        break;\r
                                                        case EFI_IFR_TYPE_TIME :\r
                                                        case EFI_IFR_TYPE_DATE :\r
@@ -1398,14 +1398,14 @@ vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :
                                                     >>\r
   | B1:True                                         << $Value.b      = TRUE; >>\r
   | B2:False                                        << $Value.b      = FALSE; >>\r
-  | O1:One                                          << $Value.u8     = _STOU8(O1->getText()); >>\r
-  | O2:Ones                                         << $Value.u64    = _STOU64(O2->getText()); >>\r
-  | Z:Zero                                          << $Value.u8     = _STOU8(Z->getText()); >>\r
-  | HOUR:Number ":" MINUTE:Number ":" SECOND:Number << $Value.time   = _STOT(HOUR->getText(), MINUTE->getText(), SECOND->getText()); >>\r
-  | YEAR:Number "/" MONTH:Number "/" DAY:Number     << $Value.date   = _STOD(YEAR->getText(), MONTH->getText(), DAY->getText()); >>\r
+  | O1:One                                          << $Value.u8     = _STOU8(O1->getText(), O1->getLine()); >>\r
+  | O2:Ones                                         << $Value.u64    = _STOU64(O2->getText(), O2->getLine()); >>\r
+  | Z:Zero                                          << $Value.u8     = _STOU8(Z->getText(), Z->getLine()); >>\r
+  | HOUR:Number ":" MINUTE:Number ":" SECOND:Number << $Value.time   = _STOT(HOUR->getText(), MINUTE->getText(),SECOND->getText(), HOUR->getLine()); >>\r
+  | YEAR:Number "/" MONTH:Number "/" DAY:Number     << $Value.date   = _STOD(YEAR->getText(), MONTH->getText(), DAY->getText(), YEAR->getLine()); >>\r
   | QI:Number";" FI:Number";" guidDefinition[Guid] ";" "STRING_TOKEN" "\(" DP:Number "\)" \r
-                                                    << $Value.ref    = _STOR(QI->getText(), FI->getText(), &Guid, DP->getText()); >>\r
-  | "STRING_TOKEN" "\(" S1:Number "\)"              << $Value.string = _STOSID(S1->getText()); >>\r
+                                                    << $Value.ref    = _STOR(QI->getText(), FI->getText(), &Guid, DP->getText(), QI->getLine()); >>\r
+  | "STRING_TOKEN" "\(" S1:Number "\)"              << $Value.string = _STOSID(S1->getText(), S1->getLine()); >>\r
   ;\r
 \r
 //*****************************************************************************\r
@@ -1415,8 +1415,8 @@ vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :
 vfrFormDefinition :\r
   << CIfrForm FObj; >>\r
   F:Form                                            << FObj.SetLineNo(F->getLine()); >>\r
-  FormId "=" S1:Number ","                          << _PCATCH(FObj.SetFormId (_STOFID(S1->getText())), S1); >>\r
-  Title "=" "STRING_TOKEN" "\(" S2:Number "\)" ";"  << FObj.SetFormTitle (_STOSID(S2->getText())); >>\r
+  FormId "=" S1:Number ","                          << _PCATCH(FObj.SetFormId (_STOFID(S1->getText(), S1->getLine())), S1); >>\r
+  Title "=" "STRING_TOKEN" "\(" S2:Number "\)" ";"  << FObj.SetFormTitle (_STOSID(S2->getText(), S2->getLine())); >>\r
   (\r
     vfrStatementImage                        |\r
     vfrStatementLocked                       |\r
@@ -1460,10 +1460,10 @@ vfrFormMapDefinition :
     EFI_GUID    Guid;\r
   >>\r
   F:FormMap                                         << FMapObj = new CIfrFormMap(); FMapObj->SetLineNo(F->getLine()); >>\r
-  FormId "=" S1:Number ","                          << _PCATCH(FMapObj->SetFormId (_STOFID(S1->getText())), S1); >>\r
+  FormId "=" S1:Number ","                          << _PCATCH(FMapObj->SetFormId (_STOFID(S1->getText(), S1->getLine())), S1); >>\r
   (\r
     MapTitle "=" "STRING_TOKEN" "\(" S2:Number "\)" ";"\r
-    MapGuid  "=" guidDefinition[Guid] ";"           << FMapObj->SetFormMapMethod (_STOFID(S2->getText()), &Guid); FormMapMethodNumber ++; >>\r
+    MapGuid  "=" guidDefinition[Guid] ";"           << FMapObj->SetFormMapMethod (_STOFID(S2->getText(), S2->getLine()), &Guid); FormMapMethodNumber ++; >>\r
   )*                                                << if (FormMapMethodNumber == 0) {_PCATCH (VFR_RETURN_INVALID_PARAMETER, F->getLine(), "No MapMethod is set for FormMap!");} delete FMapObj;>>\r
   (\r
     vfrStatementImage                        |\r
@@ -1642,7 +1642,7 @@ vfrStatementWrite :
 vfrStatementSubTitle :\r
   << CIfrSubtitle SObj; >>\r
   L:Subtitle                                           << SObj.SetLineNo(L->getLine()); >>\r
-  Text "=" "STRING_TOKEN" "\(" S:Number "\)"           << SObj.SetPrompt (_STOSID(S->getText())); >>\r
+  Text "=" "STRING_TOKEN" "\(" S:Number "\)"           << SObj.SetPrompt (_STOSID(S->getText(), S->getLine())); >>\r
   {\r
     "," FLAGS "=" vfrSubtitleFlags[SObj]\r
   }\r
@@ -1663,7 +1663,7 @@ vfrSubtitleFlags [CIfrSubtitle & SObj] :
   ;\r
 \r
 subtitleFlagsField [UINT8 & Flags] :\r
-    N:Number                                           << $Flags |= _STOU8(N->getText()); >>\r
+    N:Number                                           << $Flags |= _STOU8(N->getText(), N->getLine()); >>\r
   | "HORIZONTAL"                                       << $Flags |= 0x01; >>\r
   ;\r
 \r
@@ -1677,7 +1677,7 @@ vfrStatementStaticText :
   Help "=" "STRING_TOKEN" "\(" S1:Number "\)" ","\r
   Text "=" "STRING_TOKEN" "\(" S2:Number "\)"\r
   {\r
-    "," Text "=" "STRING_TOKEN" "\(" S3:Number "\)"    << TxtTwo = _STOSID(S3->getText()); >>\r
+    "," Text "=" "STRING_TOKEN" "\(" S3:Number "\)"    << TxtTwo = _STOSID(S3->getText(), S3->getLine()); >>\r
   }\r
   {\r
     "," F:FLAGS "=" staticTextFlagsField[Flags] ( "\|" staticTextFlagsField[Flags] )*\r
@@ -1689,16 +1689,16 @@ vfrStatementStaticText :
                                                             mCVfrQuestionDB.RegisterQuestion (NULL, NULL, QId);\r
                                                             AObj.SetLineNo (F->getLine());\r
                                                             AObj.SetQuestionId (QId);\r
-                                                            AObj.SetPrompt (_STOSID(S2->getText()));\r
-                                                            AObj.SetHelp (_STOSID(S1->getText()));\r
+                                                            AObj.SetPrompt (_STOSID(S2->getText(), S2->getLine()));\r
+                                                            AObj.SetHelp (_STOSID(S1->getText(), S1->getLine()));\r
                                                             _PCATCH(AObj.SetFlags (Flags), F->getLine());\r
                                                             AssignQuestionKey (AObj, KN);\r
                                                             CRT_END_OP (KN);\r
                                                           } else {\r
                                                             CIfrText TObj;\r
                                                             TObj.SetLineNo (T->getLine());\r
-                                                            TObj.SetHelp (_STOSID(S1->getText()));\r
-                                                            TObj.SetPrompt (_STOSID(S2->getText()));\r
+                                                            TObj.SetHelp (_STOSID(S1->getText(), S1->getLine()));\r
+                                                            TObj.SetPrompt (_STOSID(S2->getText(), S2->getLine()));\r
                                                             TObj.SetTextTwo (TxtTwo);\r
                                                           }\r
                                                        >>\r
@@ -1707,7 +1707,7 @@ vfrStatementStaticText :
   ;\r
 \r
 staticTextFlagsField[UINT8 & HFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | questionheaderFlagsField[HFlags]\r
   ;\r
 \r
@@ -1741,9 +1741,9 @@ vfrStatementGoto :
       Question "=" QN1:Number ","\r
                                                        <<\r
                                                           RefType = 4;\r
-                                                          DevPath = _STOSID(P->getText());\r
-                                                          FId = _STOFID(F1->getText());\r
-                                                          QId = _STOQID(QN1->getText());\r
+                                                          DevPath = _STOSID(P->getText(), P->getLine());\r
+                                                          FId = _STOFID(F1->getText(), F1->getLine());\r
+                                                          QId = _STOQID(QN1->getText(), QN1->getLine());\r
                                                        >>\r
     )\r
     |\r
@@ -1753,13 +1753,13 @@ vfrStatementGoto :
       Question "=" QN2:Number ","\r
                                                        <<\r
                                                           RefType = 3;\r
-                                                          FId = _STOFID(F2->getText());\r
-                                                          QId = _STOQID(QN2->getText());\r
+                                                          FId = _STOFID(F2->getText(), F2->getLine());\r
+                                                          QId = _STOQID(QN2->getText(), QN2->getLine());\r
                                                        >>\r
     )\r
     |\r
     (\r
-      FormId "=" F3:Number ","                         << RefType = 2; FId = _STOFID(F3->getText()); >>\r
+      FormId "=" F3:Number ","                         << RefType = 2; FId = _STOFID(F3->getText(), F3->getLine()); >>\r
       Question "="\r
       (\r
           QN3:StringIdentifier ","                     << \r
@@ -1768,14 +1768,14 @@ vfrStatementGoto :
                                                             _PCATCH(VFR_RETURN_UNDEFINED, QN3);\r
                                                           }\r
                                                        >>\r
-        | QN4:Number ","                               << QId = _STOQID(QN4->getText()); >>\r
+        | QN4:Number ","                               << QId = _STOQID(QN4->getText(), QN4->getLine()); >>\r
       )\r
     )\r
     |\r
     (\r
       F4:Number ","                                    <<\r
                                                           RefType = 1;\r
-                                                          FId = _STOFID(F4->getText());\r
+                                                          FId = _STOFID(F4->getText(), F4->getLine());\r
                                                        >>\r
     )\r
   }\r
@@ -1857,7 +1857,7 @@ vfrGotoFlags [CIfrQuestionHeader *QHObj, UINT32 LineNum] :
   ;\r
 \r
 gotoFlagsField[UINT8 & HFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | questionheaderFlagsField[HFlags]\r
   ;\r
 \r
@@ -1989,9 +1989,9 @@ checkboxFlagsField[UINT8 & LFlags, UINT8 & HFlags] :
                                                             //\r
                                                             // set question flag\r
                                                             //\r
-                                                            $LFlags |= _STOU8(N->getText());\r
+                                                            $LFlags |= _STOU8(N->getText(), N->getLine());\r
                                                           } else {\r
-                                                            _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine());\r
+                                                            _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine());\r
                                                           }\r
                                                        >>\r
   | D:"DEFAULT"                                        <<\r
@@ -2035,7 +2035,7 @@ vfrStatementAction :
   L:Action                                             << AObj.SetLineNo(L->getLine()); >>\r
   vfrQuestionHeader[AObj] ","\r
   { F:FLAGS "=" vfrActionFlags[AObj, F->getLine()] "," }\r
-  Config "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << AObj.SetQuestionConfig (_STOSID(S->getText())); >>\r
+  Config "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << AObj.SetQuestionConfig (_STOSID(S->getText(), S->getLine())); >>\r
   vfrStatementQuestionTagList\r
   E:EndAction                                          << CRT_END_OP (E); >>\r
   ";"\r
@@ -2048,7 +2048,7 @@ vfrActionFlags[CIfrAction & AObj, UINT32 LineNum] :
   ;\r
 \r
 actionFlagsField[UINT8 & HFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | questionheaderFlagsField[HFlags]\r
   ;\r
 \r
@@ -2095,8 +2095,8 @@ vfrStatementDate :
                                                           mCVfrQuestionDB.RegisterOldDateQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);\r
                                                           DObj.SetQuestionId (QId);\r
                                                           DObj.SetFlags (EFI_IFR_QUESTION_FLAG_DEFAULT, QF_DATE_STORAGE_TIME);\r
-                                                          DObj.SetPrompt (_STOSID(YP->getText()));\r
-                                                          DObj.SetHelp (_STOSID(YH->getText()));\r
+                                                          DObj.SetPrompt (_STOSID(YP->getText(), YP->getLine()));\r
+                                                          DObj.SetHelp (_STOSID(YH->getText(), YH->getLine()));\r
                                                           if (VarIdStr[0] != NULL) { delete VarIdStr[0]; } if (VarIdStr[1] != NULL) { delete VarIdStr[1]; } if (VarIdStr[2] != NULL) { delete VarIdStr[2]; }\r
                                                        >>\r
                                                        << {CIfrDefault DefaultObj(Size, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_DATE, Val); DefaultObj.SetLineNo(L->getLine());} >>\r
@@ -2115,19 +2115,19 @@ minMaxDateStepDefault[EFI_HII_DATE & D, UINT8 KeyValue] :
     "default" "=" N:Number ","                         <<\r
                                                           switch (KeyValue) {\r
                                                           case 0: \r
-                                                            D.Year  = _STOU16(N->getText());\r
-                                                            if (D.Year < _STOU16 (MinN->getText()) || D.Year > _STOU16 (MaxN->getText())) {\r
+                                                            D.Year  = _STOU16(N->getText(), N->getLine());\r
+                                                            if (D.Year < _STOU16 (MinN->getText(), MinN->getLine()) || D.Year > _STOU16 (MaxN->getText(), MaxN->getLine())) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Year default value must be between Min year and Max year.");\r
                                                             }\r
                                                             break;\r
                                                           case 1: \r
-                                                            D.Month = _STOU8(N->getText()); \r
+                                                            D.Month = _STOU8(N->getText(), N->getLine()); \r
                                                             if (D.Month < 1 || D.Month > 12) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Month default value must be between 1 and 12.");\r
                                                             }\r
                                                             break;\r
                                                           case 2: \r
-                                                            D.Day = _STOU8(N->getText()); \r
+                                                            D.Day = _STOU8(N->getText(), N->getLine()); \r
                                                             if (D.Day < 1 || D.Day > 31) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Day default value must be between 1 and 31.");\r
                                                             }\r
@@ -2144,7 +2144,7 @@ vfrDateFlags [CIfrDate & DObj, UINT32 LineNum] :
   ;\r
 \r
 dateFlagsField [UINT8 & Flags] :\r
-    N:Number                                           << $Flags |= _STOU8(N->getText()); >>\r
+    N:Number                                           << $Flags |= _STOU8(N->getText(), N->getLine()); >>\r
   | "YEAR_SUPPRESS"                                    << $Flags |= 0x01; >>\r
   | "MONTH_SUPPRESS"                                   << $Flags |= 0x02; >>\r
   | "DAY_SUPPRESS"                                     << $Flags |= 0x04; >>\r
@@ -2168,35 +2168,35 @@ vfrSetMinMaxStep[CIfrMinMaxStepData & MMSDObj] :
   Minimum   "=" I:Number ","\r
                                                        <<\r
                                                           switch (_GET_CURRQEST_DATATYPE()) {\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_64 : MinU8 = _STOU64(I->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_32 : MinU4 = _STOU32(I->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_16 : MinU2 = _STOU16(I->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_8 :  MinU1 = _STOU8(I->getText());  break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_64 : MinU8 = _STOU64(I->getText(), I->getLine()); break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_32 : MinU4 = _STOU32(I->getText(), I->getLine()); break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_16 : MinU2 = _STOU16(I->getText(), I->getLine()); break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_8 :  MinU1 = _STOU8(I->getText(), I->getLine());  break;\r
                                                           }\r
                                                        >>\r
   Maximum   "=" A:Number ","\r
                                                        <<\r
                                                           switch (_GET_CURRQEST_DATATYPE()) {\r
                                                           case EFI_IFR_TYPE_NUM_SIZE_64 : \r
-                                                            MaxU8 = _STOU64(A->getText()); \r
+                                                            MaxU8 = _STOU64(A->getText(), A->getLine()); \r
                                                             if (MaxU8 < MinU8) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, A->getLine(), "Maximum can't be less than Minimum");\r
                                                             }\r
                                                             break;\r
                                                           case EFI_IFR_TYPE_NUM_SIZE_32 : \r
-                                                            MaxU4 = _STOU32(A->getText()); \r
+                                                            MaxU4 = _STOU32(A->getText(), A->getLine()); \r
                                                             if (MaxU4 < MinU4) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, A->getLine(), "Maximum can't be less than Minimum");\r
                                                             }\r
                                                             break;\r
                                                           case EFI_IFR_TYPE_NUM_SIZE_16 : \r
-                                                            MaxU2 = _STOU16(A->getText()); \r
+                                                            MaxU2 = _STOU16(A->getText(), A->getLine()); \r
                                                             if (MaxU2 < MinU2) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, A->getLine(), "Maximum can't be less than Minimum");\r
                                                             }\r
                                                             break;\r
                                                           case EFI_IFR_TYPE_NUM_SIZE_8 :  \r
-                                                            MaxU1 = _STOU8(A->getText());  \r
+                                                            MaxU1 = _STOU8(A->getText(), A->getLine());  \r
                                                             if (MaxU1 < MinU1) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, A->getLine(), "Maximum can't be less than Minimum");\r
                                                             }\r
@@ -2207,10 +2207,10 @@ vfrSetMinMaxStep[CIfrMinMaxStepData & MMSDObj] :
     STEP    "=" S:Number ","\r
                                                        <<\r
                                                           switch (_GET_CURRQEST_DATATYPE()) {\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_64 : StepU8 = _STOU64(S->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_32 : StepU4 = _STOU32(S->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_16 : StepU2 = _STOU16(S->getText()); break;\r
-                                                          case EFI_IFR_TYPE_NUM_SIZE_8 :  StepU1 = _STOU8(S->getText());  break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_64 : StepU8 = _STOU64(S->getText(), S->getLine()); break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_32 : StepU4 = _STOU32(S->getText(), S->getLine()); break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_16 : StepU2 = _STOU16(S->getText(), S->getLine()); break;\r
+                                                          case EFI_IFR_TYPE_NUM_SIZE_8 :  StepU1 = _STOU8(S->getText(), S->getLine());  break;\r
                                                           }\r
                                                        >>\r
   }\r
@@ -2277,8 +2277,9 @@ vfrNumericFlags [CIfrNumeric & NObj, UINT32 LineNum] :
      UINT8 HFlags = 0;\r
      EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
      BOOLEAN IsSetType = FALSE;\r
+     BOOLEAN IsDisplaySpecified = FALSE;\r
   >>\r
-  numericFlagsField[HFlags, LFlags, IsSetType] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType] )*\r
+  numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified ] )*\r
                                                        <<\r
                                                           //check data type flag\r
                                                           if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
@@ -2297,19 +2298,19 @@ vfrNumericFlags [CIfrNumeric & NObj, UINT32 LineNum] :
                                                           } else if (IsSetType){\r
                                                             _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;\r
                                                           }\r
-                                                          _PCATCH(NObj.SetFlags (HFlags, LFlags), LineNum);\r
+                                                          _PCATCH(NObj.SetFlags (HFlags, LFlags, IsDisplaySpecified), LineNum);\r
                                                        >>\r
   ;\r
 \r
-numericFlagsField [UINT8 & HFlags, UINT8 & LFlags, BOOLEAN & IsSetType] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+numericFlagsField [UINT8 & HFlags, UINT8 & LFlags, BOOLEAN & IsSetType, BOOLEAN & IsDisplaySpecified] :\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | "NUMERIC_SIZE_1"                                   << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_1; IsSetType = TRUE;>>\r
   | "NUMERIC_SIZE_2"                                   << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_2; IsSetType = TRUE;>>\r
   | "NUMERIC_SIZE_4"                                   << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_4; IsSetType = TRUE;>>\r
   | "NUMERIC_SIZE_8"                                   << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_8; IsSetType = TRUE;>>\r
-  | "DISPLAY_INT_DEC"                                  << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC; >>\r
-  | "DISPLAY_UINT_DEC"                                 << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC; >>\r
-  | "DISPLAY_UINT_HEX"                                 << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX; >>\r
+  | "DISPLAY_INT_DEC"                                  << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC; IsDisplaySpecified = TRUE;>>\r
+  | "DISPLAY_UINT_DEC"                                 << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC; IsDisplaySpecified = TRUE;>>\r
+  | "DISPLAY_UINT_HEX"                                 << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX; IsDisplaySpecified = TRUE;>>\r
   | questionheaderFlagsField[HFlags]\r
   ;\r
 \r
@@ -2366,8 +2367,9 @@ vfrOneofFlagsField [CIfrOneOf & OObj, UINT32 LineNum] :
      UINT8 HFlags = 0;\r
      EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
      BOOLEAN IsSetType = FALSE;\r
+     BOOLEAN IsDisplaySpecified = FALSE;\r
   >>\r
-  numericFlagsField[HFlags, LFlags, IsSetType] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType] )*\r
+  numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified] ( "\|" numericFlagsField[HFlags, LFlags, IsSetType, IsDisplaySpecified] )*\r
                                                        <<\r
                                                           //check data type flag\r
                                                           if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {\r
@@ -2410,8 +2412,8 @@ vfrStatementString :
   }\r
   MinSize "=" MIN:Number ","                           << \r
                                                           VarArraySize = _GET_CURRQEST_ARRAY_SIZE();\r
-                                                          StringMinSize = _STOU8(MIN->getText());\r
-                                                          if (_STOU64(MIN->getText()) > StringMinSize) {\r
+                                                          StringMinSize = _STOU8(MIN->getText(), MIN->getLine());\r
+                                                          if (_STOU64(MIN->getText(), MIN->getLine()) > StringMinSize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "String MinSize takes only one byte, which can't be larger than 0xFF.");\r
                                                           } else if (VarArraySize != 0 && StringMinSize > VarArraySize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "String MinSize can't be larger than the max number of elements in string array.");\r
@@ -2419,8 +2421,8 @@ vfrStatementString :
                                                           SObj.SetMinSize (StringMinSize);\r
                                                        >>\r
   MaxSize "=" MAX:Number ","                           << \r
-                                                          StringMaxSize = _STOU8(MAX->getText());\r
-                                                          if (_STOU64(MAX->getText()) > StringMaxSize) {\r
+                                                          StringMaxSize = _STOU8(MAX->getText(), MAX->getLine());\r
+                                                          if (_STOU64(MAX->getText(), MAX->getLine()) > StringMaxSize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "String MaxSize takes only one byte, which can't be larger than 0xFF.");\r
                                                           } else if (VarArraySize != 0 && StringMaxSize > VarArraySize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "String MaxSize can't be larger than the max number of elements in string array.");\r
@@ -2444,7 +2446,7 @@ vfrStringFlagsField [CIfrString & SObj, UINT32 LineNum] :
   ;\r
 \r
 stringFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | "MULTI_LINE"                                       << $LFlags = 0x01; >>\r
   | questionheaderFlagsField[HFlags]\r
   ;\r
@@ -2464,8 +2466,8 @@ vfrStatementPassword :
   }\r
   MinSize "=" MIN:Number ","                           << \r
                                                           VarArraySize = _GET_CURRQEST_ARRAY_SIZE();\r
-                                                          PasswordMinSize = _STOU16(MIN->getText());\r
-                                                          if (_STOU64(MIN->getText()) > PasswordMinSize) {\r
+                                                          PasswordMinSize = _STOU16(MIN->getText(), MIN->getLine());\r
+                                                          if (_STOU64(MIN->getText(), MIN->getLine()) > PasswordMinSize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "Password MinSize takes only two byte, which can't be larger than 0xFFFF.");\r
                                                           } else if (VarArraySize != 0 && PasswordMinSize > VarArraySize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "Password MinSize can't be larger than the max number of elements in password array.");\r
@@ -2473,8 +2475,8 @@ vfrStatementPassword :
                                                           PObj.SetMinSize (PasswordMinSize);\r
                                                        >>\r
   MaxSize "=" MAX:Number ","                           << \r
-                                                          PasswordMaxSize = _STOU16(MAX->getText());\r
-                                                          if (_STOU64(MAX->getText()) > PasswordMaxSize) {\r
+                                                          PasswordMaxSize = _STOU16(MAX->getText(), MAX->getLine());\r
+                                                          if (_STOU64(MAX->getText(), MAX->getLine()) > PasswordMaxSize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "Password MaxSize takes only two byte, which can't be larger than 0xFFFF.");\r
                                                           } else if (VarArraySize != 0 && PasswordMaxSize > VarArraySize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "Password MaxSize can't be larger than the max number of elements in password array.");\r
@@ -2496,7 +2498,7 @@ vfrPasswordFlagsField [CIfrPassword & PObj, UINT32 LineNum] :
   ;\r
 \r
 passwordFlagsField [UINT8 & HFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | questionheaderFlagsField[HFlags]\r
   ;\r
 \r
@@ -2513,12 +2515,12 @@ vfrStatementOrderedList :
                                                        >>\r
   {\r
     MaxContainers "=" M:Number ","                     << \r
-                                                          if (_STOU64(M->getText()) > _STOU8(M->getText())) {\r
+                                                          if (_STOU64(M->getText(), M->getLine()) > _STOU8(M->getText(), M->getLine())) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, M->getLine(), "OrderedList MaxContainers takes only one byte, which can't be larger than 0xFF.");\r
-                                                          } else if (VarArraySize != 0 && _STOU8(M->getText()) > VarArraySize) {\r
+                                                          } else if (VarArraySize != 0 && _STOU8(M->getText(), M->getLine()) > VarArraySize) {\r
                                                             _PCATCH (VFR_RETURN_INVALID_PARAMETER, M->getLine(), "OrderedList MaxContainers can't be larger than the max number of elements in array.");\r
                                                           }\r
-                                                          OLObj.SetMaxContainers (_STOU8(M->getText()));\r
+                                                          OLObj.SetMaxContainers (_STOU8(M->getText(), M->getLine()));\r
                                                        >>\r
   }\r
   { F:FLAGS "=" vfrOrderedListFlags[OLObj, F->getLine()] }\r
@@ -2537,7 +2539,7 @@ vfrOrderedListFlags [CIfrOrderedList & OLObj, UINT32 LineNum] :
   ;\r
 \r
 orderedlistFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
-    N:Number                                           << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
+    N:Number                                           << _PCATCH(_STOU8(N->getText(), N->getLine()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
   | "UNIQUE"                                           << $LFlags |= 0x01; >>\r
   | "NOEMPTY"                                          << $LFlags |= 0x02; >>\r
   | questionheaderFlagsField[HFlags]\r
@@ -2586,8 +2588,8 @@ vfrStatementTime :
                                                           mCVfrQuestionDB.RegisterOldTimeQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);\r
                                                           TObj.SetQuestionId (QId);\r
                                                           TObj.SetFlags (EFI_IFR_QUESTION_FLAG_DEFAULT, QF_TIME_STORAGE_TIME);\r
-                                                          TObj.SetPrompt (_STOSID(HP->getText()));\r
-                                                          TObj.SetHelp (_STOSID(HH->getText()));\r
+                                                          TObj.SetPrompt (_STOSID(HP->getText(), HP->getLine()));\r
+                                                          TObj.SetHelp (_STOSID(HH->getText(), HH->getLine()));\r
                                                           if (VarIdStr[0] != NULL) { delete VarIdStr[0]; } if (VarIdStr[1] != NULL) { delete VarIdStr[1]; } if (VarIdStr[2] != NULL) { delete VarIdStr[2]; }\r
                                                        >>\r
                                                        << {CIfrDefault DefaultObj(Size, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_TIME, Val); DefaultObj.SetLineNo(L->getLine());} >>\r
@@ -2606,19 +2608,19 @@ minMaxTimeStepDefault[EFI_HII_TIME & T, UINT8 KeyValue] :
     "default" "=" N:Number ","                         <<\r
                                                           switch (KeyValue) {\r
                                                           case 0: \r
-                                                            T.Hour   = _STOU8(N->getText()); \r
+                                                            T.Hour   = _STOU8(N->getText(), N->getLine()); \r
                                                             if (T.Hour > 23) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Hour default value must be between 0 and 23.");\r
                                                             }\r
                                                             break;\r
                                                           case 1: \r
-                                                            T.Minute = _STOU8(N->getText()); \r
+                                                            T.Minute = _STOU8(N->getText(), N->getLine()); \r
                                                             if (T.Minute > 59) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Minute default value must be between 0 and 59.");\r
                                                             }\r
                                                             break;\r
                                                           case 2: \r
-                                                            T.Second = _STOU8(N->getText());\r
+                                                            T.Second = _STOU8(N->getText(), N->getLine());\r
                                                             if (T.Second > 59) {\r
                                                               _PCATCH (VFR_RETURN_INVALID_PARAMETER, N->getLine(), "Second default value must be between 0 and 59.");\r
                                                             }\r
@@ -2635,7 +2637,7 @@ vfrTimeFlags [CIfrTime & TObj, UINT32 LineNum] :
   ;\r
 \r
 timeFlagsField [UINT8 & Flags] :\r
-    N:Number                                           << $Flags |= _STOU8(N->getText()); >>\r
+    N:Number                                           << $Flags |= _STOU8(N->getText(), N->getLine()); >>\r
   | "HOUR_SUPPRESS"                                    << $Flags |= 0x01; >>\r
   | "MINUTE_SUPPRESS"                                  << $Flags |= 0x02; >>\r
   | "SECOND_SUPPRESS"                                  << $Flags |= 0x04; >>\r
@@ -2714,7 +2716,7 @@ vfrStatementInconsistentIfStat :
                                                           }\r
                                                           IIObj.SetLineNo(L->getLine());\r
                                                        >>\r
-  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << IIObj.SetError (_STOSID(S->getText())); >>\r
+  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << IIObj.SetError (_STOSID(S->getText(), S->getLine())); >>\r
   { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
   vfrStatementExpression[0]\r
   E:EndIf                                              << CRT_END_OP (E); >>\r
@@ -2796,7 +2798,7 @@ vfrStatementGrayOutIfStatOld :
 \r
 vfrImageTag :\r
   << CIfrImage IObj; >>\r
-  L:Image "=" "IMAGE_TOKEN" "\(" S1:Number "\)"        << IObj.SetImageId (_STOSID(S1->getText())); IObj.SetLineNo(L->getLine()); >>\r
+  L:Image "=" "IMAGE_TOKEN" "\(" S1:Number "\)"        << IObj.SetImageId (_STOSID(S1->getText(), S1->getLine())); IObj.SetLineNo(L->getLine()); >>\r
   ;\r
 \r
 vfrLockedTag :\r
@@ -2836,7 +2838,7 @@ vfrStatementLocked :
 vfrStatementInconsistentIf :\r
   << CIfrInconsistentIf IIObj; >>\r
   L:InconsistentIf                                     << IIObj.SetLineNo(L->getLine()); >>\r
-  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << IIObj.SetError (_STOSID(S->getText())); >>\r
+  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << IIObj.SetError (_STOSID(S->getText(), S->getLine())); >>\r
   { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
   vfrStatementExpression[0]\r
   E:EndIf                                              << CRT_END_OP (E); >>\r
@@ -2845,7 +2847,7 @@ vfrStatementInconsistentIf :
 vfrStatementNoSubmitIf :\r
   << CIfrNoSubmitIf NSIObj; >>\r
   L:NoSubmitIf                                         << NSIObj.SetLineNo(L->getLine()); >>\r
-  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << NSIObj.SetError (_STOSID(S->getText())); >>\r
+  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << NSIObj.SetError (_STOSID(S->getText(), S->getLine())); >>\r
   { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
   vfrStatementExpression[0]\r
   E:EndIf                                              << CRT_END_OP (E); >>\r
@@ -2854,8 +2856,8 @@ vfrStatementNoSubmitIf :
 vfrStatementWarningIf :\r
   << CIfrWarningIf WIObj; >>\r
   L:WarningIf                                          << WIObj.SetLineNo(L->getLine()); >>\r
-  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << WIObj.SetWarning (_STOSID(S->getText())); >>\r
-  {Timeout "=" T:Number ","                            << WIObj.SetTimeOut (_STOU8(T->getText())); >>}\r
+  Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","     << WIObj.SetWarning (_STOSID(S->getText(), S->getLine())); >>\r
+  {Timeout "=" T:Number ","                            << WIObj.SetTimeOut (_STOU8(T->getText(), T->getLine())); >>}\r
   vfrStatementExpression[0]\r
   E:EndIf                                              << CRT_END_OP (E); >>\r
   ;\r
@@ -2873,7 +2875,7 @@ vfrStatementDisableIfQuest :
 vfrStatementRefresh :\r
   << CIfrRefresh RObj; >>\r
   L:Refresh                                            << RObj.SetLineNo(L->getLine()); >>\r
-  Interval "=" I:Number                                << RObj.SetRefreshInterval (_STOU8(I->getText())); >>\r
+  Interval "=" I:Number                                << RObj.SetRefreshInterval (_STOU8(I->getText(), I->getLine())); >>\r
   ;\r
 \r
 vfrStatementRefreshEvent :\r
@@ -2888,7 +2890,7 @@ vfrStatementRefreshEvent :
 vfrStatementVarstoreDevice :\r
   << CIfrVarStoreDevice VDObj; >>\r
   L:VarstoreDevice                                     << VDObj.SetLineNo(L->getLine()); >>\r
-  "=" "STRING_TOKEN" "\(" S:Number "\)" ","            << VDObj.SetDevicePath (_STOSID(S->getText())); >>\r
+  "=" "STRING_TOKEN" "\(" S:Number "\)" ","            << VDObj.SetDevicePath (_STOSID(S->getText(), S->getLine())); >>\r
   ;\r
 \r
 vfrStatementSuppressIfQuest :\r
@@ -2941,7 +2943,7 @@ vfrStatementOneOfOption :
                                                             _PCATCH (ReturnCode, L->getLine());\r
                                                           }\r
                                                        >>\r
-  Text  "=" "STRING_TOKEN" "\(" S:Number "\)" ","      << OOOObj.SetOption (_STOSID(S->getText())); >>\r
+  Text  "=" "STRING_TOKEN" "\(" S:Number "\)" ","      << OOOObj.SetOption (_STOSID(S->getText(), S->getLine())); >>\r
   Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] >[Val] ","    \r
                                                        << \r
                                                           if (gCurrentMinMaxData != NULL) {\r
@@ -3007,7 +3009,7 @@ vfrStatementOneOfOption :
                                                          CIfrOptionKey IfrOptionKey (\r
                                                                          gCurrentQuestion->QUESTION_ID(),\r
                                                                          Val,\r
-                                                                         _STOQID(KN->getText())\r
+                                                                         _STOQID(KN->getText(), KN->getLine())\r
                                                                          );\r
                                                          SET_LINE_INFO (IfrOptionKey, KN);\r
                                                        >>\r
@@ -3029,7 +3031,7 @@ vfrOneOfOptionFlags [CIfrOneOfOption & OOOObj, UINT32 LineNum] :
   ;\r
 \r
 oneofoptionFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
-    N:Number                                           << $LFlags |= _STOU8(N->getText()); >>\r
+    N:Number                                           << $LFlags |= _STOU8(N->getText(), N->getLine()); >>\r
   | "OPTION_DEFAULT"                                   << $LFlags |= 0x10; >>\r
   | "OPTION_DEFAULT_MFG"                               << $LFlags |= 0x20; >>\r
   | InteractiveFlag                                    << $HFlags |= 0x04; >>\r
@@ -3055,7 +3057,7 @@ vfrStatementLabel :
                                                           {\r
                                                             CIfrLabel LObj2;\r
                                                             LObj2.SetLineNo(L->getLine());\r
-                                                            LObj2.SetNumber (_STOU16(N->getText()));\r
+                                                            LObj2.SetNumber (_STOU16(N->getText(), N->getLine()));\r
                                                           }\r
                                                        >>\r
   ";"\r
@@ -3064,10 +3066,10 @@ vfrStatementLabel :
 vfrStatementBanner :\r
   << CIfrBanner BObj; >>\r
   B:Banner { "," }                                     << BObj.SetLineNo(B->getLine()); >>\r
-  Title "=" "STRING_TOKEN" "\(" S:Number "\)" ","      << BObj.SetTitle (_STOSID(S->getText())); >>\r
+  Title "=" "STRING_TOKEN" "\(" S:Number "\)" ","      << BObj.SetTitle (_STOSID(S->getText(), S->getLine())); >>\r
   (\r
     (\r
-      Line L:Number ","                                << BObj.SetLine (_STOU16(L->getText())); >>\r
+      Line L:Number ","                                << BObj.SetLine (_STOU16(L->getText(), L->getLine())); >>\r
       Align\r
       (\r
           Left                                         << BObj.SetAlign (0); >>\r
@@ -3077,7 +3079,7 @@ vfrStatementBanner :
     )\r
     |\r
     (\r
-      Timeout "=" T:Number ";"                         << {CIfrTimeout TObj(_STOU16(T->getText()));} >>\r
+      Timeout "=" T:Number ";"                         << {CIfrTimeout TObj(_STOU16(T->getText(), T->getLine()));} >>\r
     )\r
   )\r
   ;\r
@@ -3423,7 +3425,7 @@ vareqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
                                                             _PCATCH (mCVfrDataStorage.DeclareEfiVarStore (\r
                                                                                         VarIdStr,\r
                                                                                         &mFormsetGuid,\r
-                                                                                        _STOSID(VN->getText()),\r
+                                                                                        _STOSID(VN->getText(), VN->getLine()),\r
                                                                                         0x2,   //default type is UINT16\r
                                                                                         FALSE\r
                                                                                         ), VN);\r
@@ -3437,7 +3439,7 @@ vareqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
   (\r
     (\r
       "=="\r
-      V1:Number                                        << ConstVal = _STOU16(V1->getText()); >>\r
+      V1:Number                                        << ConstVal = _STOU16(V1->getText(), V1->getLine()); >>\r
                                                        <<\r
                                                           if (Mask == 0) {\r
                                                             CIfrEqIdVal EIVObj (L->getLine());\r
@@ -3453,25 +3455,25 @@ vareqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
     |\r
     (\r
       "<="\r
-      V2:Number                                        << ConstVal = _STOU16(V2->getText()); >>\r
+      V2:Number                                        << ConstVal = _STOU16(V2->getText(), V2->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, LESS_EQUAL); >>\r
     )\r
     |\r
     (\r
       "<"\r
-      V3:Number                                        << ConstVal = _STOU16(V3->getText()); >>\r
+      V3:Number                                        << ConstVal = _STOU16(V3->getText(), V3->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, LESS_THAN); >>\r
     )\r
     |\r
     (\r
       ">="\r
-      V4:Number                                        << ConstVal = _STOU16(V4->getText()); >>\r
+      V4:Number                                        << ConstVal = _STOU16(V4->getText(), V4->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_EQUAL); >>\r
     )\r
     |\r
     (\r
       ">"\r
-      V5:Number                                        << ConstVal = _STOU16(V5->getText()); >>\r
+      V5:Number                                        << ConstVal = _STOU16(V5->getText(), V5->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_THAN); >>\r
     )\r
   )\r
@@ -3490,7 +3492,7 @@ ideqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
   (\r
     (\r
       "=="\r
-      V1:Number                                        << ConstVal = _STOU16(V1->getText()); >>\r
+      V1:Number                                        << ConstVal = _STOU16(V1->getText(), V1->getLine()); >>\r
                                                        <<\r
                                                           if (Mask == 0) {\r
                                                             CIfrEqIdVal EIVObj (L->getLine());\r
@@ -3506,25 +3508,25 @@ ideqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :
     |\r
     (\r
       "<="\r
-      V2:Number                                        << ConstVal = _STOU16(V2->getText()); >>\r
+      V2:Number                                        << ConstVal = _STOU16(V2->getText(), V2->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, LESS_EQUAL); >>\r
     )\r
     |\r
     (\r
       "<"\r
-      V3:Number                                        << ConstVal = _STOU16(V3->getText()); >>\r
+      V3:Number                                        << ConstVal = _STOU16(V3->getText(), V3->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, LESS_THAN); >>\r
     )\r
     |\r
     (\r
       ">="\r
-      V4:Number                                        << ConstVal = _STOU16(V4->getText()); >>\r
+      V4:Number                                        << ConstVal = _STOU16(V4->getText(), V4->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_EQUAL); >>\r
     )\r
     |\r
     (\r
       ">"\r
-      V5:Number                                        << ConstVal = _STOU16(V5->getText()); >>\r
+      V5:Number                                        << ConstVal = _STOU16(V5->getText(), V5->getLine()); >>\r
                                                        << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_THAN); >>\r
     )\r
   )\r
@@ -3595,7 +3597,7 @@ ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   vfrQuestionDataFieldName[QId, Mask, VarIdStr, LineNo]\r
   "=="\r
   (\r
-    V:Number                                           << ValueList[ListLen] = _STOU16(V->getText()); ListLen++; >>\r
+    V:Number                                           << ValueList[ListLen] = _STOU16(V->getText(), V->getLine()); ListLen++; >>\r
   )+\r
                                                        <<\r
                                                           if (Mask != 0) {\r
@@ -3637,7 +3639,7 @@ questionref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
                                                           LineNo = QN->getLine();\r
                                                           mCVfrQuestionDB.GetQuestionId (QN->getText(), NULL, QId, BitMask);\r
                                                        >>\r
-        | ID:Number                                    << QId = _STOQID(ID->getText()); >>\r
+        | ID:Number                                    << QId = _STOQID(ID->getText(), ID->getLine()); >>\r
       )\r
   "\)"\r
                                                        <<\r
@@ -3662,9 +3664,9 @@ stringref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
       ( \r
         "STRING_TOKEN"\r
         "\(" \r
-          S:Number << RefStringId = _STOSID(S->getText()); >>\r
+          S:Number << RefStringId = _STOSID(S->getText(), S->getLine()); >>\r
         "\)"\r
-        | I:Number << RefStringId = _STOSID(I->getText()); >>\r
+        | I:Number << RefStringId = _STOSID(I->getText(), I->getLine()); >>\r
       )\r
   "\)" << { CIfrStringRef1 SR1Obj(L->getLine()); _SAVE_OPHDR_COND (SR1Obj, ($ExpOpCount == 0), L->getLine()); SR1Obj.SetStringId (RefStringId); $ExpOpCount++; } >>\r
   ;\r
@@ -3767,7 +3769,7 @@ vfrExpressionConstant[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   | L5:Zero                                            << CIfrZero ZObj(L5->getLine()); _SAVE_OPHDR_COND (ZObj, ($ExpOpCount == 0), L5->getLine()); $ExpOpCount++; >>\r
   | L6:Undefined                                       << CIfrUndefined UObj(L6->getLine()); _SAVE_OPHDR_COND (UObj, ($ExpOpCount == 0), L6->getLine()); $ExpOpCount++; >>\r
   | L7:Version                                         << CIfrVersion VObj(L7->getLine()); _SAVE_OPHDR_COND (VObj, ($ExpOpCount == 0), L7->getLine()); $ExpOpCount++; >>\r
-  | V:Number                                           << CIfrUint64 U64Obj(V->getLine()); U64Obj.SetValue (_STOU64(V->getText())); _SAVE_OPHDR_COND (U64Obj, ($ExpOpCount == 0), V->getLine()); $ExpOpCount++; >>\r
+  | V:Number                                           << CIfrUint64 U64Obj(V->getLine()); U64Obj.SetValue (_STOU64(V->getText(), V->getLine())); _SAVE_OPHDR_COND (U64Obj, ($ExpOpCount == 0), V->getLine()); $ExpOpCount++; >>\r
   ;\r
 \r
 vfrExpressionUnaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
@@ -3804,7 +3806,7 @@ question23refExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   L:QuestionRefVal\r
   "\("\r
       {\r
-        DevicePath "=" "STRING_TOKEN" "\(" S:Number "\)" ","    << Type = 0x2; DevPath = _STOSID(S->getText()); >>\r
+        DevicePath "=" "STRING_TOKEN" "\(" S:Number "\)" ","    << Type = 0x2; DevPath = _STOSID(S->getText(), S->getLine()); >>\r
       }\r
       {\r
         Uuid "=" guidDefinition[Guid] ","                       << Type = 0x3; >>\r
@@ -3837,7 +3839,7 @@ tostringExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   << UINT8 Fmt = 0; >>\r
   L:StringVal\r
   {\r
-    Format "=" F:Number ","                            << Fmt = _STOU8(F->getText()); >>\r
+    Format "=" F:Number ","                            << Fmt = _STOU8(F->getText(), F->getLine()); >>\r
   }\r
   "\(" vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] "\)"\r
                                                        << { CIfrToString TSObj(L->getLine()); TSObj.SetFormat (Fmt); $ExpOpCount++; } >>\r
@@ -4023,7 +4025,7 @@ vfrExpressionMap [UINT32 & RootLevel, UINT32 & ExpOpCount]:
   ;\r
 \r
 spanFlags [UINT8 & Flags] :\r
-    N:Number                                           << $Flags |= _STOU8(N->getText()); >>\r
+    N:Number                                           << $Flags |= _STOU8(N->getText(), N->getLine()); >>\r
   | "LAST_NON_MATCH"                                   << $Flags |= 0x00; >>\r
   | "FIRST_NON_MATCH"                                  << $Flags |= 0x01; >>\r
   ;\r
@@ -4091,17 +4093,17 @@ public:
 \r
   CHAR8*              TrimHex (IN CHAR8 *, OUT BOOLEAN *);\r
   CHAR8*              _U32TOS (IN UINT32);\r
-  UINT8               _STOU8  (IN CHAR8 *);\r
-  UINT16              _STOU16 (IN CHAR8 *);\r
-  UINT32              _STOU32 (IN CHAR8 *);\r
-  UINT64              _STOU64 (IN CHAR8 *);\r
-  EFI_HII_DATE        _STOD   (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *);\r
-  EFI_HII_TIME        _STOT   (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *);\r
-  EFI_HII_REF         _STOR   (IN CHAR8 *, IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *);\r
-\r
-  EFI_STRING_ID       _STOSID (IN CHAR8 *);\r
-  EFI_FORM_ID         _STOFID (IN CHAR8 *);\r
-  EFI_QUESTION_ID     _STOQID (IN CHAR8 *);\r
+  UINT8               _STOU8  (IN CHAR8 *, IN UINT32);\r
+  UINT16              _STOU16 (IN CHAR8 *, IN UINT32);\r
+  UINT32              _STOU32 (IN CHAR8 *, IN UINT32);\r
+  UINT64              _STOU64 (IN CHAR8 *, IN UINT32);\r
+  EFI_HII_DATE        _STOD   (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *, IN UINT32);\r
+  EFI_HII_TIME        _STOT   (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *, IN UINT32);\r
+  EFI_HII_REF         _STOR   (IN CHAR8 *, IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *, IN UINT32);\r
+\r
+  EFI_STRING_ID       _STOSID (IN CHAR8 *, IN UINT32);\r
+  EFI_FORM_ID         _STOFID (IN CHAR8 *, IN UINT32);\r
+  EFI_QUESTION_ID     _STOQID (IN CHAR8 *, IN UINT32);\r
 \r
   VOID                _STRCAT (IN OUT CHAR8 **, IN CONST CHAR8 *);\r
 \r
@@ -4335,18 +4337,21 @@ EfiVfrParser::_U32TOS (
 \r
 UINT8\r
 EfiVfrParser::_STOU8 (\r
-  IN CHAR8*Str\r
+  IN CHAR8  *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
   BOOLEAN IsHex;\r
   UINT8   Value;\r
   CHAR8   c;\r
 \r
+  UINT8 PreviousValue;\r
+  CHAR8 *OrigString = Str;\r
+  CHAR8 ErrorMsg[100];\r
+\r
   Str = TrimHex (Str, &IsHex);\r
   for (Value = 0; (c = *Str) != '\0'; Str++) {\r
-    //\r
-    // BUG: does not handle overflow here\r
-    //\r
+    PreviousValue = Value;\r
     (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
 \r
     if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
@@ -4358,6 +4363,10 @@ EfiVfrParser::_STOU8 (
     if (c >= '0' && c <= '9') {\r
       Value += (c - '0');\r
     }\r
+    if((IsHex && ((Value/16) != PreviousValue)) || (!IsHex && ((Value/10) != PreviousValue))) {\r
+      sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a UINT8", OrigString);\r
+      gCVfrErrorHandle.HandleWarning (VFR_WARNING_STRING_TO_UINT_OVERFLOW, LineNum, ErrorMsg);\r
+    }\r
   }\r
 \r
   return Value;\r
@@ -4365,18 +4374,21 @@ EfiVfrParser::_STOU8 (
 \r
 UINT16\r
 EfiVfrParser::_STOU16 (\r
-  IN CHAR8*Str\r
+  IN CHAR8  *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
   BOOLEAN IsHex;\r
   UINT16  Value;\r
   CHAR8   c;\r
 \r
+  UINT16 PreviousValue;\r
+  CHAR8 *OrigString = Str;\r
+  CHAR8 ErrorMsg[100];\r
+\r
   Str = TrimHex (Str, &IsHex);\r
   for (Value = 0; (c = *Str) != '\0'; Str++) {\r
-    //\r
-    // BUG: does not handle overflow here\r
-    //\r
+    PreviousValue = Value;\r
     (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
 \r
     if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
@@ -4388,6 +4400,10 @@ EfiVfrParser::_STOU16 (
     if (c >= '0' && c <= '9') {\r
       Value += (c - '0');\r
     }\r
+    if((IsHex && ((Value/16) != PreviousValue)) || (!IsHex && ((Value/10) != PreviousValue))) {\r
+      sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a UINT16", OrigString);\r
+      gCVfrErrorHandle.HandleWarning (VFR_WARNING_STRING_TO_UINT_OVERFLOW, LineNum, ErrorMsg);\r
+    }\r
   }\r
 \r
   return Value;\r
@@ -4395,18 +4411,21 @@ EfiVfrParser::_STOU16 (
 \r
 UINT32\r
 EfiVfrParser::_STOU32 (\r
-  IN CHAR8*Str\r
+  IN CHAR8  *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
   BOOLEAN IsHex;\r
   UINT32  Value;\r
   CHAR8   c;\r
 \r
+  UINT32 PreviousValue;\r
+  CHAR8 *OrigString = Str;\r
+  CHAR8 ErrorMsg[100];\r
+\r
   Str = TrimHex (Str, &IsHex);\r
   for (Value = 0; (c = *Str) != '\0'; Str++) {\r
-    //\r
-    // BUG: does not handle overflow here\r
-    //\r
+    PreviousValue = Value;\r
     (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
 \r
     if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
@@ -4418,6 +4437,10 @@ EfiVfrParser::_STOU32 (
     if (c >= '0' && c <= '9') {\r
       Value += (c - '0');\r
     }\r
+    if((IsHex && ((Value/16) != PreviousValue)) || (!IsHex && ((Value/10) != PreviousValue ))) {\r
+      sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a UINT32", OrigString);\r
+      gCVfrErrorHandle.HandleWarning (VFR_WARNING_STRING_TO_UINT_OVERFLOW, LineNum, ErrorMsg);\r
+    }\r
   }\r
 \r
   return Value;\r
@@ -4425,18 +4448,20 @@ EfiVfrParser::_STOU32 (
 \r
 UINT64\r
 EfiVfrParser::_STOU64 (\r
-  IN CHAR8*Str\r
+  IN CHAR8  *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
   BOOLEAN IsHex;\r
   UINT64  Value;\r
   CHAR8   c;\r
+  UINT64 PreviousValue;\r
+  CHAR8 *OrigString = Str;\r
+  CHAR8 ErrorMsg[100];\r
 \r
   Str = TrimHex (Str, &IsHex);\r
   for (Value = 0; (c = *Str) != '\0'; Str++) {\r
-    //\r
-    // BUG: does not handle overflow here\r
-    //\r
+    PreviousValue = Value;\r
     (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
 \r
     if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
@@ -4448,6 +4473,10 @@ EfiVfrParser::_STOU64 (
     if (c >= '0' && c <= '9') {\r
       Value += (c - '0');\r
     }\r
+    if((IsHex && ((Value/16) != PreviousValue)) || ((!IsHex && (Value/10) != PreviousValue))) {\r
+      sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a UINT64", OrigString);\r
+      gCVfrErrorHandle.HandleWarning (VFR_WARNING_STRING_TO_UINT_OVERFLOW, LineNum, ErrorMsg);\r
+    }\r
   }\r
 \r
   return Value;\r
@@ -4457,14 +4486,15 @@ EFI_HII_DATE
 EfiVfrParser::_STOD (\r
   IN CHAR8 *Year,\r
   IN CHAR8 *Month,\r
-  IN CHAR8 *Day\r
+  IN CHAR8 *Day,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
   EFI_HII_DATE Date;\r
 \r
-  Date.Year  = _STOU16 (Year);\r
-  Date.Month = _STOU8 (Month);\r
-  Date.Day   = _STOU8 (Day);\r
+  Date.Year  = _STOU16 (Year, LineNum);\r
+  Date.Month = _STOU8 (Month, LineNum);\r
+  Date.Day   = _STOU8 (Day, LineNum);\r
 \r
   return Date;\r
 }\r
@@ -4473,40 +4503,44 @@ EFI_HII_TIME
 EfiVfrParser::_STOT (\r
   IN CHAR8 *Hour,\r
   IN CHAR8 *Minute,\r
-  IN CHAR8 *Second\r
+  IN CHAR8 *Second,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
   EFI_HII_TIME Time;\r
 \r
-  Time.Hour   = _STOU8 (Hour);\r
-  Time.Minute = _STOU8 (Minute);\r
-  Time.Second = _STOU8 (Second);\r
+  Time.Hour   = _STOU8 (Hour, LineNum);\r
+  Time.Minute = _STOU8 (Minute, LineNum);\r
+  Time.Second = _STOU8 (Second, LineNum);\r
 \r
   return Time;\r
 }\r
 \r
 EFI_STRING_ID\r
 EfiVfrParser::_STOSID (\r
-  IN CHAR8 *Str\r
+  IN CHAR8  *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
-  return (EFI_STRING_ID)_STOU16(Str);\r
+  return (EFI_STRING_ID)_STOU16(Str, LineNum);\r
 }\r
 \r
 EFI_FORM_ID\r
 EfiVfrParser::_STOFID (\r
-  IN CHAR8 *Str\r
+  IN CHAR8 *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
-  return (EFI_FORM_ID)_STOU16(Str);\r
+  return (EFI_FORM_ID)_STOU16(Str, LineNum);\r
 }\r
 \r
 EFI_QUESTION_ID\r
 EfiVfrParser::_STOQID (\r
-  IN CHAR8 *Str\r
+  IN CHAR8 *Str,\r
+  IN UINT32 LineNum\r
   )\r
 {\r
-  return (EFI_QUESTION_ID)_STOU16(Str);\r
+  return (EFI_QUESTION_ID)_STOU16(Str, LineNum);\r
 }\r
 \r
 VOID\r
@@ -4542,16 +4576,17 @@ EfiVfrParser::_STOR (
   IN CHAR8    *QuestionId,\r
   IN CHAR8    *FormId,\r
   IN EFI_GUID *FormSetGuid,\r
-  IN CHAR8    *DevicePath\r
+  IN CHAR8    *DevicePath,\r
+  IN UINT32   LineNum\r
   )\r
 {\r
   EFI_HII_REF Ref;\r
   UINT32      Index;\r
 \r
   memcpy (&Ref.FormSetGuid, FormSetGuid, sizeof (EFI_GUID));\r
-  Ref.QuestionId  = _STOQID (QuestionId);\r
-  Ref.FormId      = _STOFID (FormId);\r
-  Ref.DevicePath  = _STOSID (DevicePath);\r
+  Ref.QuestionId  = _STOQID (QuestionId, LineNum);\r
+  Ref.FormId      = _STOFID (FormId, LineNum);\r
+  Ref.DevicePath  = _STOSID (DevicePath, LineNum);\r
 \r
   return Ref;\r
 }\r
@@ -4755,7 +4790,7 @@ EfiVfrParser::AssignQuestionKey (
     return;\r
   }\r
 \r
-  KeyValue = _STOU16 (KeyTok->getText());\r
+  KeyValue = _STOU16 (KeyTok->getText(), KeyTok->getLine());\r
 \r
   if (QHObj.FLAGS () & EFI_IFR_FLAG_CALLBACK) {\r
     /*\r
index 0f54c2a42963c19bc9102e4b8bca68ca320e51de..21d70199cba9a2a93a1aa8dd9bcdb9d06ab67cfc 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 1999 - 2011, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved.<BR>\r
 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
@@ -975,22 +975,24 @@ Returns:
   UINT32              FileLength;\r
   UINT8               FileState;\r
   UINT8               Checksum;\r
-  EFI_FFS_FILE_HEADER BlankHeader;\r
+  EFI_FFS_FILE_HEADER2 BlankHeader;\r
   EFI_STATUS          Status;\r
   UINT8               GuidBuffer[PRINTED_GUID_BUFFER_SIZE];\r
+  UINT32              HeaderSize;\r
 #if (PI_SPECIFICATION_VERSION < 0x00010000) \r
   UINT16              *Tail;\r
 #endif\r
   //\r
   // Check if we have free space\r
   //\r
+  HeaderSize = FvBufGetFfsHeaderSize(FileHeader);\r
   if (ErasePolarity) {\r
-    memset (&BlankHeader, -1, sizeof (EFI_FFS_FILE_HEADER));\r
+    memset (&BlankHeader, -1, HeaderSize);\r
   } else {\r
-    memset (&BlankHeader, 0, sizeof (EFI_FFS_FILE_HEADER));\r
+    memset (&BlankHeader, 0, HeaderSize);\r
   }\r
 \r
-  if (memcmp (&BlankHeader, FileHeader, sizeof (EFI_FFS_FILE_HEADER)) == 0) {\r
+  if (memcmp (&BlankHeader, FileHeader, HeaderSize) == 0) {\r
     return EFI_SUCCESS;\r
   }\r
   //\r
@@ -1008,7 +1010,7 @@ Returns:
   //  PrintGuid (&FileHeader->Name);\r
   //  printf ("\n");\r
   //\r
-  FileLength = GetLength (FileHeader->Size);\r
+  FileLength = FvBufGetFfsFileSize (FileHeader);\r
   printf ("File Offset:      0x%08X\n", (unsigned) ((UINTN) FileHeader - (UINTN) FvImage));\r
   printf ("File Length:      0x%08X\n", (unsigned) FileLength);\r
   printf ("File Attributes:  0x%02X\n", FileHeader->Attributes);\r
@@ -1031,7 +1033,7 @@ Returns:
 \r
   case EFI_FILE_HEADER_VALID:\r
     printf ("        EFI_FILE_HEADER_VALID\n");\r
-    Checksum  = CalculateSum8 ((UINT8 *) FileHeader, sizeof (EFI_FFS_FILE_HEADER));\r
+    Checksum  = CalculateSum8 ((UINT8 *) FileHeader, HeaderSize);\r
     Checksum  = (UINT8) (Checksum - FileHeader->IntegrityCheck.Checksum.File);\r
     Checksum  = (UINT8) (Checksum - FileHeader->State);\r
     if (Checksum != 0) {\r
@@ -1053,7 +1055,7 @@ Returns:
     //\r
     // Calculate header checksum\r
     //\r
-    Checksum  = CalculateSum8 ((UINT8 *) FileHeader, sizeof (EFI_FFS_FILE_HEADER));\r
+    Checksum  = CalculateSum8 ((UINT8 *) FileHeader, HeaderSize);\r
     Checksum  = (UINT8) (Checksum - FileHeader->IntegrityCheck.Checksum.File);\r
     Checksum  = (UINT8) (Checksum - FileHeader->State);\r
     if (Checksum != 0) {\r
@@ -1061,13 +1063,13 @@ Returns:
       return EFI_ABORTED;\r
     }\r
 \r
-    FileLength = GetLength (FileHeader->Size);\r
+    FileLength = FvBufGetFfsFileSize (FileHeader);\r
 \r
     if (FileHeader->Attributes & FFS_ATTRIB_CHECKSUM) {\r
       //\r
       // Calculate file checksum\r
       //\r
-      Checksum  = CalculateSum8 ((UINT8 *) (FileHeader + 1), FileLength - sizeof (EFI_FFS_FILE_HEADER));\r
+      Checksum  = CalculateSum8 ((UINT8 *)FileHeader + HeaderSize, FileLength - HeaderSize);\r
       Checksum  = Checksum + FileHeader->IntegrityCheck.Checksum.File;\r
       if (Checksum != 0) {\r
         Error (NULL, 0, 0003, "error parsing FFS file", "FFS file with Guid %s has invalid file checksum", GuidBuffer);\r
@@ -1180,8 +1182,8 @@ Returns:
     // All other files have sections\r
     //\r
     Status = ParseSection (\r
-              (UINT8 *) ((UINTN) FileHeader + sizeof (EFI_FFS_FILE_HEADER)),\r
-              GetLength (FileHeader->Size) - sizeof (EFI_FFS_FILE_HEADER)\r
+              (UINT8 *) ((UINTN) FileHeader + HeaderSize),\r
+              FvBufGetFfsFileSize (FileHeader) - HeaderSize\r
               );\r
     if (EFI_ERROR (Status)) {\r
       //\r
@@ -1225,6 +1227,7 @@ Returns:
   EFI_SECTION_TYPE    Type;\r
   UINT8               *Ptr;\r
   UINT32              SectionLength;\r
+  UINT32              SectionHeaderLen;\r
   CHAR8               *SectionName;\r
   EFI_STATUS          Status;\r
   UINT32              ParsedLength;\r
@@ -1246,6 +1249,10 @@ Returns:
   CHAR8               *ToolOutputFile;\r
   CHAR8               *SystemCommandFormatString;\r
   CHAR8               *SystemCommand;\r
+  EFI_GUID            *EfiGuid;\r
+  UINT16              DataOffset;\r
+  UINT16              Attributes;\r
+  UINT32              RealHdrLen;\r
 \r
   ParsedLength = 0;\r
   while (ParsedLength < BufferLength) {\r
@@ -1264,6 +1271,12 @@ Returns:
       continue;\r
     }\r
 \r
+    //\r
+    // Get real section file size\r
+    //\r
+    SectionLength = GetSectionFileLength ((EFI_COMMON_SECTION_HEADER *) Ptr);\r
+    SectionHeaderLen = GetSectionHeaderLength((EFI_COMMON_SECTION_HEADER *)Ptr);\r
+\r
     SectionName = SectionNameToStr (Type);\r
     printf ("------------------------------------------------------------\n");\r
     printf ("  Type:  %s\n  Size:  0x%08X\n", SectionName, (unsigned) SectionLength);\r
@@ -1283,7 +1296,7 @@ Returns:
       break;\r
 \r
     case EFI_SECTION_FIRMWARE_VOLUME_IMAGE:\r
-      Status = PrintFvInfo (((EFI_FIRMWARE_VOLUME_IMAGE_SECTION*)Ptr) + 1, TRUE);\r
+      Status = PrintFvInfo (Ptr + SectionHeaderLen, TRUE);\r
       if (EFI_ERROR (Status)) {\r
         Error (NULL, 0, 0003, "printing of FV section contents failed", NULL);\r
         return EFI_SECTION_ERROR;\r
@@ -1304,15 +1317,22 @@ Returns:
       break;\r
 \r
     case EFI_SECTION_VERSION:\r
-      printf ("  Build Number:  0x%02X\n", ((EFI_VERSION_SECTION *) Ptr)->BuildNumber);\r
-      printf ("  Version Strg:  %s\n", (char*) ((EFI_VERSION_SECTION *) Ptr)->VersionString);\r
+      printf ("  Build Number:  0x%02X\n", *(UINT16 *)(Ptr + SectionHeaderLen));\r
+      printf ("  Version Strg:  %s\n", (char*) (Ptr + SectionHeaderLen + sizeof (UINT16)));\r
       break;\r
 \r
     case EFI_SECTION_COMPRESSION:\r
       UncompressedBuffer  = NULL;\r
-      CompressedLength    = SectionLength - sizeof (EFI_COMPRESSION_SECTION);\r
-      UncompressedLength  = ((EFI_COMPRESSION_SECTION *) Ptr)->UncompressedLength;\r
-      CompressionType     = ((EFI_COMPRESSION_SECTION *) Ptr)->CompressionType;\r
+      if (SectionHeaderLen == sizeof (EFI_COMMON_SECTION_HEADER)) {\r
+        RealHdrLen = sizeof(EFI_COMPRESSION_SECTION);\r
+        UncompressedLength  = ((EFI_COMPRESSION_SECTION *)Ptr)->UncompressedLength;\r
+        CompressionType     = ((EFI_COMPRESSION_SECTION *)Ptr)->CompressionType;\r
+      } else {\r
+        RealHdrLen = sizeof(EFI_COMPRESSION_SECTION2);\r
+        UncompressedLength  = ((EFI_COMPRESSION_SECTION2 *)Ptr)->UncompressedLength;\r
+        CompressionType     = ((EFI_COMPRESSION_SECTION2 *)Ptr)->CompressionType;\r
+      }\r
+      CompressedLength    = SectionLength - RealHdrLen;\r
       printf ("  Uncompressed Length:  0x%08X\n", (unsigned) UncompressedLength);\r
 \r
       if (CompressionType == EFI_NOT_COMPRESSED) {\r
@@ -1328,13 +1348,13 @@ Returns:
           return EFI_SECTION_ERROR;\r
         }\r
 \r
-        UncompressedBuffer = Ptr + sizeof (EFI_COMPRESSION_SECTION);\r
+        UncompressedBuffer = Ptr + RealHdrLen;\r
       } else if (CompressionType == EFI_STANDARD_COMPRESSION) {\r
         GetInfoFunction     = EfiGetInfo;\r
         DecompressFunction  = EfiDecompress;\r
         printf ("  Compression Type:  EFI_STANDARD_COMPRESSION\n");\r
 \r
-        CompressedBuffer  = Ptr + sizeof (EFI_COMPRESSION_SECTION);\r
+        CompressedBuffer  = Ptr + RealHdrLen;\r
 \r
         Status            = GetInfoFunction (CompressedBuffer, CompressedLength, &DstSize, &ScratchSize);\r
         if (EFI_ERROR (Status)) {\r
@@ -1387,16 +1407,25 @@ Returns:
       break;\r
 \r
     case EFI_SECTION_GUID_DEFINED:\r
+      if (SectionHeaderLen == sizeof(EFI_COMMON_SECTION_HEADER)) {\r
+        EfiGuid = &((EFI_GUID_DEFINED_SECTION *) Ptr)->SectionDefinitionGuid;\r
+        DataOffset = ((EFI_GUID_DEFINED_SECTION *) Ptr)->DataOffset;\r
+        Attributes = ((EFI_GUID_DEFINED_SECTION *) Ptr)->Attributes;\r
+      } else {\r
+        EfiGuid = &((EFI_GUID_DEFINED_SECTION2 *) Ptr)->SectionDefinitionGuid;\r
+        DataOffset = ((EFI_GUID_DEFINED_SECTION2 *) Ptr)->DataOffset;\r
+        Attributes = ((EFI_GUID_DEFINED_SECTION2 *) Ptr)->Attributes;\r
+      }\r
       printf ("  SectionDefinitionGuid:  ");\r
-      PrintGuid (&((EFI_GUID_DEFINED_SECTION *) Ptr)->SectionDefinitionGuid);\r
+      PrintGuid (EfiGuid);\r
       printf ("\n");\r
-      printf ("  DataOffset:             0x%04X\n", (unsigned) ((EFI_GUID_DEFINED_SECTION *) Ptr)->DataOffset);\r
-      printf ("  Attributes:             0x%04X\n", (unsigned) ((EFI_GUID_DEFINED_SECTION *) Ptr)->Attributes);\r
+      printf ("  DataOffset:             0x%04X\n", (unsigned) DataOffset);\r
+      printf ("  Attributes:             0x%04X\n", (unsigned) Attributes);\r
 \r
       ExtractionTool =\r
         LookupGuidedSectionToolPath (\r
           mParsedGuidedSectionTools,\r
-          &((EFI_GUID_DEFINED_SECTION *) Ptr)->SectionDefinitionGuid\r
+          EfiGuid\r
           );\r
 \r
       if (ExtractionTool != NULL) {\r
@@ -1427,8 +1456,8 @@ Returns:
         Status =\r
           PutFileImage (\r
             ToolInputFile,\r
-            (CHAR8*) SectionBuffer + ((EFI_GUID_DEFINED_SECTION *) Ptr)->DataOffset,\r
-            BufferLength - ((EFI_GUID_DEFINED_SECTION *) Ptr)->DataOffset\r
+            (CHAR8*) SectionBuffer + DataOffset,\r
+            BufferLength - DataOffset\r
             );\r
 \r
         system (SystemCommand);\r
@@ -1461,7 +1490,7 @@ Returns:
       // Check for CRC32 sections which we can handle internally if needed.\r
       //\r
       } else if (!CompareGuid (\r
-                   &((EFI_GUID_DEFINED_SECTION *) Ptr)->SectionDefinitionGuid,\r
+                   EfiGuid,\r
                    &gEfiCrc32GuidedSectionExtractionProtocolGuid\r
                    )\r
           ) {\r
@@ -1469,8 +1498,8 @@ Returns:
         // CRC32 guided section\r
         //\r
         Status = ParseSection (\r
-                  SectionBuffer + ((EFI_GUID_DEFINED_SECTION *) Ptr)->DataOffset,\r
-                  BufferLength - ((EFI_GUID_DEFINED_SECTION *) Ptr)->DataOffset\r
+                  SectionBuffer + DataOffset,\r
+                  BufferLength - DataOffset\r
                   );\r
         if (EFI_ERROR (Status)) {\r
           Error (NULL, 0, 0003, "parse of CRC32 GUIDED section failed", NULL);\r
@@ -1540,8 +1569,8 @@ Returns:
     return EFI_SUCCESS;\r
   }\r
 \r
-  Ptr += sizeof (EFI_COMMON_SECTION_HEADER);\r
-  SectionLength -= sizeof (EFI_COMMON_SECTION_HEADER);\r
+  Ptr += GetSectionHeaderLength((EFI_COMMON_SECTION_HEADER *)Ptr);\r
+  SectionLength -= GetSectionHeaderLength((EFI_COMMON_SECTION_HEADER *)Ptr);\r
   while (SectionLength > 0) {\r
     printf ("        ");\r
     switch (*Ptr) {\r
@@ -1809,7 +1838,7 @@ Returns:
   //\r
   // Copyright declaration\r
   // \r
-  fprintf (stdout, "Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.\n\n");\r
+  fprintf (stdout, "Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.\n\n");\r
 \r
   //\r
   // Details Option\r
index bfd4d43bb9067be69303569ca9491a75f4937240..e178a4a61801725c0542972f78ed377628180ce5 100644 (file)
@@ -13,4 +13,4 @@
 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
 \r
-gBUILD_VERSION = "Build 2649"\r
+gBUILD_VERSION = "Build 2670"\r
index 5bea6941fdf77e0a9047342cb20ed6927a0787df..584fc7f3c3a03645da1bdfc4bcfc531fc09f4ff9 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # This file is used to define common parsing related functions used in parsing INF/DEC/DSC process\r
 #\r
-# Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>\r
 # 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
@@ -877,3 +877,38 @@ def GenMetaDatSectionItem(Key, Value, List):
         List[Key] = [Value]\r
     else:\r
         List[Key].append(Value)\r
+\r
+## IsValidWord\r
+#\r
+# Check whether the word is valid.\r
+# <Word>   ::=  (a-zA-Z0-9_)(a-zA-Z0-9_-){0,} Alphanumeric characters with\r
+#               optional\r
+#               dash "-" and/or underscore "_" characters. No whitespace\r
+#               characters are permitted.\r
+#\r
+# @param Word:  The word string need to be checked.\r
+#\r
+def IsValidWord(Word):\r
+    if not Word:\r
+        return False\r
+    #\r
+    # The first char should be alpha, _ or Digit.\r
+    #\r
+    if not Word[0].isalnum() and \\r
+       not Word[0] == '_' and \\r
+       not Word[0].isdigit():\r
+        return False\r
+\r
+    LastChar = ''\r
+    for Char in Word[1:]:\r
+        if (not Char.isalpha()) and \\r
+           (not Char.isdigit()) and \\r
+           Char != '-' and \\r
+           Char != '_' and \\r
+           Char != '.':\r
+            return False\r
+        if Char == '.' and LastChar == '.':\r
+            return False\r
+        LastChar = Char\r
+\r
+    return True\r
index 0ba8d732d77d42747aaf62a9d94b6af139fd31c1..4f93d79661b412094632db3ece1a8912a80eee9c 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # This file is used to define class Configuration\r
 #\r
-# Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>\r
 # 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
@@ -247,6 +247,9 @@ class Configuration(object):
 \r
         # A list for binary file ext name\r
         self.BinaryExtList = []\r
+        \r
+        # A list for only scanned folders\r
+        self.ScanOnlyDirList = []\r
 \r
         self.ParseConfig()\r
 \r
index b1a0ab82723bfa945f4d45c7e10326db45fa44b4..b5d733e48e2e5917dd63f7295967d9c66726d689 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # This file is used to be the main entrance of ECC tool\r
 #\r
-# Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>\r
 # 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
@@ -59,6 +59,7 @@ class Ecc(object):
         self.ScanSourceCode = True\r
         self.ScanMetaData = True\r
         self.MetaFile = ''\r
+        self.OnlyScan = None\r
 \r
         # Parse the options and args\r
         self.ParseOption()\r
@@ -113,8 +114,9 @@ class Ecc(object):
         GlobalData.gAllFiles = DirCache(GlobalData.gWorkspace)\r
          \r
         # Build ECC database\r
-        self.BuildDatabase()\r
-\r
+#         self.BuildDatabase()\r
+        self.DetectOnlyScanDirs()\r
+        \r
         # Start to check\r
         self.Check()\r
 \r
@@ -133,11 +135,30 @@ class Ecc(object):
                 return\r
         self.ConfigFile = 'config.ini'\r
 \r
+\r
+    ## DetectOnlyScan\r
+    #\r
+    # Detect whether only scanned folders have been enabled\r
+    #\r
+    def DetectOnlyScanDirs(self):\r
+        if self.OnlyScan == True:\r
+            OnlyScanDirs = []\r
+            # Use regex here if multiple spaces or TAB exists in ScanOnlyDirList in config.ini file\r
+            for folder in re.finditer(r'\S+', EccGlobalData.gConfig.ScanOnlyDirList):\r
+                OnlyScanDirs.append(folder.group())\r
+            if len(OnlyScanDirs) != 0:\r
+                self.BuildDatabase(OnlyScanDirs)\r
+            else:\r
+                EdkLogger.error("ECC", BuildToolError.OPTION_VALUE_INVALID, ExtraData="Use -f option need to fill specific folders in config.ini file")\r
+        else:\r
+            self.BuildDatabase()\r
+            \r
+    \r
     ## BuildDatabase\r
     #\r
     # Build the database for target\r
     #\r
-    def BuildDatabase(self):\r
+    def BuildDatabase(self, SpeciDirs = None):\r
         # Clean report table\r
         EccGlobalData.gDb.TblReport.Drop()\r
         EccGlobalData.gDb.TblReport.Create()\r
@@ -146,10 +167,14 @@ class Ecc(object):
         if self.IsInit:            \r
             if self.ScanMetaData:\r
                 EdkLogger.quiet("Building database for Meta Data File ...")\r
-                self.BuildMetaDataFileDatabase()\r
+                self.BuildMetaDataFileDatabase(SpeciDirs)\r
             if self.ScanSourceCode:\r
                 EdkLogger.quiet("Building database for Meta Data File Done!")\r
-                c.CollectSourceCodeDataIntoDB(EccGlobalData.gTarget)\r
+                if SpeciDirs == None:\r
+                    c.CollectSourceCodeDataIntoDB(EccGlobalData.gTarget)\r
+                else:\r
+                    for specificDir in SpeciDirs:\r
+                        c.CollectSourceCodeDataIntoDB(os.path.join(EccGlobalData.gTarget, specificDir))\r
 \r
         EccGlobalData.gIdentifierTableList = GetTableList((MODEL_FILE_C, MODEL_FILE_H), 'Identifier', EccGlobalData.gDb)\r
         EccGlobalData.gCFileList = GetFileList(MODEL_FILE_C, EccGlobalData.gDb)\r
@@ -159,59 +184,67 @@ class Ecc(object):
     #\r
     # Build the database for meta data files\r
     #\r
-    def BuildMetaDataFileDatabase(self):\r
+    def BuildMetaDataFileDatabase(self, SpecificDirs = None):\r
+        ScanFolders = []\r
+        if SpecificDirs == None:\r
+            ScanFolders.append(EccGlobalData.gTarget)\r
+        else:\r
+            for specificDir in SpecificDirs:    \r
+                ScanFolders.append(os.path.join(EccGlobalData.gTarget, specificDir))\r
         EdkLogger.quiet("Building database for meta data files ...")\r
         Op = open(EccGlobalData.gConfig.MetaDataFileCheckPathOfGenerateFileList, 'w+')\r
         #SkipDirs = Read from config file\r
         SkipDirs = EccGlobalData.gConfig.SkipDirList\r
         SkipDirString = string.join(SkipDirs, '|')\r
-        p = re.compile(r'.*[\\/](?:%s)[\\/]?.*' % SkipDirString)\r
-        for Root, Dirs, Files in os.walk(EccGlobalData.gTarget):\r
-            if p.match(Root.upper()):\r
-                continue\r
-            for Dir in Dirs:\r
-                Dirname = os.path.join(Root, Dir)\r
-                if os.path.islink(Dirname):\r
-                    Dirname = os.path.realpath(Dirname)\r
-                    if os.path.isdir(Dirname):\r
-                        # symlinks to directories are treated as directories\r
-                        Dirs.remove(Dir)\r
-                        Dirs.append(Dirname)\r
-\r
-            for File in Files:\r
-                if len(File) > 4 and File[-4:].upper() == ".DEC":\r
-                    Filename = os.path.normpath(os.path.join(Root, File))\r
-                    EdkLogger.quiet("Parsing %s" % Filename)\r
-                    Op.write("%s\r" % Filename)\r
-                    #Dec(Filename, True, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)\r
-                    self.MetaFile = DecParser(Filename, MODEL_FILE_DEC, EccGlobalData.gDb.TblDec)\r
-                    self.MetaFile.Start()\r
-                    continue\r
-                if len(File) > 4 and File[-4:].upper() == ".DSC":\r
-                    Filename = os.path.normpath(os.path.join(Root, File))\r
-                    EdkLogger.quiet("Parsing %s" % Filename)\r
-                    Op.write("%s\r" % Filename)\r
-                    #Dsc(Filename, True, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)\r
-                    self.MetaFile = DscParser(PathClass(Filename, Root), MODEL_FILE_DSC, MetaFileStorage(EccGlobalData.gDb.TblDsc.Cur, Filename, MODEL_FILE_DSC, True))\r
-                    # alwasy do post-process, in case of macros change\r
-                    self.MetaFile.DoPostProcess()\r
-                    self.MetaFile.Start()\r
-                    self.MetaFile._PostProcess()\r
-                    continue\r
-                if len(File) > 4 and File[-4:].upper() == ".INF":\r
-                    Filename = os.path.normpath(os.path.join(Root, File))\r
-                    EdkLogger.quiet("Parsing %s" % Filename)\r
-                    Op.write("%s\r" % Filename)\r
-                    #Inf(Filename, True, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)\r
-                    self.MetaFile = InfParser(Filename, MODEL_FILE_INF, EccGlobalData.gDb.TblInf)\r
-                    self.MetaFile.Start()\r
-                    continue\r
-                if len(File) > 4 and File[-4:].upper() == ".FDF":\r
-                    Filename = os.path.normpath(os.path.join(Root, File))\r
-                    EdkLogger.quiet("Parsing %s" % Filename)\r
-                    Op.write("%s\r" % Filename)\r
-                    Fdf(Filename, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)\r
+#         p = re.compile(r'.*[\\/](?:%s)[\\/]?.*' % SkipDirString)\r
+        p = re.compile(r'.*[\\/](?:%s^\S)[\\/]?.*' % SkipDirString)\r
+        for scanFolder in ScanFolders:\r
+            for Root, Dirs, Files in os.walk(scanFolder):\r
+                if p.match(Root.upper()):\r
                     continue\r
+                for Dir in Dirs:\r
+                    Dirname = os.path.join(Root, Dir)\r
+                    if os.path.islink(Dirname):\r
+                        Dirname = os.path.realpath(Dirname)\r
+                        if os.path.isdir(Dirname):\r
+                            # symlinks to directories are treated as directories\r
+                            Dirs.remove(Dir)\r
+                            Dirs.append(Dirname)\r
+    \r
+                for File in Files:\r
+                    if len(File) > 4 and File[-4:].upper() == ".DEC":\r
+                        Filename = os.path.normpath(os.path.join(Root, File))\r
+                        EdkLogger.quiet("Parsing %s" % Filename)\r
+                        Op.write("%s\r" % Filename)\r
+                        #Dec(Filename, True, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)\r
+                        self.MetaFile = DecParser(Filename, MODEL_FILE_DEC, EccGlobalData.gDb.TblDec)\r
+                        self.MetaFile.Start()\r
+                        continue\r
+                    if len(File) > 4 and File[-4:].upper() == ".DSC":\r
+                        Filename = os.path.normpath(os.path.join(Root, File))\r
+                        EdkLogger.quiet("Parsing %s" % Filename)\r
+                        Op.write("%s\r" % Filename)\r
+                        #Dsc(Filename, True, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)\r
+                        self.MetaFile = DscParser(PathClass(Filename, Root), MODEL_FILE_DSC, MetaFileStorage(EccGlobalData.gDb.TblDsc.Cur, Filename, MODEL_FILE_DSC, True))\r
+                        # alwasy do post-process, in case of macros change\r
+                        self.MetaFile.DoPostProcess()\r
+                        self.MetaFile.Start()\r
+                        self.MetaFile._PostProcess()\r
+                        continue\r
+                    if len(File) > 4 and File[-4:].upper() == ".INF":\r
+                        Filename = os.path.normpath(os.path.join(Root, File))\r
+                        EdkLogger.quiet("Parsing %s" % Filename)\r
+                        Op.write("%s\r" % Filename)\r
+                        #Inf(Filename, True, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)\r
+                        self.MetaFile = InfParser(Filename, MODEL_FILE_INF, EccGlobalData.gDb.TblInf)\r
+                        self.MetaFile.Start()\r
+                        continue\r
+                    if len(File) > 4 and File[-4:].upper() == ".FDF":\r
+                        Filename = os.path.normpath(os.path.join(Root, File))\r
+                        EdkLogger.quiet("Parsing %s" % Filename)\r
+                        Op.write("%s\r" % Filename)\r
+                        Fdf(Filename, True, EccGlobalData.gWorkspace, EccGlobalData.gDb)\r
+                        continue\r
         Op.close()\r
 \r
         # Commit to database\r
@@ -321,6 +354,8 @@ class Ecc(object):
             self.ScanSourceCode = False\r
         if Options.sourcecode != None:\r
             self.ScanMetaData = False\r
+        if Options.folders != None:\r
+            self.OnlyScan = True\r
 \r
     ## SetLogLevel\r
     #\r
@@ -371,6 +406,7 @@ class Ecc(object):
                                                                                    "and warning messages, etc.")\r
         Parser.add_option("-d", "--debug", action="store", type="int", help="Enable debug messages at specified level.")\r
         Parser.add_option("-w", "--workspace", action="store", type="string", dest='Workspace', help="Specify workspace.")\r
+        Parser.add_option("-f", "--folders", action="store_true", type=None, help="Only scanning specified folders which are recorded in config.ini file.")\r
 \r
         (Opt, Args)=Parser.parse_args()\r
 \r
index 6da2b6babe5ca21610474c2a530ff84dfe762ce2..405c5b5b031ff00c4cafabf83d39634dcc386f72 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # This file is used to parse meta files\r
 #\r
-# Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>\r
 # 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
@@ -1054,7 +1054,7 @@ class DscParser(MetaFileParser):
 \r
     ## Override parent's method since we'll do all macro replacements in parser\r
     def _GetMacros(self):\r
-        Macros = {}\r
+        Macros = dict( [('ARCH','IA32'), ('FAMILY','MSFT'),('TOOL_CHAIN_TAG','VS2008x86'),('TARGET','DEBUG')])\r
         Macros.update(self._FileLocalMacros)\r
         Macros.update(self._GetApplicableSectionMacro())\r
         Macros.update(GlobalData.gEdkGlobal)\r
index c55276fce75bd073ae782a0aaa20fced7df4fe5f..436fe4b09b651270b82dea6ba2f20b7d2ebd3cc4 100644 (file)
@@ -2,7 +2,7 @@
 # This file is used to set configuration of ECC tool\r
 # For the items listed below, 1 means valid, 0 means invalid\r
 #\r
-# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>\r
 # 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
@@ -255,3 +255,5 @@ MetaDataFileCheckModuleFileGuidDuplication = 1
 \r
 # A list for binary file ext name\r
 BinaryExtList = EXE, EFI, FV, ROM, DLL, COM, BMP, GIF, PYD, CMP, BIN, JPG, UNI, RAW, COM2, LIB, DEPEX, SYS, DB\r
+# A list for only scanning dirs, the dirs should be the top folder(s) under workspace\r
+ScanOnlyDirList = ScanFolder1 ScanFolder2\r
index 058fa0c6a0b76f4b0622088ea6e94a9c4fb70d6d..c0762edf228f875ca0e8c5aad60667d3ff16f450 100644 (file)
@@ -36,6 +36,7 @@ from Common import EdkLogger
 from Common.String import *\r
 from Common.Misc import DirCache,PathClass\r
 from Common.Misc import SaveFileOnChange\r
+from Common.Misc import GuidStructureStringToGuidString\r
 from Common.BuildVersion import gBUILD_VERSION\r
 \r
 ## Version and Copyright\r
@@ -511,11 +512,23 @@ class GenFds :
     def GenerateGuidXRefFile(BuildDb, ArchList):\r
         GuidXRefFileName = os.path.join(GenFdsGlobalVariable.FvDir, "Guid.xref")\r
         GuidXRefFile = StringIO.StringIO('')\r
+        GuidDict = {}\r
         for Arch in ArchList:\r
             PlatformDataBase = BuildDb.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]\r
             for ModuleFile in PlatformDataBase.Modules:\r
                 Module = BuildDb.BuildObject[ModuleFile, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]\r
                 GuidXRefFile.write("%s %s\n" % (Module.Guid, Module.BaseName))\r
+                for key, item in Module.Protocols.items():\r
+                    GuidDict[key] = item\r
+                for key, item in Module.Guids.items():\r
+                    GuidDict[key] = item\r
+                for key, item in Module.Ppis.items():\r
+                    GuidDict[key] = item\r
+       # Append GUIDs, Protocols, and PPIs to the Xref file\r
+        GuidXRefFile.write("\n")\r
+        for key, item in GuidDict.items():\r
+            GuidXRefFile.write("%s %s\n" % (GuidStructureStringToGuidString(item).upper(), key))\r
+\r
         if GuidXRefFile.getvalue():\r
             SaveFileOnChange(GuidXRefFileName, GuidXRefFile.getvalue(), False)\r
             GenFdsGlobalVariable.InfLogger("\nGUID cross reference file can be found at %s" % GuidXRefFileName)\r
index b6227d24fb1b2cbaec380daabaf8ec4c0f8d075f..9cfdad3171a4127a18118ff549e8d4652944f365 100644 (file)
@@ -53,7 +53,9 @@ def parsePcdInfoFromMapFile(mapfilepath, efifilepath):
         return None\r
     \r
     if len(lines) == 0: return None\r
-    if lines[0].strip().find("Archive member included because of file (symbol)") != -1:\r
+    firstline = lines[0].strip()\r
+    if (firstline.startswith("Archive member included ") and\r
+        firstline.endswith(" file (symbol)")):\r
         return _parseForGCC(lines, efifilepath)\r
     return _parseGeneral(lines, efifilepath)\r
 \r
index 8b86b37e30ce3a60821362c01625ba2537480612..2cf0923cf270cc14d13192bc9dce26d3db4e3efb 100644 (file)
@@ -17,4 +17,4 @@
 Build version information\r
 '''\r
 \r
-gBUILD_VERSION = "Build 2649"\r
+gBUILD_VERSION = "Build 2670"\r
index 0953e47cb1db74541aa059cf22e719fb8de11602..f709ff1bce098437679e5a803075ed18ece003f9 100644 (file)
@@ -2,7 +2,7 @@
 # This file is used to define common string related functions used in parsing \r
 # process\r
 #\r
-# Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>\r
 #\r
 # This program and the accompanying materials are licensed and made available \r
 # under the terms and conditions of the BSD License which accompanies this \r
@@ -937,3 +937,29 @@ def SplitPcdEntry(String):
             return ['', '', ''], False\r
         \r
     return ['', '', ''], False\r
+\r
+## Check if two arches matched?\r
+#\r
+# @param Arch1\r
+# @param Arch2\r
+#\r
+def IsMatchArch(Arch1, Arch2):\r
+    if 'COMMON' in Arch1 or 'COMMON' in Arch2:\r
+        return True\r
+    if isinstance(Arch1, basestring) and isinstance(Arch2, basestring):\r
+        if Arch1 == Arch2:\r
+            return True\r
+\r
+    if isinstance(Arch1, basestring) and isinstance(Arch2, list):\r
+        return Arch1 in Arch2\r
+\r
+    if isinstance(Arch2, basestring) and isinstance(Arch1, list):\r
+        return Arch2 in Arch1\r
+\r
+    if isinstance(Arch1, list) and isinstance(Arch2, list):\r
+        for Item1 in Arch1:\r
+            for Item2 in Arch2:\r
+                if Item1 == Item2:\r
+                    return True\r
+\r
+    return False\r
index a913a859f62e9a3faed1df3e55f7d90d8e0accf7..9e141cabb4c4b1b4c53d949d492d22bd29336d30 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # This file is used to parse a Module file of .PKG file\r
 #\r
-# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>\r
 #\r
 # This program and the accompanying materials are licensed and made available \r
 # under the terms and conditions of the BSD License which accompanies this \r
@@ -20,6 +20,7 @@ from xml.dom import minidom
 from Library.String import ConvertNEToNOTEQ\r
 from Library.String import ConvertNOTEQToNE\r
 from Library.String import GetStringOfList\r
+from Library.String import IsMatchArch\r
 from Library.Xml.XmlRoutines import XmlElement\r
 from Library.Xml.XmlRoutines import XmlAttribute\r
 from Library.Xml.XmlRoutines import XmlNode\r
@@ -128,9 +129,11 @@ class BinaryFileXml(object):
             pass\r
         NodeList = []\r
         FilenameList = BinaryFile.GetFileNameList()\r
+        SupportArch = None\r
         for Filename in FilenameList:\r
             Tmp = FilenameXml()\r
             NodeList.append(Tmp.ToXml(Filename, 'Filename'))\r
+            SupportArch = Filename.SupArchList\r
 \r
         if GlobalData.gIS_BINARY_INF:\r
             AsBuildList = BinaryFile.GetAsBuiltList()\r
@@ -142,12 +145,14 @@ class BinaryFileXml(object):
             AsBuiltNodeList = []\r
 \r
             for Pcd in PatchPcdValueList:\r
-                Tmp = PcdEntryXml()\r
-                AsBuiltNodeList.append(Tmp.ToXml4(Pcd, 'PatchPcdValue'))\r
+                if IsMatchArch(Pcd.SupArchList, SupportArch):\r
+                    Tmp = PcdEntryXml()\r
+                    AsBuiltNodeList.append(Tmp.ToXml4(Pcd, 'PatchPcdValue'))\r
 \r
             for Pcd in PcdExList:\r
-                Tmp = PcdEntryXml()\r
-                AsBuiltNodeList.append(Tmp.ToXml4(Pcd, 'PcdExValue'))\r
+                if IsMatchArch(Pcd.SupArchList, SupportArch):\r
+                    Tmp = PcdEntryXml()\r
+                    AsBuiltNodeList.append(Tmp.ToXml4(Pcd, 'PcdExValue'))\r
 \r
             GuiVerElemList = []\r
             for LibGuidVer in LibGuidVerList:\r
index 3444e4f053e7878943698ab1b53008eb98d1bfff..6ebb7ee87d5e4ed3d264a1da13de76323b341f25 100644 (file)
@@ -37,6 +37,7 @@ from BuildClassObject import *
 from WorkspaceCommon import GetDeclaredPcd\r
 from Common.Misc import AnalyzeDscPcd\r
 import re\r
+from Common.Parsing import IsValidWord\r
 \r
 ## Platform build information from DSC file\r
 #\r
@@ -893,13 +894,23 @@ class DscBuildData(PlatformBuildClassObject):
             VariableName, VariableGuid, VariableOffset, DefaultValue = self._ValidatePcd(PcdCName, TokenSpaceGuid, Setting, Type, Dummy4)\r
             \r
             ExceedMax = False\r
+            FormatCorrect = True\r
             if VariableOffset.isdigit():\r
                 if int(VariableOffset,10) > 0xFFFF:\r
                     ExceedMax = True\r
             elif re.match(r'[\t\s]*0[xX][a-fA-F0-9]+$',VariableOffset):\r
                 if int(VariableOffset,16) > 0xFFFF:\r
                     ExceedMax = True\r
+            # For Offset written in "A.B"\r
+            elif VariableOffset.find('.') > -1:\r
+                VariableOffsetList = VariableOffset.split(".")\r
+                if not (len(VariableOffsetList) == 2\r
+                        and IsValidWord(VariableOffsetList[0])\r
+                        and IsValidWord(VariableOffsetList[1])):\r
+                    FormatCorrect = False\r
             else:\r
+                FormatCorrect = False\r
+            if not FormatCorrect:\r
                 EdkLogger.error('Build', FORMAT_INVALID, "Invalid syntax or format of the variable offset value is incorrect for %s." % ".".join((TokenSpaceGuid,PcdCName)))\r
             \r
             if ExceedMax:\r
diff --git a/BaseTools/get_vsvars.bat b/BaseTools/get_vsvars.bat
new file mode 100644 (file)
index 0000000..b67a81d
--- /dev/null
@@ -0,0 +1,46 @@
+@REM @file\r
+@REM   Windows batch file to find the Visual Studio set up script\r
+@REM\r
+@REM Copyright (c) 2013-2014, ARM Limited. All rights reserved.\r
+\r
+@REM This program and the accompanying materials\r
+@REM are licensed and made available under the terms and conditions of the BSD License\r
+@REM which accompanies this distribution.  The full text of the license may be found at\r
+@REM http://opensource.org/licenses/bsd-license.php\r
+@REM\r
+@REM THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+@REM WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+@REM\r
+\r
+\r
+@echo off\r
+goto  :main\r
+\r
+:read_vsvars\r
+@rem Do nothing if already found, otherwise call vsvars32.bat if there\r
+if defined VCINSTALLDIR goto :EOF\r
+  set GET_VSVARS_BAT_CHECK_DIR=%*\r
+  set GET_VSVARS_BAT_CHECK_DIR=%GET_VSVARS_BAT_CHECK_DIR:"=%\r
+  if exist  "%GET_VSVARS_BAT_CHECK_DIR%\vsvars32.bat"  call "%GET_VSVARS_BAT_CHECK_DIR%\vsvars32.bat"\r
+:vsvars_done\r
+goto :EOF\r
+\r
+\r
+REM NOTE: This file will find the most recent Visual Studio installation\r
+REM       apparent from the environment.\r
+REM       To use an older version, modify your environment set up.\r
+REM       (Or invoke the relevant vsvars32 file beforehand).\r
+\r
+:main\r
+if defined VCINSTALLDIR goto :done\r
+  if defined VS140COMNTOOLS  call :read_vsvars  "%VS140COMNTOOLS%"\r
+  if defined VS130COMNTOOLS  call :read_vsvars  "%VS130COMNTOOLS%"\r
+  if defined VS120COMNTOOLS  call :read_vsvars  "%VS120COMNTOOLS%"\r
+  if defined VS110COMNTOOLS  call :read_vsvars  "%VS110COMNTOOLS%"\r
+  if defined VS100COMNTOOLS  call :read_vsvars  "%VS100COMNTOOLS%"\r
+  if defined VS90COMNTOOLS   call :read_vsvars  "%VS90COMNTOOLS%"\r
+  if defined VS80COMNTOOLS   call :read_vsvars  "%VS80COMNTOOLS%"\r
+  if defined VS71COMNTOOLS   call :read_vsvars  "%VS71COMNTOOLS%"\r
+\r
+:done\r
+set GET_VSVARS_BAT_CHECK_DIR=\r
index 98d0247aa1f356623e7d2dffaaeef56cadf26555..2afa8103ec7c6f64bb791482ed45487f55f1cfbc 100755 (executable)
@@ -22,32 +22,32 @@ pushd .
 @REM # You should not have to modify anything below this line\r
 @REM #\r
 \r
-@if /I "%1"=="-h" goto Usage\r
-@if /I "%1"=="-help" goto Usage\r
-@if /I "%1"=="--help" goto Usage\r
-@if /I "%1"=="/h" goto Usage\r
-@if /I "%1"=="/help" goto Usage\r
-@if /I "%1"=="/?" goto Usage\r
+if /I "%1"=="-h" goto Usage\r
+if /I "%1"=="-help" goto Usage\r
+if /I "%1"=="--help" goto Usage\r
+if /I "%1"=="/h" goto Usage\r
+if /I "%1"=="/help" goto Usage\r
+if /I "%1"=="/?" goto Usage\r
 \r
 \r
 :loop\r
-  @if "%1"=="" goto setup_workspace\r
-  @if /I "%1"=="--nt32" (\r
+  if "%1"=="" goto setup_workspace\r
+  if /I "%1"=="--nt32" (\r
     @REM Ignore --nt32 flag\r
     shift\r
     goto loop\r
   )\r
-  @if /I "%1"=="Reconfig" (\r
+  if /I "%1"=="Reconfig" (\r
     shift\r
     set RECONFIG=TRUE\r
     goto loop\r
   )\r
-  @if /I "%1"=="Rebuild" (\r
+  if /I "%1"=="Rebuild" (\r
     shift\r
     set REBUILD=TRUE\r
     goto loop\r
   )\r
-  @if /I "%1"=="ForceRebuild" (\r
+  if /I "%1"=="ForceRebuild" (\r
     shift\r
     set FORCE_REBUILD=TRUE\r
     goto loop\r
@@ -246,7 +246,8 @@ goto end
   )\r
   set PATH=%BASE_TOOLS_PATH%\Bin\Win32;%PATH%\r
 \r
-  set PYTHONPATH=%BASE_TOOLS_PATH%\Source\Python\r
+  set BASETOOLS_PYTHON_SOURCE=%BASE_TOOLS_PATH%\Source\Python\r
+  set PYTHONPATH=%BASETOOLS_PYTHON_SOURCE%;%PYTHONPATH%\r
 \r
   if not defined PYTHON_HOME (\r
     if defined PYTHONHOME (\r
@@ -279,8 +280,9 @@ goto end
       echo !!! WARNING !!! Will not be able to compile Python programs to .exe\r
       echo Will setup environment to run Python scripts directly.\r
       echo.\r
-      set PYTHONPATH=%BASE_TOOLS_PATH%\Source\Python\r
-      set PATH=%PYTHONPATH%\build;%PYTHONPATH%\GenFds;%PYTHONPATH%\Trim;%PATH%\r
+      set PATH=%BASETOOLS_PYTHON_SOURCE%\Trim;%PATH%\r
+      set PATH=%BASETOOLS_PYTHON_SOURCE%\GenFds;%PATH%\r
+      set PATH=%BASETOOLS_PYTHON_SOURCE%\build;%PATH%\r
       set PATHEXT=%PATHEXT%;.py\r
     )\r
   )\r
@@ -290,31 +292,16 @@ goto end
   echo PYTHON_FREEZER_PATH = %PYTHON_FREEZER_PATH%\r
   echo.\r
 \r
-  if defined VCINSTALLDIR goto VisualStudioAvailable\r
-  if defined VS100COMNTOOLS (\r
-    call "%VS100COMNTOOLS%\vsvars32.bat"\r
-  ) else (\r
-    if defined VS90COMNTOOLS (\r
-      call "%VS90COMNTOOLS%\vsvars32.bat"\r
-    ) else (\r
-      if defined VS80COMNTOOLS (\r
-        call "%VS80COMNTOOLS%\vsvars32.bat"\r
-      ) else (\r
-        if defined VS71COMNTOOLS (\r
-          call "%VS71COMNTOOLS%\vsvars32.bat"\r
-        ) else (\r
-          echo.\r
-          echo !!! ERROR !!!! Cannot find Visual Studio, required to build C tools !!!\r
-          echo.\r
-          goto end\r
-        )\r
-      )\r
-    )\r
+  call "%EDK_TOOLS_PATH%\get_vsvars.bat"\r
+  if not defined VCINSTALLDIR (\r
+    @echo.\r
+    @echo !!! ERROR !!!! Cannot find Visual Studio, required to build C tools !!!\r
+    @echo.\r
+    goto end\r
   )\r
 \r
 :VisualStudioAvailable\r
-  if defined FORCE_REBUILD goto CleanAndBuild\r
-  goto IncrementalBuild\r
+  if not defined FORCE_REBUILD goto IncrementalBuild\r
 \r
 :CleanAndBuild\r
   pushd .\r
@@ -352,17 +339,17 @@ goto end
   goto end\r
 \r
 :Usage\r
-  echo.\r
+  @echo.\r
   echo  Usage: "%0 [-h | -help | --help | /h | /help | /?] [ Rebuild | ForceRebuild ] [Reconfig] [base_tools_path [edk_tools_path]]"\r
-  echo.\r
-  echo         base_tools_path   BaseTools project path, BASE_TOOLS_PATH will be set to this path. \r
-  echo         edk_tools_path    EDK_TOOLS_PATH will be set to this path.\r
-  echo         Rebuild           If sources are available perform an Incremental build, only \r
-  echo                           build those updated tools.\r
-  echo         ForceRebuild      If sources are available, rebuild all tools regardless of \r
-  echo                           whether they have been updated or not.\r
-  echo         Reconfig          Reinstall target.txt, tools_def.txt and build_rule.txt.\r
-echo.\r
+  @echo.\r
+  @echo         base_tools_path   BaseTools project path, BASE_TOOLS_PATH will be set to this path. \r
+  @echo         edk_tools_path    EDK_TOOLS_PATH will be set to this path.\r
+  @echo         Rebuild           If sources are available perform an Incremental build, only \r
+  @echo                           build those updated tools.\r
+  @echo         ForceRebuild      If sources are available, rebuild all tools regardless of \r
+  @echo                           whether they have been updated or not.\r
+  @echo         Reconfig          Reinstall target.txt, tools_def.txt and build_rule.txt.\r
+  @echo.\r
 \r
 :end\r
 set REBUILD=\r
@@ -370,5 +357,3 @@ set FORCE_REBUILD=
 set RECONFIG=\r
 popd\r
 \r
-@echo on\r
-\r