+\r
+ #\r
+ # If value is Unicode string (e.g. L""), then use 2-byte alignment\r
+ # If value is byte array (e.g. {}), then use 8-byte alignment\r
+ #\r
+ PCD.PcdOccupySize = PCD.PcdBinSize\r
+ if PCD.PcdUnpackValue.startswith("{"):\r
+ Alignment = 8\r
+ elif PCD.PcdUnpackValue.startswith("L"):\r
+ Alignment = 2\r
+ else:\r
+ Alignment = 1\r
+\r
+ if PCD.PcdOffset != '*':\r
+ if PCD.PcdOccupySize % Alignment != 0:\r
+ if PCD.PcdUnpackValue.startswith("{"):\r
+ EdkLogger.warn("BPDG", "The offset value of PCD %s is not 8-byte aligned!" %(PCD.PcdCName), File=self.InputFileName)\r
+ else:\r
+ EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, 'The offset value of PCD %s should be %s-byte aligned.' % (PCD.PcdCName, Alignment))\r
+ else:\r
+ if PCD.PcdOccupySize % Alignment != 0:\r
+ PCD.PcdOccupySize = (PCD.PcdOccupySize / Alignment + 1) * Alignment\r
+\r