public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Gao, Liming" <liming.gao@intel.com>
To: Laszlo Ersek <lersek@redhat.com>,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: [Patch] BaseTools: Enable --whole-archive in GCC tool chain as the default option
Date: Mon, 28 Aug 2017 03:27:49 +0000	[thread overview]
Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14D78139F@shsmsx102.ccr.corp.intel.com> (raw)
In-Reply-To: <2cf820ad-4a6d-648e-560b-d223bef9b45d@redhat.com>

Laszlo:
  I will update the patch with your comments. 

Ard: 
  We collect the size impact in Ovmf platform. Its impact is small. So, my patch enable this option for all targets. Below is the data collected on OvmfIa32X64.dsc with GCC5 tool chain. Raw image is a little bigger. But, the compressed size is a little smaller. 

PEIFV   178472  --> 179176   +704   (Bytes)
DXEFV  4062512 --> 4075056  +12544 (Bytes)
FVMAIN_COMPACT 1190896 --> 1184920  -5976  (Bytes)

Thanks
Liming
>-----Original Message-----
>From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of
>Laszlo Ersek
>Sent: Friday, August 25, 2017 7:48 PM
>To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>Cc: edk2-devel@lists.01.org; Gao, Liming <liming.gao@intel.com>
>Subject: Re: [edk2] [Patch] BaseTools: Enable --whole-archive in GCC tool
>chain as the default option
>
>On 08/25/17 12:30, Ard Biesheuvel wrote:
>> On 25 August 2017 at 11:28, Laszlo Ersek <lersek@redhat.com> wrote:
>>> On 08/24/17 08:28, Liming Gao wrote:
>>>> https://bugzilla.tianocore.org/show_bug.cgi?id=581
>>>
>>> (1) I suggest adding one sentence (before you push the patch):
>>>
>>> "The --whole-archive linker option helps us catch multiply defined
>symbols."
>>>
>>>> Contributed-under: TianoCore Contribution Agreement 1.1
>>>> Signed-off-by: Liming Gao <liming.gao@intel.com>
>>>> Cc: Yonghong Zhu <yonghong.zhu@intel.com>
>>>> ---
>>>>  BaseTools/Conf/tools_def.template | 4 ++--
>>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/BaseTools/Conf/tools_def.template
>b/BaseTools/Conf/tools_def.template
>>>> index 24956e4..a85afd5 100755
>>>> --- a/BaseTools/Conf/tools_def.template
>>>> +++ b/BaseTools/Conf/tools_def.template
>>>> @@ -4377,7 +4377,7 @@ DEFINE GCC44_IA32_CC_FLAGS           =
>DEF(GCC44_ALL_CC_FLAGS) -m32 -march=i586
>>>>  DEFINE GCC44_X64_CC_FLAGS            = DEF(GCC44_ALL_CC_FLAGS) -m64
>-fno-stack-protector "-DEFIAPI=__attribute__((ms_abi))" -maccumulate-
>outgoing-args -mno-red-zone -Wno-address -mcmodel=small -fpie -fno-
>asynchronous-unwind-tables
>>>>  DEFINE GCC44_IA32_X64_DLINK_COMMON   = -nostdlib -Wl,-n,-q,--gc-
>sections -z common-page-size=0x20
>>>>  DEFINE GCC44_IA32_X64_ASLDLINK_FLAGS =
>DEF(GCC44_IA32_X64_DLINK_COMMON) -Wl,--entry,ReferenceAcpiTable -u
>ReferenceAcpiTable
>>>> -DEFINE GCC44_IA32_X64_DLINK_FLAGS    =
>DEF(GCC44_IA32_X64_DLINK_COMMON) -Wl,--
>entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-
>Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map
>>>> +DEFINE GCC44_IA32_X64_DLINK_FLAGS    =
>DEF(GCC44_IA32_X64_DLINK_COMMON) -Wl,--
>entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-
>Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map,--whole-archive
>>>>  DEFINE GCC44_IA32_DLINK2_FLAGS       = -Wl,--
>defsym=PECOFF_HEADER_SIZE=0x220 DEF(GCC_DLINK2_FLAGS_COMMON)
>>>>  DEFINE GCC44_X64_DLINK_FLAGS         =
>DEF(GCC44_IA32_X64_DLINK_FLAGS) -Wl,-melf_x86_64,--oformat=elf64-x86-
>64
>>>>  DEFINE GCC44_X64_DLINK2_FLAGS        = -Wl,--
>defsym=PECOFF_HEADER_SIZE=0x228 DEF(GCC_DLINK2_FLAGS_COMMON)
>>>> @@ -4457,7 +4457,7 @@ DEFINE GCC49_IA32_CC_FLAGS           =
>DEF(GCC48_IA32_CC_FLAGS)
>>>>  DEFINE GCC49_X64_CC_FLAGS            = DEF(GCC48_X64_CC_FLAGS)
>>>>  DEFINE GCC49_IA32_X64_DLINK_COMMON   = -nostdlib -Wl,-n,-q,--gc-
>sections -z common-page-size=0x40
>>>>  DEFINE GCC49_IA32_X64_ASLDLINK_FLAGS =
>DEF(GCC49_IA32_X64_DLINK_COMMON) -Wl,--entry,ReferenceAcpiTable -u
>ReferenceAcpiTable
>>>> -DEFINE GCC49_IA32_X64_DLINK_FLAGS    =
>DEF(GCC49_IA32_X64_DLINK_COMMON) -Wl,--
>entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-
>Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map
>>>> +DEFINE GCC49_IA32_X64_DLINK_FLAGS    =
>DEF(GCC49_IA32_X64_DLINK_COMMON) -Wl,--
>entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-
>Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map,--whole-archive
>>>>  DEFINE GCC49_IA32_DLINK2_FLAGS       =
>DEF(GCC48_IA32_DLINK2_FLAGS)
>>>>  DEFINE GCC49_X64_DLINK_FLAGS         =
>DEF(GCC49_IA32_X64_DLINK_FLAGS) -Wl,-melf_x86_64,--oformat=elf64-x86-
>64
>>>>  DEFINE GCC49_X64_DLINK2_FLAGS        =
>DEF(GCC48_X64_DLINK2_FLAGS)
>>>>
>>>
>>> This patch doesn't apply directly on current master, due to context
>>> differences introduced by 2f7f1e73c10f ("BaseTools: Add the missing -pie
>>> link option in GCC tool chain", 2017-08-23).
>>>
>>> However, it does apply to the parent of 2f7f1e73c10f, and from there it
>>> can be rebased without manual conflict resolution.
>>>
>>> I did just that, and tested the patch with GCC48, IA32, IA32X64, and X64
>>> OVMF. It works for me:
>>>
>>> Tested-by: Laszlo Ersek <lersek@redhat.com>
>>>
>>> (2) If Ard agrees, can you please post a similar patch for ARM/AARCH64,
>>> GCC? (I think that should be a separate patch, so that I don't have to
>>> re-test the IA32/X64 change.)
>>>
>>
>> Didn't we decide this should be DEBUG/NOOPT only, due to code size
>increase?
>
>I didn't remember off-hand, but I found this in my mailbox:
>
>http://mid.mail-archive.com/df25cbe5-a6a0-79d5-ccd7-
>f0ad53c2ed03@redhat.com
>
>On 05/26/17 11:05, Laszlo Ersek wrote:
>> - GCC toolchains: I think I'd like --whole-archive to become the
>>   default (regardless of build target), since there don't seem to be
>>   any relevant size costs to it.
>
>Up-thread, Mike wrote "Total used difference = 1816 bytes larger with
>-whole-archive".
>
>Nonetheless, if we want to be super cautious, I don't mind if RELEASE
>doesn't get --whole-archive.
>
>Thanks,
>Laszlo
>_______________________________________________
>edk2-devel mailing list
>edk2-devel@lists.01.org
>https://lists.01.org/mailman/listinfo/edk2-devel


  reply	other threads:[~2017-08-28  3:25 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-24  6:28 [Patch] BaseTools: Enable --whole-archive in GCC tool chain as the default option Liming Gao
2017-08-25 10:28 ` Laszlo Ersek
2017-08-25 10:30   ` Ard Biesheuvel
2017-08-25 11:48     ` Laszlo Ersek
2017-08-28  3:27       ` Gao, Liming [this message]
2017-08-28 16:59         ` Ard Biesheuvel
2017-08-29  7:41           ` Gao, Liming
2017-08-29 13:33             ` Ard Biesheuvel
2017-08-29 15:47             ` Kinney, Michael D
2017-08-29 16:37               ` Ard Biesheuvel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4A89E2EF3DFEDB4C8BFDE51014F606A14D78139F@shsmsx102.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox