On 01/27/16 10:18, Yonghong Zhu wrote:
> VOID* Patchable PCD in Library has the different declaration from the
> one in Driver, this issue that will cause GCC LTO build failure.

Wow, you managed to build edk2 modules with -flto? How? Is that going to
be added to BaseTools?

Thanks!
Laszlo

> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Yonghong Zhu <yonghong....@intel.com>
> ---
>  BaseTools/Source/Python/AutoGen/GenC.py | 15 ++++++++++++---
>  1 file changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/BaseTools/Source/Python/AutoGen/GenC.py 
> b/BaseTools/Source/Python/AutoGen/GenC.py
> index 93be718..3f0dfd9 100644
> --- a/BaseTools/Source/Python/AutoGen/GenC.py
> +++ b/BaseTools/Source/Python/AutoGen/GenC.py
> @@ -1,9 +1,9 @@
>  ## @file
>  # Routines for generating AutoGen.h and AutoGen.c
>  #
> -# Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
> +# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
>  # This program and the accompanying materials
>  # are licensed and made available under the terms and conditions of the BSD 
> License
>  # which accompanies this distribution.  The full text of the license may be 
> found at
>  # http://opensource.org/licenses/bsd-license.php
>  #
> @@ -1097,11 +1097,12 @@ def CreateLibraryPcdCode(Info, AutoGenC, AutoGenH, 
> Pcd):
>      GetModeSizeName = '_PCD_GET_MODE_SIZE' + '_' + Pcd.TokenCName
>  
>      Type = ''
>      Array = ''
>      if Pcd.DatumType == 'VOID*':
> -        Type = '(VOID *)'
> +        if Pcd.DefaultValue[0]== '{':
> +            Type = '(VOID *)'
>          Array = '[]'
>      PcdItemType = Pcd.Type
>      PcdExCNameList  = []
>      if PcdItemType in gDynamicExPcd:
>          PcdExTokenName = '_PCD_TOKEN_' + TokenSpaceGuidCName + '_' + 
> Pcd.TokenCName
> @@ -1159,11 +1160,19 @@ def CreateLibraryPcdCode(Info, AutoGenC, AutoGenH, 
> Pcd):
>              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:
>          PcdVariableName = '_gPcd_' + 
> gItemTypeStringDatabase[TAB_PCDS_PATCHABLE_IN_MODULE] + '_' + TokenCName
> -        AutoGenH.Append('extern volatile %s _gPcd_BinaryPatch_%s%s;\n' 
> %(DatumType, TokenCName, Array) )
> +        if DatumType == 'VOID*':
> +            ArraySize = int(Pcd.MaxDatumSize, 0)
> +            if Pcd.DefaultValue[0] == 'L':
> +                ArraySize = ArraySize / 2
> +            Array = '[%d]' % ArraySize
> +            DatumType = ['UINT8', 'UINT16'][Pcd.DefaultValue[0] == 'L']
> +            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))
>          if Pcd.DatumType == 'VOID*':
>              AutoGenH.Append('#define %s(SizeOfBuffer, Buffer)  
> LibPatchPcdSetPtrAndSize((VOID *)_gPcd_BinaryPatch_%s, 
> &_gPcd_BinaryPatch_Size_%s, (UINTN)_PCD_PATCHABLE_%s_SIZE, (SizeOfBuffer), 
> (Buffer))\n' % (SetModeName, Pcd.TokenCName, Pcd.TokenCName, Pcd.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, Pcd.TokenCName, Pcd.TokenCName, 
> Pcd.TokenCName))
>          else:
> 

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

Reply via email to