[PATCH] elf: Also check linked-to section for SHT_NOTE section
Fangrui Song
i@maskray.me
Thu Oct 1 03:41:59 GMT 2020
On Wed, Sep 30, 2020 at 7:03 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Wed, Sep 30, 2020 at 7:01 AM Nick Clifton <nickc@redhat.com> wrote:
> >
> > Hi H.J.
> >
> > Thanks for taking an interest in this.
> >
> > > Please try this patch.
> > It did not appear to make a difference. :-(
> >
> > I am using an extended test case (attached) but the results are the
> > same as before:
> >
> > % as eliminate.s -o eliminate.o
> > % ld -e 0 --gc-sections --print-gc-sections eliminate.o
> > ld: removing unused section '.group' in file 'eliminate.o'
> > ld: removing unused section '.group' in file 'eliminate.o'
> > ld: removing unused section '.text' in file 'eliminate.o'
> > ld: removing unused section '.unused1' in file 'eliminate.o'
> > ld: removing unused section '.unused2[unused_group]' in file 'eliminate.o'
> > ld: removing unused section '.unused3[unused_group2]' in file 'eliminate.o'
> > ld: removing unused section '.gnu.note2[unused_group]' in file 'eliminate.o'
> > ld: removing unused section '.gnu.note3[unused_group2]' in file 'eliminate.o'
> > ld: a.out: sh_link of section `.gnu.note1' points to discarded section `.unused1' of `eliminate.o'
> > ld: final link failed: bad value
> >
> > Cheers
> > Nick
>
> Works for me:
>
> [hjl@gnu-cfl-2 ld]$ gcc -c eliminate.s
> [hjl@gnu-cfl-2 ld]$ ./ld-new -e 0 --gc-sections --print-gc-sections eliminate.o
> ./ld-new: removing unused section '.group' in file 'eliminate.o'
> ./ld-new: removing unused section '.group' in file 'eliminate.o'
> ./ld-new: removing unused section '.text' in file 'eliminate.o'
> ./ld-new: removing unused section '.unused1' in file 'eliminate.o'
> ./ld-new: removing unused section '.unused2[unused_group]' in file 'eliminate.o'
> ./ld-new: removing unused section '.unused3[unused_group2]' in file
> 'eliminate.o'
> ./ld-new: removing unused section '.gnu.note1' in file 'eliminate.o'
> ./ld-new: removing unused section '.gnu.note2[unused_group]' in file
> 'eliminate.o'
> ./ld-new: removing unused section '.gnu.note3[unused_group2]' in file
> 'eliminate.o'
> [hjl@gnu-cfl-2 ld]$
>
>
> --
> H.J.
Thanks HJ for the patch. The --gc-sections semantics I expect are
written down here:
https://sourceware.org/pipermail/binutils/2020-February/109851.html
(If SHF_GNU_RETAIN
(https://sourceware.org/pipermail/binutils/2020-September/113534.html)
is accepted, a SHF_GNU_RETAIN section will be added to the GC root
list.
I forwarded the progress to a few toolchain folks on LLVM side and
encouraged them to reply if they still have concerns.)
More information about the Binutils
mailing list