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