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

Reply via email to