The original bug is only consider int format of PcdSize, but forgot the Hex format. The fix is use the already exist variable PCD.PcdBinSize which done to translate PCD size cover both format.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Yonghong Zhu <[email protected]> --- BaseTools/Source/Python/BPDG/GenVpd.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/BaseTools/Source/Python/BPDG/GenVpd.py b/BaseTools/Source/Python/BPDG/GenVpd.py index 003011b..4ff4647 100644 --- a/BaseTools/Source/Python/BPDG/GenVpd.py +++ b/BaseTools/Source/Python/BPDG/GenVpd.py @@ -1,10 +1,10 @@ ## @file # This file include GenVpd class for fix the Vpd type PCD offset, and PcdEntry for describe # and process each entry of vpd type PCD. # -# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR> +# Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR> # # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at # http://opensource.org/licenses/bsd-license.php @@ -408,14 +408,27 @@ class GenVPD : # This information will be useful while generate the output map file. # PCD.PcdUnpackValue = str(PCD.PcdValue) # + # Translate PCD size string to an integer value. + PackSize = None + try: + PackSize = int(PCD.PcdSize, 10) + PCD.PcdBinSize = PackSize + except: + try: + PackSize = int(PCD.PcdSize, 16) + PCD.PcdBinSize = PackSize + except: + EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid PCD size value %s at file: %s line: %s" % (PCD.PcdSize, self.InputFileName, PCD.Lineno)) + + # # If value is Unicode string (e.g. L""), then use 2-byte alignment # If value is byte array (e.g. {}), then use 8-byte alignment # - PCD.PcdOccupySize = int(PCD.PcdSize) + PCD.PcdOccupySize = PCD.PcdBinSize if PCD.PcdUnpackValue.startswith("{"): Alignment = 8 elif PCD.PcdUnpackValue.startswith("L"): Alignment = 2 else: @@ -429,23 +442,10 @@ class GenVPD : EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, 'The offset value of PCD %s should be %s-byte aligned.' % (PCD.PcdCName, Alignment)) else: if PCD.PcdOccupySize % Alignment != 0: PCD.PcdOccupySize = (PCD.PcdOccupySize / Alignment + 1) * Alignment - # - # Translate PCD size string to an integer value. - PackSize = None - try: - PackSize = int(PCD.PcdSize, 10) - PCD.PcdBinSize = PackSize - except: - try: - PackSize = int(PCD.PcdSize, 16) - PCD.PcdBinSize = PackSize - except: - EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "Invalid PCD size value %s at file: %s line: %s" % (PCD.PcdSize, self.InputFileName, PCD.Lineno)) - if PCD._IsBoolean(PCD.PcdValue, PCD.PcdSize): PCD._PackBooleanValue(PCD.PcdValue) self.FileLinesList[count] = PCD count += 1 continue -- 2.6.1.windows.1 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

