* [Patch] BaseTools: Fix size override issue for Void* Patchable pcd
@ 2018-03-23 5:57 Yonghong Zhu
2018-04-09 5:44 ` Gao, Liming
0 siblings, 1 reply; 2+ messages in thread
From: Yonghong Zhu @ 2018-03-23 5:57 UTC (permalink / raw)
To: edk2-devel
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 <yonghong.zhu@intel.com>
---
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 = PcdItem[0]
break
PcdTokenName = '_PCD_TOKEN_' + TokenCName
PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'
PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName
+ PatchPcdMaxSizeVariable = '_gPcd_BinaryPatch_MaxSize_' + TokenCName
FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName
FixedPcdSizeVariableName = '_gPcd_FixedAtBuild_Size_' + TokenCName
if Pcd.PcdValueFromComm:
Pcd.DefaultValue = Pcd.PcdValueFromComm
@@ -1159,10 +1160,11 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd):
if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE:
AutoGenH.Append('#define %s %s\n' % (PatchPcdSizeTokenName, 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 = %s;\n' % (PatchPcdSizeVariableName,PcdDataSize))
+ AutoGenC.Append('GLOBAL_REMOVE_IF_UNREFERENCED const UINTN %s = %s;\n' % (PatchPcdMaxSizeVariable,Pcd.MaxDatumSize))
elif Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE:
AutoGenH.Append('#define %s %s\n' %(PcdValueName, Value))
AutoGenC.Append('volatile %s %s %s = %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 = '_PCD_TOKEN_' + TokenCName
FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName
PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'
PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName
+ PatchPcdMaxSizeVariable = '_gPcd_BinaryPatch_MaxSize_' + TokenCName
FixedPcdSizeVariableName = '_gPcd_FixedAtBuild_Size_' + TokenCName
if Pcd.PcdValueFromComm:
Pcd.DefaultValue = 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, (Value))\n' % (SetModeName, DatumSizeLib, PcdTokenName))
AutoGenH.Append('#define %s(Value) LibPcdSet%sS(%s, (Value))\n' % (SetModeStatusName, DatumSizeLib, PcdTokenName))
if PcdItemType == TAB_PCDS_PATCHABLE_IN_MODULE:
+ GetModeMaxSizeName = '_PCD_GET_MODE_MAXSIZE' + '_' + TokenCName
PcdVariableName = '_gPcd_' + gItemTypeStringDatabase[TAB_PCDS_PATCHABLE_IN_MODULE] + '_' + TokenCName
if DatumType not in ['UINT8', 'UINT16', 'UINT32', 'UINT64', 'BOOLEAN']:
- ArraySize = int(Pcd.MaxDatumSize, 0)
- if Pcd.DefaultValue[0] == 'L':
- ArraySize = ArraySize / 2
- Array = '[%d]' % ArraySize
- DatumType = ['UINT8', 'UINT16'][Pcd.DefaultValue[0] == 'L']
+ if DatumType == 'VOID*' and Array == '[]':
+ DatumType = ['UINT8', 'UINT16'][Pcd.DefaultValue[0] == 'L']
+ else:
+ DatumType = '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' %(GetModeName, Type, TokenCName))
PcdDataSize = 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 = (Value))\n' % (SetModeName, PcdVariableName))
AutoGenH.Append('#define %s(Value) ((%s = (Value)), RETURN_SUCCESS)\n' % (SetModeStatusName, PcdVariableName))
AutoGenH.Append('#define %s %s\n' % (PatchPcdSizeTokenName, PcdDataSize))
--
2.6.1.windows.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Patch] BaseTools: Fix size override issue for Void* Patchable pcd
2018-03-23 5:57 [Patch] BaseTools: Fix size override issue for Void* Patchable pcd Yonghong Zhu
@ 2018-04-09 5:44 ` Gao, Liming
0 siblings, 0 replies; 2+ messages in thread
From: Gao, Liming @ 2018-04-09 5:44 UTC (permalink / raw)
To: Zhu, Yonghong, edk2-devel@lists.01.org
Reviewed-by: Liming Gao <liming.gao@intel.com>
>-----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* Patchable
>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 <yonghong.zhu@intel.com>
>---
> 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 = PcdItem[0]
> break
> PcdTokenName = '_PCD_TOKEN_' + TokenCName
> PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'
> PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName
>+ PatchPcdMaxSizeVariable = '_gPcd_BinaryPatch_MaxSize_' +
>TokenCName
> FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName
> FixedPcdSizeVariableName = '_gPcd_FixedAtBuild_Size_' + TokenCName
>
> if Pcd.PcdValueFromComm:
> Pcd.DefaultValue = Pcd.PcdValueFromComm
>@@ -1159,10 +1160,11 @@ def CreateModulePcdCode(Info, AutoGenC,
>AutoGenH, Pcd):
> if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE:
> AutoGenH.Append('#define %s %s\n' % (PatchPcdSizeTokenName,
>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
>= %s;\n' % (PatchPcdSizeVariableName,PcdDataSize))
>+ AutoGenC.Append('GLOBAL_REMOVE_IF_UNREFERENCED const
>UINTN %s = %s;\n' % (PatchPcdMaxSizeVariable,Pcd.MaxDatumSize))
> elif Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE:
> AutoGenH.Append('#define %s %s\n' %(PcdValueName, Value))
> AutoGenC.Append('volatile %s %s %s = %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 = '_PCD_TOKEN_' + TokenCName
> FixPcdSizeTokenName = '_PCD_SIZE_' + TokenCName
> PatchPcdSizeTokenName = '_PCD_PATCHABLE_' + TokenCName +'_SIZE'
> PatchPcdSizeVariableName = '_gPcd_BinaryPatch_Size_' + TokenCName
>+ PatchPcdMaxSizeVariable = '_gPcd_BinaryPatch_MaxSize_' +
>TokenCName
> FixedPcdSizeVariableName = '_gPcd_FixedAtBuild_Size_' + TokenCName
>
> if Pcd.PcdValueFromComm:
> Pcd.DefaultValue = 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, (Value))\n' %
>(SetModeName, DatumSizeLib, PcdTokenName))
> AutoGenH.Append('#define %s(Value) LibPcdSet%sS(%s,
>(Value))\n' % (SetModeStatusName, DatumSizeLib, PcdTokenName))
> if PcdItemType == TAB_PCDS_PATCHABLE_IN_MODULE:
>+ GetModeMaxSizeName = '_PCD_GET_MODE_MAXSIZE' + '_' +
>TokenCName
> PcdVariableName = '_gPcd_' +
>gItemTypeStringDatabase[TAB_PCDS_PATCHABLE_IN_MODULE] + '_' +
>TokenCName
> if DatumType not in ['UINT8', 'UINT16', 'UINT32', 'UINT64', 'BOOLEAN']:
>- ArraySize = int(Pcd.MaxDatumSize, 0)
>- if Pcd.DefaultValue[0] == 'L':
>- ArraySize = ArraySize / 2
>- Array = '[%d]' % ArraySize
>- DatumType = ['UINT8', 'UINT16'][Pcd.DefaultValue[0] == 'L']
>+ if DatumType == 'VOID*' and Array == '[]':
>+ DatumType = ['UINT8', 'UINT16'][Pcd.DefaultValue[0] == 'L']
>+ else:
>+ DatumType = '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 = 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 = (Value))\n' %
>(SetModeName, PcdVariableName))
> AutoGenH.Append('#define %s(Value) ((%s = (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
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-04-09 5:44 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-23 5:57 [Patch] BaseTools: Fix size override issue for Void* Patchable pcd Yonghong Zhu
2018-04-09 5:44 ` Gao, Liming
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox