From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.136; helo=mga12.intel.com; envelope-from=liming.gao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 3913E21F2E107 for ; Sun, 8 Apr 2018 22:44:28 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Apr 2018 22:44:27 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,426,1517904000"; d="scan'208";a="215067590" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga005.jf.intel.com with ESMTP; 08 Apr 2018 22:44:27 -0700 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 8 Apr 2018 22:44:26 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx117.amr.corp.intel.com (10.18.116.17) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 8 Apr 2018 22:44:26 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.239]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.151]) with mapi id 14.03.0319.002; Mon, 9 Apr 2018 13:44:24 +0800 From: "Gao, Liming" To: "Zhu, Yonghong" , "edk2-devel@lists.01.org" Thread-Topic: [edk2] [Patch] BaseTools: Fix size override issue for Void* Patchable pcd Thread-Index: AQHTwmvyEZGpIKVZp0+bp16UfajN26P4BsJg Date: Mon, 9 Apr 2018 05:44:24 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E20A4F4@SHSMSX104.ccr.corp.intel.com> References: <1521784669-11164-1-git-send-email-yonghong.zhu@intel.com> In-Reply-To: <1521784669-11164-1-git-send-email-yonghong.zhu@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch] BaseTools: Fix size override issue for Void* Patchable pcd X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Apr 2018 05:44:28 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Liming Gao >-----Original Message----- >From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of >Yonghong Zhu >Sent: Friday, March 23, 2018 1:58 PM >To: edk2-devel@lists.01.org >Subject: [edk2] [Patch] BaseTools: Fix size override issue for Void* Patch= able >pcd > >when multiple driver link same library, and the drivers override the pcd >to different value in the DSC component section, it cause the pcd size >incorrect. > >Contributed-under: TianoCore Contribution Agreement 1.1 >Signed-off-by: Yonghong Zhu >--- > BaseTools/Source/Python/AutoGen/GenC.py | 20 ++++++++++++-------- > 1 file changed, 12 insertions(+), 8 deletions(-) > >diff --git a/BaseTools/Source/Python/AutoGen/GenC.py >b/BaseTools/Source/Python/AutoGen/GenC.py >index 0509a9f..a895067 100644 >--- a/BaseTools/Source/Python/AutoGen/GenC.py >+++ b/BaseTools/Source/Python/AutoGen/GenC.py >@@ -912,10 +912,11 @@ def CreateModulePcdCode(Info, AutoGenC, >AutoGenH, Pcd): > TokenCName =3D PcdItem[0] > break > PcdTokenName =3D '_PCD_TOKEN_' + TokenCName > PatchPcdSizeTokenName =3D '_PCD_PATCHABLE_' + TokenCName +'_SIZE' > PatchPcdSizeVariableName =3D '_gPcd_BinaryPatch_Size_' + TokenCName >+ PatchPcdMaxSizeVariable =3D '_gPcd_BinaryPatch_MaxSize_' + >TokenCName > FixPcdSizeTokenName =3D '_PCD_SIZE_' + TokenCName > FixedPcdSizeVariableName =3D '_gPcd_FixedAtBuild_Size_' + TokenCName > > if Pcd.PcdValueFromComm: > Pcd.DefaultValue =3D Pcd.PcdValueFromComm >@@ -1159,10 +1160,11 @@ def CreateModulePcdCode(Info, AutoGenC, >AutoGenH, Pcd): > if Pcd.Type =3D=3D TAB_PCDS_PATCHABLE_IN_MODULE: > AutoGenH.Append('#define %s %s\n' % (PatchPcdSizeTokenNam= e, >Pcd.MaxDatumSize)) > AutoGenH.Append('#define %s %s \n' % >(GetModeSizeName,PatchPcdSizeVariableName)) > AutoGenH.Append('extern UINTN %s; \n' % >PatchPcdSizeVariableName) > AutoGenC.Append('GLOBAL_REMOVE_IF_UNREFERENCED UINTN %s >=3D %s;\n' % (PatchPcdSizeVariableName,PcdDataSize)) >+ AutoGenC.Append('GLOBAL_REMOVE_IF_UNREFERENCED const >UINTN %s =3D %s;\n' % (PatchPcdMaxSizeVariable,Pcd.MaxDatumSize)) > elif Pcd.Type =3D=3D TAB_PCDS_PATCHABLE_IN_MODULE: > AutoGenH.Append('#define %s %s\n' %(PcdValueName, Value)) > AutoGenC.Append('volatile %s %s %s =3D %s;\n' %(Const, >Pcd.DatumType, PcdVariableName, PcdValueName)) > AutoGenH.Append('extern volatile %s %s %s%s;\n' % (Const, >Pcd.DatumType, PcdVariableName, Array)) > AutoGenH.Append('#define %s %s%s\n' % (GetModeName, Type, >PcdVariableName)) >@@ -1210,10 +1212,11 @@ def CreateLibraryPcdCode(Info, AutoGenC, >AutoGenH, Pcd): > break > PcdTokenName =3D '_PCD_TOKEN_' + TokenCName > FixPcdSizeTokenName =3D '_PCD_SIZE_' + TokenCName > PatchPcdSizeTokenName =3D '_PCD_PATCHABLE_' + TokenCName +'_SIZE' > PatchPcdSizeVariableName =3D '_gPcd_BinaryPatch_Size_' + TokenCName >+ PatchPcdMaxSizeVariable =3D '_gPcd_BinaryPatch_MaxSize_' + >TokenCName > FixedPcdSizeVariableName =3D '_gPcd_FixedAtBuild_Size_' + TokenCName > > if Pcd.PcdValueFromComm: > Pcd.DefaultValue =3D Pcd.PcdValueFromComm > # >@@ -1316,26 +1319,27 @@ def CreateLibraryPcdCode(Info, AutoGenC, >AutoGenH, Pcd): > AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) >LibPcdSet%sS(%s, (SizeOfBuffer), (Buffer))\n' % (SetModeStatusName, >DatumSizeLib, PcdTokenName)) > else: > AutoGenH.Append('#define %s(Value) LibPcdSet%s(%s, (Valu= e))\n' % >(SetModeName, DatumSizeLib, PcdTokenName)) > AutoGenH.Append('#define %s(Value) LibPcdSet%sS(%s, >(Value))\n' % (SetModeStatusName, DatumSizeLib, PcdTokenName)) > if PcdItemType =3D=3D TAB_PCDS_PATCHABLE_IN_MODULE: >+ GetModeMaxSizeName =3D '_PCD_GET_MODE_MAXSIZE' + '_' + >TokenCName > PcdVariableName =3D '_gPcd_' + >gItemTypeStringDatabase[TAB_PCDS_PATCHABLE_IN_MODULE] + '_' + >TokenCName > if DatumType not in ['UINT8', 'UINT16', 'UINT32', 'UINT64', 'BOOL= EAN']: >- ArraySize =3D int(Pcd.MaxDatumSize, 0) >- if Pcd.DefaultValue[0] =3D=3D 'L': >- ArraySize =3D ArraySize / 2 >- Array =3D '[%d]' % ArraySize >- DatumType =3D ['UINT8', 'UINT16'][Pcd.DefaultValue[0] =3D=3D = 'L'] >+ if DatumType =3D=3D 'VOID*' and Array =3D=3D '[]': >+ DatumType =3D ['UINT8', 'UINT16'][Pcd.DefaultValue[0] =3D= =3D 'L'] >+ else: >+ DatumType =3D 'UINT8' > AutoGenH.Append('extern %s >_gPcd_BinaryPatch_%s%s;\n' %(DatumType, TokenCName, Array)) > else: > AutoGenH.Append('extern volatile %s %s%s;\n' % (DatumType, >PcdVariableName, Array)) > >AutoGenH.Append('#define %s %s_gPcd_BinaryPatch_%s\n' %(GetModeNa >me, Type, TokenCName)) > PcdDataSize =3D GetPcdSize(Pcd) > if Pcd.DatumType not in ['UINT8', 'UINT16', 'UINT32', 'UINT64', >'BOOLEAN']: >- AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) >LibPatchPcdSetPtrAndSize((VOID *)_gPcd_BinaryPatch_%s, >&_gPcd_BinaryPatch_Size_%s, (UINTN)_PCD_PATCHABLE_%s_SIZE, >(SizeOfBuffer), (Buffer))\n' % (SetModeName, TokenCName, TokenCName, >TokenCName)) >- AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) >LibPatchPcdSetPtrAndSizeS((VOID *)_gPcd_BinaryPatch_%s, >&_gPcd_BinaryPatch_Size_%s, (UINTN)_PCD_PATCHABLE_%s_SIZE, >(SizeOfBuffer), (Buffer))\n' % (SetModeStatusName, TokenCName, >TokenCName, TokenCName)) >- AutoGenH.Append('#define %s %s\n' % (PatchPcdSizeTokenName, >Pcd.MaxDatumSize)) >+ 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)) >+ AutoGenH.Append('#define %s %s\n' % >(GetModeMaxSizeName,PatchPcdMaxSizeVariable)) >+ AutoGenH.Append('extern const UINTN %s; \n' % >PatchPcdMaxSizeVariable) > else: > AutoGenH.Append('#define %s(Value) (%s =3D (Value))\n' % >(SetModeName, PcdVariableName)) > AutoGenH.Append('#define %s(Value) ((%s =3D (Value)), >RETURN_SUCCESS)\n' % (SetModeStatusName, PcdVariableName)) > AutoGenH.Append('#define %s %s\n' % (PatchPcdSizeTokenName, >PcdDataSize)) > >-- >2.6.1.windows.1 > >_______________________________________________ >edk2-devel mailing list >edk2-devel@lists.01.org >https://lists.01.org/mailman/listinfo/edk2-devel