Zhiju:

1. Please make sure struct PEI_PCD_DATABASE_INIT in AutoGen.h to match 
gPEIPcdDbInit in AutoGen.c. 
2. Please make sure struct DXE_PCD_DATABASE_INIT in AutoGen.h to match 
gDXEPcdDbinit in AutoGen.c
3. gDXEPcdDbinit in AutoGen.c
  a. Keep origin style of /* LocalTokenNumberTable */ and /* VariableHead */
  b. Remove /* SkuHead */. It is not in PCD data bin. 
  c. Use the real string for the value in /* PcdTokenTable */ and /* 
PcdCNameTable */

Thanks
Liming
> -----Original Message-----
> From: Feng, Bob C
> Sent: Saturday, February 2, 2019 9:52 AM
> To: edk2-devel@lists.01.org
> Cc: Zhao, ZhiqiangX <zhiqiangx.z...@intel.com>; Feng, Bob C 
> <bob.c.f...@intel.com>; Gao, Liming <liming....@intel.com>
> Subject: [Patch] BaseTools: Correct the PcdDatabase Info in AutoGen
> 
> From: Zhaozh1x <zhiqiangx.z...@intel.com>
> 
> PcdDriver AutoGen code shows PCD DB format for debug purpose only.
> But now, AutoGen code doesn't exactly match the generated
> PCD DB binary file. It brings the complex for Pcd driver debug.
> 
> This patch is going to fix that issue.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Bob Feng <bob.c.f...@intel.com>
> Cc: Liming Gao <liming....@intel.com>
> ---
>  BaseTools/Source/Python/AutoGen/GenPcdDb.py | 41 +++++++++++++--------
>  1 file changed, 26 insertions(+), 15 deletions(-)
> 
> diff --git a/BaseTools/Source/Python/AutoGen/GenPcdDb.py 
> b/BaseTools/Source/Python/AutoGen/GenPcdDb.py
> index cbf7a39dd5..2ca9001417 100644
> --- a/BaseTools/Source/Python/AutoGen/GenPcdDb.py
> +++ b/BaseTools/Source/Python/AutoGen/GenPcdDb.py
> @@ -52,23 +52,32 @@ ${END}
>  ${BEGIN}    { ${EXMAPPING_TABLE_EXTOKEN}, ${EXMAPPING_TABLE_LOCAL_TOKEN}, 
> ${EXMAPPING_TABLE_GUID_INDEX} },
>  ${END}
>    },
>    /* LocalTokenNumberTable */
>    {
> -${BEGIN}    offsetof(${PHASE}_PCD_DATABASE, 
> ${TOKEN_INIT}.${TOKEN_CNAME}_${TOKEN_GUID}${VARDEF_HEADER}) |
> ${TOKEN_TYPE},
> +${BEGIN}    ${LOCAL_TOKEN_NUMBER_DB_VALUE}, /* 
> offsetof(${PHASE}_PCD_DATABASE,
> ${TOKEN_INIT}.${TOKEN_CNAME}_${TOKEN_GUID}${VARDEF_HEADER}) | ${TOKEN_TYPE} */
>  ${END}
>    },
>    /* GuidTable */
>    {
>  ${BEGIN}    ${GUID_STRUCTURE},
>  ${END}
>    },
> +  /* StringHead */
>  ${BEGIN}  { ${STRING_HEAD_VALUE} }, /*
> ${STRING_HEAD_CNAME_DECL}_${STRING_HEAD_GUID_DECL}[${STRING_HEAD_NUMSKUS_DECL}]
>  */
>  ${END}
> +  /* PcdNameTable */
> +  /* TokenSpaceCNameIndex, PcdCNameIndex, TokenSpaceCNameIndex, 
> PcdCNameIndex, ...... */
> +  {
> +${BEGIN}    ${PCD_NAME_OFFSET},
> +${END}
> +  },
> +  /* VariableHead */
> +  /* StringIndex, DefaultValueOffset, GuidTableIndex, Offset, Attributes, 
> Property */
>  ${BEGIN}  /* 
> ${VARIABLE_HEAD_CNAME_DECL}_${VARIABLE_HEAD_GUID_DECL}_Variable_Header[${VARIABLE_HEAD_NUMSKUS_DECL}]
> */
>    {
> -    ${VARIABLE_HEAD_VALUE}
> +    ${VARIABLE_DB_VALUE}
>    },
>  ${END}
>  /* SkuHead */
>    {
>    ${BEGIN} offsetof (${PHASE}_PCD_DATABASE, 
> ${TOKEN_INIT}.${TOKEN_CNAME}_${TOKEN_GUID}${VARDEF_HEADER}) |
> ${TOKEN_TYPE}, /* */
> @@ -76,10 +85,20 @@ ${END}
>    ${END}
>    },
>   /* StringTable */
>  ${BEGIN}  ${STRING_TABLE_VALUE}, /* 
> ${STRING_TABLE_CNAME}_${STRING_TABLE_GUID} */
>  ${END}
> +  /* PcdTokenTable */
> +   {
> +${BEGIN}    ${PCD_TOKENSPACE}, /* PCD_TOKENSPACE */
> +${END}
> +  },
> +  /* PcdCNameTable */
> +  {
> +${BEGIN}    ${PCD_CNAME}, /* PCD_CNAME */
> +${END}
> +  },
>    /* SizeTable */
>    {
>  ${BEGIN}    ${SIZE_TABLE_MAXIMUM_LENGTH}, ${SIZE_TABLE_CURRENT_LENGTH}, /* 
> ${SIZE_TABLE_CNAME}_${SIZE_TABLE_GUID} */
>  ${END}
>    },
> @@ -1221,18 +1240,10 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, 
> DynamicPcdList, Phase):
>                  if VariableGuid not in GuidList:
>                      GuidList.append(VariableGuid)
>                      Dict['GUID_STRUCTURE'].append(VariableGuidStructure)
>                  VariableHeadGuidIndex = GuidList.index(VariableGuid)
> 
> -                if "PCD_TYPE_STRING" in Pcd.TokenTypeList:
> -                    VariableHeadValueList.append('%dU, 
> offsetof(%s_PCD_DATABASE, Init.%s_%s), %dU, %sU' %
> -                                                 (VariableHeadStringIndex, 
> Phase, CName, TokenSpaceGuid,
> -                                                 VariableHeadGuidIndex, 
> Sku.VariableOffset))
> -                else:
> -                    VariableHeadValueList.append('%dU, 
> offsetof(%s_PCD_DATABASE, Init.%s_%s_VariableDefault_%s), %dU, %sU' %
> -                                                 (VariableHeadStringIndex, 
> Phase, CName, TokenSpaceGuid, SkuIdIndex,
> -                                                 VariableHeadGuidIndex, 
> Sku.VariableOffset))
>                  Dict['VARDEF_CNAME_'+Pcd.DatumType].append(CName)
>                  Dict['VARDEF_GUID_'+Pcd.DatumType].append(TokenSpaceGuid)
>                  Dict['VARDEF_SKUID_'+Pcd.DatumType].append(SkuIdIndex)
>                  if "PCD_TYPE_STRING" in  Pcd.TokenTypeList:
>                      Dict['VARDEF_VALUE_' + Pcd.DatumType].append("%s_%s[%d]" 
> % (Pcd.TokenCName, TokenSpaceGuid,
> SkuIdIndex))
> @@ -1571,13 +1582,11 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, 
> DynamicPcdList, Phase):
>          if AvailableSkuNumber not in Dict['SKUID_VALUE']:
>              Dict['SKUID_VALUE'].append(AvailableSkuNumber)
>      Dict['SKUID_VALUE'][0] = len(Dict['SKUID_VALUE']) - 1
> 
>      AutoGenH.Append(gPcdDatabaseAutoGenH.Replace(Dict))
> -    if NumberOfLocalTokens == 0:
> -        AutoGenC.Append(gEmptyPcdDatabaseAutoGenC.Replace(Dict))
> -    else:
> +    if NumberOfLocalTokens != 0:
>          #
>          # Update Size Table to the right order, it should be same with 
> LocalTokenNumberTable
>          #
>          SizeCNameTempList = []
>          SizeGuidTempList = []
> @@ -1603,15 +1612,17 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, 
> DynamicPcdList, Phase):
>                  Dict['SIZE_TABLE_CNAME'][Count] = SizeCNameTempList[Count]
>                  Dict['SIZE_TABLE_GUID'][Count] = SizeGuidTempList[Count]
>                  Dict['SIZE_TABLE_CURRENT_LENGTH'][Count] = 
> SizeCurLenTempList[Count]
>                  Dict['SIZE_TABLE_MAXIMUM_LENGTH'][Count] = 
> SizeMaxLenTempList[Count]
> 
> -        AutoGenC.Append(gPcdDatabaseAutoGenC.Replace(Dict))
> -
> 
>  #     print Phase
>      Buffer = BuildExDataBase(Dict)
> +    if NumberOfLocalTokens == 0:
> +        AutoGenC.Append(gEmptyPcdDatabaseAutoGenC.Replace(Dict))
> +    else:
> +        AutoGenC.Append(gPcdDatabaseAutoGenC.Replace(Dict))
>      return AutoGenH, AutoGenC, Buffer, VarCheckTab
> 
>  def GetOrderedDynamicPcdList(DynamicPcdList, PcdTokenNumberList):
>      ReorderedDyPcdList = [None for i in range(len(DynamicPcdList))]
>      for Pcd in DynamicPcdList:
> --
> 2.20.1.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to