public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Laszlo Ersek <lersek@redhat.com>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	Liming Gao <liming.gao@intel.com>
Subject: Re: [Patch] BaseTools: Enable --whole-archive in GCC tool chain as the default option
Date: Fri, 25 Aug 2017 13:48:20 +0200	[thread overview]
Message-ID: <2cf820ad-4a6d-648e-560b-d223bef9b45d@redhat.com> (raw)
In-Reply-To: <CAKv+Gu_LSrLP38QDfU-x7-=No8=YnWALVU_U3WqO6Bf4YQc83A@mail.gmail.com>

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


  reply	other threads:[~2017-08-25 11:45 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 [this message]
2017-08-28  3:27       ` Gao, Liming
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=2cf820ad-4a6d-648e-560b-d223bef9b45d@redhat.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