On 05/25/17 19:38, Kinney, Michael D wrote: > Laszlo, > > I think the equivalent flag for GCC builds is --whole-archive. > > I tried adding that flag to DLINK_FLAGS in GCC5, and I get the > following error building OVMF from edk2/master with > -D SOURCE_DEBUG_ENABLE set. > > DxeLoad.obj (symbol from plugin): In function `InstallIplPermanentMemoryPpis': > (.text+0x0): multiple definition of `mMemoryDiscoveredNotifyList' > SecPeiDebugAgentLib.obj (symbol from plugin):(.text+0x0): first defined here > collect2: error: ld returned 1 exit status
Great find! That's the error message we should get. Unfortunately, after reading the "ld" manual on "--whole-archive", it seems that the complete object files will actually be copied into the resultant binary, even if several of their symbols will remain unused. I think that's quite sub-optimal. (I haven't verified this though.) What we'd like to get is (a) the full verification at link time, and (b) inclusion of *only* those symbols that are actually necessary. In your testing, when you build OVMF with and without "--whole-archive", do you see a difference in, say, the DXEFV footprint, when the build completes? (If so, then I wonder if we should add "--whole-archive" only to the NOOPT build... Not sure.) > Visual Studio 2015 Update 2 has also added a new linker flag called > /WHOLEARCHIVE. I am working on evaluating that flag to see if it > catches the same issue. Thanks! Laszlo >> -----Original Message----- >> From: Laszlo Ersek [mailto:ler...@redhat.com] >> Sent: Thursday, May 25, 2017 9:09 AM >> To: Kinney, Michael D <michael.d.kin...@intel.com>; Ard Biesheuvel >> <ard.biesheu...@linaro.org>; Andrew Fish (af...@apple.com) <af...@apple.com> >> Cc: Wu, Hao A <hao.a...@intel.com>; edk2-devel@lists.01.org; Fan, Jeff >> <jeff....@intel.com> >> Subject: Re: [edk2] [Patch] SourceLevelDebugPkg/SecPeiDebugAgentLib: Fix >> duplicate >> symbol >> >> On 05/25/17 03:47, Kinney, Michael D wrote: >>> Andrew, >>> >>> I think I have found an alternate fix for this XCODE5 specific >>> build failure. Since there appears to be a difference in the >>> linker behavior between MSFT/GCC/XCODE tool chains, I reviewed >>> the 'ld' command line options used in XCODE5 tool chain in >>> tools_def.txt. >>> >>> There is a flag set call '-all_load'. The description of this >>> flag is 'Loads all members of static archive libraries.'. >>> >>> I tried removing this flag from the XCODE5 specific SLINK_FLAGS >>> and DLINK_FLAGS statements in tools_def.txt, and the duplicate >>> symbol build failure is no longer present. I am able to build >>> and boot OVMF with XCODE5 with -D SOURCE_DEBUG_ENABLE flag set. >>> >>> This seems to make XCODE5 linker behavior match the MSFT and GCC >>> linker behavior. >>> >>> Do you know why '-all_load' is used in XCODE5 and what impacts >>> there may be from removing it? >> >> Please don't remove -all_load from there; instead we should figure out >> if the same can be brought to MSFT and GCC. >> >> The error message that XCODE5 emitted caught a real bug (undefined >> behavior according to ISO C, see my previous email), and so we should >> keep that detection enabled (we should even extend it to other >> toolchains, if that's possible). >> >> As for docs, I found this: >> >> http://www.manpages.info/macosx/ld.1.html >> >>> -all_load >>> Loads all members of static archive libraries. This option does >>> not apply to dynamic shared libraries. >> >> >> Thanks >> Laszlo _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel