\r
if FromPcd.MaxDatumSize:\r
ToPcd.MaxDatumSize = FromPcd.MaxDatumSize\r
+ ToPcd.MaxSizeUserSet = FromPcd.MaxDatumSize\r
if FromPcd.DefaultValue:\r
ToPcd.DefaultValue = FromPcd.DefaultValue\r
if FromPcd.TokenValue:\r
for Name, Guid in Pcds:\r
Pcd = Pcds[Name, Guid]\r
if Pcd.DatumType == "VOID*" and Pcd.MaxDatumSize in ['', None]:\r
+ Pcd.MaxSizeUserSet = None\r
Value = Pcd.DefaultValue\r
if Value in [None, '']:\r
Pcd.MaxDatumSize = '1'\r
Padding = Padding * 2\r
ArraySize = ArraySize / 2\r
if ArraySize < (len(PcdValue) + 1):\r
- EdkLogger.error("build", AUTOGEN_ERROR,\r
+ if Pcd.MaxSizeUserSet:\r
+ EdkLogger.error("build", AUTOGEN_ERROR,\r
"The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, TokenCName)\r
)\r
+ else:\r
+ ArraySize = len(PcdValue) + 1\r
if ArraySize > len(PcdValue) + 1:\r
NewValue = NewValue + Padding * (ArraySize - len(PcdValue) - 1)\r
PcdValue = NewValue + Padding.strip().rstrip(',') + '}'\r
PcdValue = PcdValue.rstrip('}') + ', 0x00' * (ArraySize - len(PcdValue.split(',')))\r
PcdValue += '}'\r
else:\r
- EdkLogger.error("build", AUTOGEN_ERROR,\r
+ if Pcd.MaxSizeUserSet:\r
+ EdkLogger.error("build", AUTOGEN_ERROR,\r
"The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, TokenCName)\r
)\r
+ else:\r
+ ArraySize = len(PcdValue) + 1\r
PcdItem = '%s.%s|%s|0x%X' % \\r
(Pcd.TokenSpaceGuidCName, TokenCName, PcdValue, PatchPcd[1])\r
PcdComments = ''\r
ArraySize = ArraySize / 2;\r
\r
if ArraySize < (len(Value) + 1):\r
- EdkLogger.error("build", AUTOGEN_ERROR,\r
+ if Pcd.MaxSizeUserSet:\r
+ EdkLogger.error("build", AUTOGEN_ERROR,\r
"The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, TokenCName),\r
ExtraData="[%s]" % str(Info))\r
+ else:\r
+ ArraySize = GetPcdSize(Pcd)\r
+ if Unicode:\r
+ ArraySize = ArraySize / 2\r
Value = NewValue + '0 }'\r
Array = '[%d]' % ArraySize\r
#\r
## @file\r
# Routines for generating Pcd Database\r
#\r
-# Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2013 - 2018, 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
if Pcd.MaxDatumSize != '':\r
MaxDatumSize = int(Pcd.MaxDatumSize, 0)\r
if MaxDatumSize < Size:\r
- EdkLogger.error("build", AUTOGEN_ERROR,\r
+ if Pcd.MaxSizeUserSet:\r
+ EdkLogger.error("build", AUTOGEN_ERROR,\r
"The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName),\r
ExtraData="[%s]" % str(Platform))\r
+ else:\r
+ MaxDatumSize = Size\r
else:\r
MaxDatumSize = Size\r
StringTabLen = MaxDatumSize\r
## @file\r
# This file is used to define each component of the build database\r
#\r
-# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2007 - 2018, 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
self.DefaultValue = Value\r
self.TokenValue = Token\r
self.MaxDatumSize = MaxDatumSize\r
+ self.MaxSizeUserSet = None\r
self.SkuInfoList = SkuInfoList\r
self.Phase = "DXE"\r
self.Pending = False\r