This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: arm-eabi-4.4.3 with gold
- From: Doug Kwan (éæå) <dougkwan at google dot com>
- To: Qing Chang <changq at gmail dot com>
- Cc: binutils at sourceware dot org, Jing Yu <jingyu at google dot com>, Ying Wang <wangying at google dot com>
- Date: Tue, 8 Feb 2011 20:10:24 -0800
- Subject: Re: arm-eabi-4.4.3 with gold
- References: <AANLkTikQk6Va7VJ2CRyp6rZRB_aJ22FHq69jKi+tAFk6@mail.gmail.com> <AANLkTimiUrGuH0XGL8r8Jhvy+APcoen2_9F_nkfXLjdE@mail.gmail.com> <AANLkTikSgmGBUba_gX7GH8DQZFwfz1tDpyq9HbNYd9kJ@mail.gmail.com> <AANLkTikV=3i-s7Jc+vG8D6aD32_pH=TpL5ctEXPV9MSa@mail.gmail.com> <AANLkTikY7GFtATbGHjjLhB8j1hKohnUHQw41xmrAatof@mail.gmail.com>
This will break. The .commands and .apps sections will not be
preserved. It is a known problem. Unfortunately, this is a design
issue in the garbage collector in gold and it cannot be fixed easily.
You have no choice but to use GNU ld. Adding -fuse-ld=bfd is not
useful in your case as it seems that the linker is invoked directly.
On Tue, Feb 8, 2011 at 8:03 PM, Qing Chang <changq@gmail.com> wrote:
> Here is what I did to use "-fuse-ld=bfd",
> ====================
> diff --git a/makefile b/makefile
> index 699fcfe..1ea652e 100644
> --- a/makefile
> +++ b/makefile
> @@ -52,7 +52,7 @@ CPPFLAGS := -fno-exceptions -fno-rtti
> -fno-threadsafe-statics
> ASMFLAGS := -DASSEMBLY
> LDFLAGS :=
>
> -CFLAGS += -ffunction-sections -fdata-sections
> +CFLAGS += -ffunction-sections -fdata-sections -fuse-ld=bfd
> LDFLAGS += -gc-sections --no-enum-size-warning
>
> # top level rule
> ====================
> Here is the piece of link script of PROVIDE_HIDDEN and KEEP usage,
> ====================
> .rodata : {
> *(.rodata .rodata.* .gnu.linkonce.r.*)
> . = ALIGN(4);
> __commands_start = .;
> KEEP (*(.commands))
> __commands_end = .;
> . = ALIGN(4);
> __apps_start = .;
> KEEP (*(.apps))
> __apps_end = .;
> . = ALIGN(4);
> __rodata_end = . ;
> }
> .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
> PROVIDE_HIDDEN (__exidx_start = .);
> .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
> PROVIDE_HIDDEN (__exidx_end = .);
> ====================
> On Tue, Feb 8, 2011 at 9:55 PM, Doug Kwan (Ãö®¶¼w) <dougkwan@google.com> wrote:
>>
>> why -fuse-ld=bfd does not work? Do you invoke the linker directly?
>>
>> Could you give me an example in which PROVIDE_HIDDEN not long works
>> with the new tool-chain but does with the old one?
>>
>> Thanks
>>
>> -Doug
>>
>> On Tue, Feb 8, 2011 at 7:48 PM, Qing Chang <changq@gmail.com> wrote:
>> >
>> > The section was created by myself.
>> > Seems "-fuse-ld=bfd" won't make PROVIDE_HIDDEN nor KEEP work as well.
>> > The only working way for me is to hardcode in my makefile to
>> > use arm-eabi-ld.bfd explicitly
>> >
>> > On Tue, Feb 8, 2011 at 5:03 PM, Doug Kwan (Ãö®¶¼w) <dougkwan@google.com>
>> > wrote:
>> >>
>> >> KEEP is totally broken. What section do you need? You can fall back
>> >> on ld by adding -fuse-ld=bfd in gcc's linking step.
>> >>
>> >> On Tue, Feb 8, 2011 at 2:58 PM, Qing Chang <changq@gmail.com> wrote:
>> >> > Dear all,
>> >> > In the latest arm-eabi-4.4.3 toolchain of Android repo, gold was
>> >> > installed/used as default arm-eabi-ld, instead of bfd ld.
>> >> >
>> >> > However, compared with arm-eabi-4.4.0, with this new 4.4.3 gold,
>> >> > seems
>> >> > some
>> >> > key words are not handled in the same way as before. For example,
>> >> > * PROVIDE/PROVIDE_HIDDEN won't define symbol any more
>> >> > * KEEP won't keep sections during garbage collections any more
>> >> >
>> >> > Do we need certain extra option/flag to re-enable these when using
>> >> > 4.4.3 arm-eabi-ld (gold)?
>> >> > Thanks,
>> >> > Qing
>> >
>> >
>
>