The case is a FixedAtBuild VOID* PCD is used from a lib, but is set to a
different sized value in a module INF scope <PcdsFixedAtBuild> section.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'\r
PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName\r
FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName\r
PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'\r
PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName\r
FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName\r
+ FixedPcdSizeVariableName = '_gPcd_FixedAtBuild_Size_' + TokenCName\r
\r
if Pcd.PcdValueFromComm:\r
Pcd.DefaultValue = Pcd.PcdValueFromComm\r
\r
if Pcd.PcdValueFromComm:\r
Pcd.DefaultValue = Pcd.PcdValueFromComm\r
if Pcd.Type == TAB_PCDS_FIXED_AT_BUILD:\r
AutoGenH.Append('#define %s %s\n' % (FixPcdSizeTokenName, PcdDataSize))\r
AutoGenH.Append('#define %s %s \n' % (GetModeSizeName,FixPcdSizeTokenName))\r
if Pcd.Type == TAB_PCDS_FIXED_AT_BUILD:\r
AutoGenH.Append('#define %s %s\n' % (FixPcdSizeTokenName, PcdDataSize))\r
AutoGenH.Append('#define %s %s \n' % (GetModeSizeName,FixPcdSizeTokenName))\r
+ AutoGenC.Append('GLOBAL_REMOVE_IF_UNREFERENCED const UINTN %s = %s;\n' % (FixedPcdSizeVariableName,PcdDataSize))\r
if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE:\r
AutoGenH.Append('#define %s %s\n' % (PatchPcdSizeTokenName, Pcd.MaxDatumSize))\r
AutoGenH.Append('#define %s %s \n' % (GetModeSizeName,PatchPcdSizeVariableName))\r
if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE:\r
AutoGenH.Append('#define %s %s\n' % (PatchPcdSizeTokenName, Pcd.MaxDatumSize))\r
AutoGenH.Append('#define %s %s \n' % (GetModeSizeName,PatchPcdSizeVariableName))\r
FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName\r
PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'\r
PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName\r
FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName\r
PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'\r
PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName\r
+ FixedPcdSizeVariableName = '_gPcd_FixedAtBuild_Size_' + TokenCName\r
\r
if Pcd.PcdValueFromComm:\r
Pcd.DefaultValue = Pcd.PcdValueFromComm\r
\r
if Pcd.PcdValueFromComm:\r
Pcd.DefaultValue = Pcd.PcdValueFromComm\r
AutoGenH.Append('#define %s %s_gPcd_FixedAtBuild_%s\n' %(GetModeName, Type, TokenCName))\r
AutoGenH.Append('//#define %s ASSERT(FALSE) // It is not allowed to set value for a FIXED_AT_BUILD PCD\n' % SetModeName)\r
\r
AutoGenH.Append('#define %s %s_gPcd_FixedAtBuild_%s\n' %(GetModeName, Type, TokenCName))\r
AutoGenH.Append('//#define %s ASSERT(FALSE) // It is not allowed to set value for a FIXED_AT_BUILD PCD\n' % SetModeName)\r
\r
+ ConstFixedPcd = False\r
if PcdItemType == TAB_PCDS_FIXED_AT_BUILD and (key in Info.ConstPcd or (Info.IsLibrary and not Info._ReferenceModules)):\r
if PcdItemType == TAB_PCDS_FIXED_AT_BUILD and (key in Info.ConstPcd or (Info.IsLibrary and not Info._ReferenceModules)):\r
if Pcd.DatumType not in _NumericDataTypesList:\r
AutoGenH.Append('#define _PCD_VALUE_%s %s%s\n' %(TokenCName, Type, PcdVariableName))\r
else:\r
AutoGenH.Append('#define _PCD_VALUE_%s %s\n' %(TokenCName, Pcd.DefaultValue))\r
if Pcd.DatumType not in _NumericDataTypesList:\r
AutoGenH.Append('#define _PCD_VALUE_%s %s%s\n' %(TokenCName, Type, PcdVariableName))\r
else:\r
AutoGenH.Append('#define _PCD_VALUE_%s %s\n' %(TokenCName, Pcd.DefaultValue))\r
+ PcdDataSize = GetPcdSize(Pcd)\r
if PcdItemType == TAB_PCDS_FIXED_AT_BUILD:\r
if PcdItemType == TAB_PCDS_FIXED_AT_BUILD:\r
- PcdDataSize = GetPcdSize(Pcd)\r
- AutoGenH.Append('#define %s %s\n' % (FixPcdSizeTokenName, PcdDataSize))\r
- AutoGenH.Append('#define %s %s\n' % (GetModeSizeName,FixPcdSizeTokenName))\r
+ if Pcd.DatumType not in _NumericDataTypesList:\r
+ if ConstFixedPcd:\r
+ AutoGenH.Append('#define %s %s\n' % (FixPcdSizeTokenName, PcdDataSize))\r
+ AutoGenH.Append('#define %s %s\n' % (GetModeSizeName,FixPcdSizeTokenName))\r
+ else:\r
+ AutoGenH.Append('#define %s %s\n' % (GetModeSizeName,FixedPcdSizeVariableName))\r
+ AutoGenH.Append('#define %s %s\n' % (FixPcdSizeTokenName,FixedPcdSizeVariableName))\r
+ AutoGenH.Append('extern const UINTN %s; \n' % FixedPcdSizeVariableName)\r
+ else:\r
+ AutoGenH.Append('#define %s %s\n' % (FixPcdSizeTokenName, PcdDataSize))\r
+ AutoGenH.Append('#define %s %s\n' % (GetModeSizeName,FixPcdSizeTokenName))\r
\r
## Create code for library constructor\r
#\r
\r
## Create code for library constructor\r
#\r