On 01/28/16 00:10, Andrew Fish wrote:
> 
>> On Jan 27, 2016, at 9:33 AM, Laszlo Ersek <ler...@redhat.com> wrote:
>>
>> 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?
>>
> 
> Laszlo,
> 
> I can tell you what you need to do for Xcode.
> DLINK flag you add: -object_path_lto $(DEST_DIR_DEBUG)/$(BASE_NAME).lto
> This is only needed for source level debug. 
> 
> Adding -flto to the CC_FLAGS makes the compiler emit LLVM, and if you do this 
> the linker knows what to do. And you can do the reverse and set -fno-lto to 
> turn it off, as last flag wins. So for example you can turn it by adding to 
> the CC_FLAG in your platform DSC if you want to test. 
> 
> Note sure how it works with GCC. 

Thank you for these hints, although I've never tried clang.

I vaguely recall someone had looked into this for gcc (maybe Scott?
that's why I CC'd him), but I don't remember why it didn't work out
ultimately.

Ah, right, here it is:

http://thread.gmane.org/gmane.comp.bios.tianocore.devel/17382

... It looks complicated. I fail to distill a clear idea of why that
patch wasn't merged.

Thanks
Laszlo

> 
> Thanks,
> 
> Andrew Fish
> 
>> 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
> 

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

Reply via email to