From nobody Mon May 6 02:24:11 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1521784675250459.9319492718033; Thu, 22 Mar 2018 22:57:55 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 425F6223E0B86; Thu, 22 Mar 2018 22:51:21 -0700 (PDT) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 69389223E0B80 for ; Thu, 22 Mar 2018 22:51:20 -0700 (PDT) Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Mar 2018 22:57:52 -0700 Received: from shwdeopenpsi168.ccr.corp.intel.com ([10.239.158.129]) by fmsmga004.fm.intel.com with ESMTP; 22 Mar 2018 22:57:52 -0700 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.120; helo=mga04.intel.com; envelope-from=yonghong.zhu@intel.com; receiver=edk2-devel@lists.01.org X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,348,1517904000"; d="scan'208";a="39896373" From: Yonghong Zhu To: edk2-devel@lists.01.org Date: Fri, 23 Mar 2018 13:57:49 +0800 Message-Id: <1521784669-11164-1-git-send-email-yonghong.zhu@intel.com> X-Mailer: git-send-email 2.6.1.windows.1 Subject: [edk2] [Patch] BaseTools: Fix size override issue for Void* Patchable pcd X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: Liming Gao --- 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/Pyt= hon/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 =20 if Pcd.PcdValueFromComm: Pcd.DefaultValue =3D Pcd.PcdValueFromComm @@ -1159,10 +1160,11 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, P= cd): if Pcd.Type =3D=3D TAB_PCDS_PATCHABLE_IN_MODULE: AutoGenH.Append('#define %s %s\n' % (PatchPcdSizeTokenName= , Pcd.MaxDatumSize)) AutoGenH.Append('#define %s %s \n' % (GetModeSizeName,Pat= chPcdSizeVariableName)) AutoGenH.Append('extern UINTN %s; \n' % PatchPcdSizeVariab= leName) 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.Dat= umType, PcdVariableName, PcdValueName)) AutoGenH.Append('extern volatile %s %s %s%s;\n' % (Const, Pc= d.DatumType, PcdVariableName, Array)) AutoGenH.Append('#define %s %s%s\n' % (GetModeName, Type, Pcd= VariableName)) @@ -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 =20 if Pcd.PcdValueFromComm: Pcd.DefaultValue =3D Pcd.PcdValueFromComm # @@ -1316,26 +1319,27 @@ def CreateLibraryPcdCode(Info, AutoGenC, AutoGenH, = Pcd): AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPcdS= et%sS(%s, (SizeOfBuffer), (Buffer))\n' % (SetModeStatusName, DatumSizeLib, = PcdTokenName)) else: AutoGenH.Append('#define %s(Value) LibPcdSet%s(%s, (Value= ))\n' % (SetModeName, DatumSizeLib, PcdTokenName)) AutoGenH.Append('#define %s(Value) LibPcdSet%sS(%s, (Valu= e))\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_PA= TCHABLE_IN_MODULE] + '_' + TokenCName if DatumType not in ['UINT8', 'UINT16', 'UINT32', 'UINT64', 'BOOLE= AN']: - 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' %(DatumT= ype, TokenCName, Array)) else: AutoGenH.Append('extern volatile %s %s%s;\n' % (DatumType, P= cdVariableName, 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', 'B= OOLEAN']: - AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPatchPcd= SetPtrAndSize((VOID *)_gPcd_BinaryPatch_%s, &_gPcd_BinaryPatch_Size_%s, (UI= NTN)_PCD_PATCHABLE_%s_SIZE, (SizeOfBuffer), (Buffer))\n' % (SetModeName, To= kenCName, TokenCName, TokenCName)) - AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPatchPcd= SetPtrAndSizeS((VOID *)_gPcd_BinaryPatch_%s, &_gPcd_BinaryPatch_Size_%s, (U= INTN)_PCD_PATCHABLE_%s_SIZE, (SizeOfBuffer), (Buffer))\n' % (SetModeStatusN= ame, TokenCName, TokenCName, TokenCName)) - AutoGenH.Append('#define %s %s\n' % (PatchPcdSizeTokenName, Pc= d.MaxDatumSize)) + AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPatchPcd= SetPtrAndSize((VOID *)_gPcd_BinaryPatch_%s, &%s, %s, (SizeOfBuffer), (Buffe= r))\n' % (SetModeName, TokenCName, PatchPcdSizeVariableName, PatchPcdMaxSiz= eVariable)) + AutoGenH.Append('#define %s(SizeOfBuffer, Buffer) LibPatchPcd= SetPtrAndSizeS((VOID *)_gPcd_BinaryPatch_%s, &%s, %s, (SizeOfBuffer), (Buff= er))\n' % (SetModeStatusName, TokenCName, PatchPcdSizeVariableName, PatchPc= dMaxSizeVariable)) + AutoGenH.Append('#define %s %s\n' % (GetModeMaxSizeName,PatchP= cdMaxSizeVariable)) + AutoGenH.Append('extern const UINTN %s; \n' % PatchPcdMaxSizeV= ariable) else: AutoGenH.Append('#define %s(Value) (%s =3D (Value))\n' % (Set= ModeName, PcdVariableName)) AutoGenH.Append('#define %s(Value) ((%s =3D (Value)), RETURN_= SUCCESS)\n' % (SetModeStatusName, PcdVariableName)) AutoGenH.Append('#define %s %s\n' % (PatchPcdSizeTokenName, Pc= dDataSize)) =20 --=20 2.6.1.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel