X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FAutoGen%2FGenC.py;h=6192e86753c32129ae75aea9aa79bc7339b3cc2a;hb=6b285ca3663d3c71cc68d01684a98f0d7537885e;hp=89a3e56be3f9e0b2351cd1f56175051bc28cd20f;hpb=91fa33eeca8cea64490ccf4d92f920369a2a3eed;p=mirror_edk2.git diff --git a/BaseTools/Source/Python/AutoGen/GenC.py b/BaseTools/Source/Python/AutoGen/GenC.py index 89a3e56be3..6192e86753 100644 --- a/BaseTools/Source/Python/AutoGen/GenC.py +++ b/BaseTools/Source/Python/AutoGen/GenC.py @@ -863,31 +863,6 @@ def DynExPcdTokenNumberMapping(Info, AutoGenH): % (RealTokenCName, RealTokenCName, RealTokenCName, RealTokenCName)) TokenCNameList.add(TokenCName) -def GetPcdSize(Pcd): - if Pcd.DatumType not in TAB_PCD_NUMERIC_TYPES: - Value = Pcd.DefaultValue - if Value in [None, '']: - return 1 - elif Value[0] == 'L': - return (len(Value) - 2) * 2 - elif Value[0] == '{': - return len(Value.split(',')) - else: - return len(Value) - 1 - if Pcd.DatumType == TAB_UINT64: - return 8 - if Pcd.DatumType == TAB_UINT32: - return 4 - if Pcd.DatumType == TAB_UINT16: - return 2 - if Pcd.DatumType == TAB_UINT8: - return 1 - if Pcd.DatumType == 'BOOLEAN': - return 1 - else: - return Pcd.MaxDatumSize - - ## Create code for module PCDs # # @param Info The ModuleAutoGen object @@ -1082,7 +1057,7 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): if not Value.endswith('U'): Value += 'U' if Pcd.DatumType not in TAB_PCD_NUMERIC_TYPES: - if Pcd.MaxDatumSize is None or Pcd.MaxDatumSize == '': + if not Pcd.MaxDatumSize: EdkLogger.error("build", AUTOGEN_ERROR, "Unknown [MaxDatumSize] of PCD [%s.%s]" % (Pcd.TokenSpaceGuidCName, TokenCName), ExtraData="[%s]" % str(Info)) @@ -1090,11 +1065,13 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): ArraySize = int(Pcd.MaxDatumSize, 0) if Value[0] == '{': Type = '(VOID *)' + ValueSize = len(Value.split(',')) else: if Value[0] == 'L': Unicode = True Value = Value.lstrip('L') #.strip('"') Value = eval(Value) # translate escape character + ValueSize = len(Value) + 1 NewValue = '{' for Index in range(0,len(Value)): if Unicode: @@ -1102,18 +1079,17 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): else: NewValue = NewValue + str(ord(Value[Index]) % 0x100) + ', ' if Unicode: - ArraySize = ArraySize / 2; - - if ArraySize < (len(Value) + 1): - if Pcd.MaxSizeUserSet: - EdkLogger.error("build", AUTOGEN_ERROR, - "The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, TokenCName), - ExtraData="[%s]" % str(Info)) - else: - ArraySize = GetPcdSize(Pcd) - if Unicode: - ArraySize = ArraySize / 2 + ArraySize = ArraySize / 2 Value = NewValue + '0 }' + if ArraySize < ValueSize: + if Pcd.MaxSizeUserSet: + EdkLogger.error("build", AUTOGEN_ERROR, + "The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, TokenCName), + ExtraData="[%s]" % str(Info)) + else: + ArraySize = Pcd.GetPcdSize() + if Unicode: + ArraySize = ArraySize / 2 Array = '[%d]' % ArraySize # # skip casting for fixed at build since it breaks ARM assembly. @@ -1150,7 +1126,7 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): AutoGenH.Append('extern %s UINT8 %s%s;\n' %(Const, PcdVariableName, Array)) AutoGenH.Append('#define %s %s%s\n' %(GetModeName, Type, PcdVariableName)) - PcdDataSize = GetPcdSize(Pcd) + PcdDataSize = Pcd.GetPcdSize() if Pcd.Type == TAB_PCDS_FIXED_AT_BUILD: AutoGenH.Append('#define %s %s\n' % (FixPcdSizeTokenName, PcdDataSize)) AutoGenH.Append('#define %s %s \n' % (GetModeSizeName,FixPcdSizeTokenName)) @@ -1167,14 +1143,14 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): AutoGenH.Append('extern volatile %s %s %s%s;\n' % (Const, Pcd.DatumType, PcdVariableName, Array)) AutoGenH.Append('#define %s %s%s\n' % (GetModeName, Type, PcdVariableName)) - PcdDataSize = GetPcdSize(Pcd) + PcdDataSize = Pcd.GetPcdSize() AutoGenH.Append('#define %s %s\n' % (PatchPcdSizeTokenName, PcdDataSize)) AutoGenH.Append('#define %s %s \n' % (GetModeSizeName,PatchPcdSizeVariableName)) AutoGenH.Append('extern UINTN %s; \n' % PatchPcdSizeVariableName) AutoGenC.Append('GLOBAL_REMOVE_IF_UNREFERENCED UINTN %s = %s;\n' % (PatchPcdSizeVariableName,PcdDataSize)) else: - PcdDataSize = GetPcdSize(Pcd) + PcdDataSize = Pcd.GetPcdSize() AutoGenH.Append('#define %s %s\n' % (FixPcdSizeTokenName, PcdDataSize)) AutoGenH.Append('#define %s %s \n' % (GetModeSizeName,FixPcdSizeTokenName)) @@ -1333,7 +1309,7 @@ def CreateLibraryPcdCode(Info, AutoGenC, AutoGenH, Pcd): else: AutoGenH.Append('extern volatile %s %s%s;\n' % (DatumType, PcdVariableName, Array)) AutoGenH.Append('#define %s %s_gPcd_BinaryPatch_%s\n' %(GetModeName, Type, TokenCName)) - PcdDataSize = GetPcdSize(Pcd) + PcdDataSize = Pcd.GetPcdSize() if Pcd.DatumType not in TAB_PCD_NUMERIC_TYPES: AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPatchPcdSetPtrAndSize((VOID *)_gPcd_BinaryPatch_%s, &%s, %s, (SizeOfBuffer), (Buffer))\n' % (SetModeName, TokenCName, PatchPcdSizeVariableName, PatchPcdMaxSizeVariable)) AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPatchPcdSetPtrAndSizeS((VOID *)_gPcd_BinaryPatch_%s, &%s, %s, (SizeOfBuffer), (Buffer))\n' % (SetModeStatusName, TokenCName, PatchPcdSizeVariableName, PatchPcdMaxSizeVariable)) @@ -1367,7 +1343,7 @@ def CreateLibraryPcdCode(Info, AutoGenC, AutoGenH, Pcd): AutoGenH.Append('#define _PCD_VALUE_%s %s%s\n' %(TokenCName, Type, PcdVariableName)) else: AutoGenH.Append('#define _PCD_VALUE_%s %s\n' %(TokenCName, Pcd.DefaultValue)) - PcdDataSize = GetPcdSize(Pcd) + PcdDataSize = Pcd.GetPcdSize() if PcdItemType == TAB_PCDS_FIXED_AT_BUILD: if Pcd.DatumType not in TAB_PCD_NUMERIC_TYPES: if ConstFixedPcd: