[PATCH 2/5] ld: Add lto and none-lto input support for ld -r

H.J. Lu hjl.tools@gmail.com
Tue Oct 27 14:34:47 GMT 2020


On Tue, Oct 27, 2020 at 6:21 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Mon, Oct 26, 2020 at 5:24 PM Alan Modra <amodra@gmail.com> wrote:
> >
> > On Mon, Oct 26, 2020 at 07:13:26AM -0700, H.J. Lu wrote:
> > > On Mon, Oct 26, 2020 at 6:48 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> > > >
> > > > On Sun, Oct 25, 2020 at 5:43 PM Alan Modra <amodra@gmail.com> wrote:
> > > > >
> > > > > On Wed, Oct 21, 2020 at 04:35:08AM -0700, H.J. Lu via Binutils wrote:
> > > > > >       (cmdline_emit_object_only_section): Likewise.
> > > > >
> > > > > This is really "run the linker again to produce another output" isn't
> > > > > it?  So, why not actually run the linker again rather than duplicating
> > > > > (and complicating) a whole lot of code.  See for example spuelf.em
> > > > > spu_elf_relink.
> > > > >
> > > >
> > > > For a relocatable link, I scan all input files, objects and archives, to build
> > > > 2 lists, cmdline_object_only_file_list and cmdline_object_only_archive_list.
> > > > They are used to determine which object files at the command line and
> > > > archive members in archives at the command line should be extracted to
> > > > the object only output.  To relink, I need to pass these 2 lists to the linker
> > > > to rebuild these 2 lists.  I will do it if my patches will be approved after it.
> > >
> > > These 2 lists can be quite long and require special handling.  I prefer
> > > the current approach if possible.
> >
> > Long lists of objects can be passed by file, ie. by generating a
> > linker script with INPUT commands.
> >
> > I know I'm asking for you to reimplement quite a lot of your patch.
> > I'm not doing so to be difficult.  Duplicating much of lang_process is
> > just wrong from a maintenance perspective.  And it is difficult to get
> > right, as evidenced by quite a lot of fails after applying your patch.
>
> 2 lists contain items which can be either physical files or BFD pointers
> to handle mixed and non-IR objects in .o and .a files.  .a files can be
> nested or thin.  They can have archive members of the same name.
> Reconstructing physical files is easy, but not so much for BFD pointers.
>
> > alpha-linux  +FAIL: PR ld/15323 (2)
> > alpha-linux  +FAIL: PR ld/15323 (4)
> > arm-linuxeabi  +FAIL: PR ld/15323 (2)
> > arm-linuxeabi  +FAIL: PR ld/15323 (4)

Can't be reproduced.

> > h8300-elf  +FAIL: section flags (for GNU lto sections)
> > h8300-linux  +FAIL: section flags (for GNU lto sections)

Fixed.

> > hppa-linux  +FAIL: PR ld/15323 (2)
> > hppa-linux  +FAIL: PR ld/15323 (4)

Can't be reproduced.

> > i386-bsd  +FAIL: --gc-sections -r without -e
> > i386-bsd  +FAIL: -l: test (preparation)
> > i386-bsd  +FAIL: -l: test
> > i386-msdos  +FAIL: --gc-sections -r without -e
> > i386-msdos  +FAIL: -l: test (preparation)

Fixed.

> > mips64-linux  +FAIL: ld-plugin/lto-4r-a
> > mips64-linux  +FAIL: ld-plugin/lto-4r-b
> > mips64-linux  +FAIL: ld-plugin/lto-4r-c
> > mips64-linux  +FAIL: ld-plugin/lto-4r-d
> > mips64-linux  +FAIL: ld-plugin/lto-10r
> > mips64-linux  +FAIL: LTO 5 symbol
> > mips64-linux  +FAIL: LTO 3b
> > mips64-linux  +FAIL: LTO 5
> > mips-linux  +FAIL: ld-plugin/lto-4r-a
> > mips-linux  +FAIL: ld-plugin/lto-4r-b
> > mips-linux  +FAIL: ld-plugin/lto-4r-c
> > mips-linux  +FAIL: ld-plugin/lto-4r-d
> > mips-linux  +FAIL: ld-plugin/lto-10r
> > mips-linux  +FAIL: LTO 5 symbol
> > mips-linux  +FAIL: LTO 3b
> > mips-linux  +FAIL: LTO 5

Can't be reproduced.

> > ns32k-netbsd  +FAIL: --gc-sections -r without -e
> > ns32k-netbsd  +FAIL: -l: test (preparation)
> > ns32k-netbsd  +FAIL: -l: test
> > ns32k-pc532-mach  +FAIL: --gc-sections -r without -e
> > ns32k-pc532-mach  +FAIL: -l: test (preparation)
> > ns32k-pc532-mach  +FAIL: -l: test
> > pdp11-dec-aout  +FAIL: --gc-sections -r without -e
> > pdp11-dec-aout  +FAIL: -l: test (preparation)
> > pdp11-dec-aout  +FAIL: -l: test

Fixed.

> > powerpc64-linux  +FAIL: nm mixed object

Can't be reproduced.

> > powerpc-aix5.1  +FAIL: --gc-sections -r without -e
> > powerpc-aix5.1  +FAIL: -l: test (preparation)
> > powerpc-aix5.1  +FAIL: -l: test
> > powerpc-aix5.2  +FAIL: --gc-sections -r without -e
> > powerpc-aix5.2  +FAIL: -l: test (preparation)
> > powerpc-aix5.2  +FAIL: -l: test
> > powerpc-aix5.2  +FAIL: Duplicate symbol check 1 (rel) (32-bit)
> > powerpc-aix5.2  +FAIL: Duplicate symbol check 1 (rel) (64-bit)
> > powerpc-aix5.2  +FAIL: Export test 1 (object) (32-bit)
> > powerpc-aix5.2  +FAIL: Export test 1 (object) (64-bit)
> > powerpc-aix5.2  +FAIL: Export test 1 (-bexpall) (32-bit)
> > powerpc-aix5.2  +FAIL: Export test 1 (-bexpall) (64-bit)
> > powerpc-aix5.2  +FAIL: Export test 1 (-bexpfull) (32-bit)
> > powerpc-aix5.2  +FAIL: Export test 1 (-bexpfull) (64-bit)
> > powerpc-aix5.2  +FAIL: Glink test 2 (part b) (32-bit)
> > powerpc-aix5.2  +FAIL: Glink test 2 (part b) (64-bit)
> > powerpc-aix5.2  +FAIL: Glink test 2 (32-bit)
> > powerpc-aix5.2  +FAIL: Glink test 2 (64-bit)
> > powerpc-aix5.2  +FAIL: Relocatable test 1 (32-bit)
> > powerpc-aix5.2  +FAIL: Relocatable test 1 (64-bit)
> > powerpc-aix5.2  +FAIL: Weak test 1 (rel) (32-bit)
> > powerpc-aix5.2  +FAIL: Weak test 1 (rel) (64-bit)

Fixed.

> > powerpc-linux  +FAIL: PR ld/15323 (2)
> > powerpc-linux  +FAIL: PR ld/15323 (4)

Can't be reproduced.

> > rs6000-aix4.3.3  +FAIL: --gc-sections -r without -e
> > rs6000-aix4.3.3  +FAIL: -l: test (preparation)
> > rs6000-aix4.3.3  +FAIL: -l: test
> > rs6000-aix5.1  +FAIL: --gc-sections -r without -e
> > rs6000-aix5.1  +FAIL: -l: test (preparation)
> > rs6000-aix5.1  +FAIL: -l: test
> > rs6000-aix5.2  +FAIL: --gc-sections -r without -e
> > rs6000-aix5.2  +FAIL: -l: test (preparation)
> > rs6000-aix5.2  +FAIL: -l: test
> > rs6000-aix5.2  +FAIL: Duplicate symbol check 1 (rel) (32-bit)
> > rs6000-aix5.2  +FAIL: Duplicate symbol check 1 (rel) (64-bit)
> > rs6000-aix5.2  +FAIL: Export test 1 (object) (32-bit)
> > rs6000-aix5.2  +FAIL: Export test 1 (object) (64-bit)
> > rs6000-aix5.2  +FAIL: Export test 1 (-bexpall) (32-bit)
> > rs6000-aix5.2  +FAIL: Export test 1 (-bexpall) (64-bit)
> > rs6000-aix5.2  +FAIL: Export test 1 (-bexpfull) (32-bit)
> > rs6000-aix5.2  +FAIL: Export test 1 (-bexpfull) (64-bit)
> > rs6000-aix5.2  +FAIL: Glink test 2 (part b) (32-bit)
> > rs6000-aix5.2  +FAIL: Glink test 2 (part b) (64-bit)
> > rs6000-aix5.2  +FAIL: Glink test 2 (32-bit)
> > rs6000-aix5.2  +FAIL: Glink test 2 (64-bit)
> > rs6000-aix5.2  +FAIL: Relocatable test 1 (32-bit)
> > rs6000-aix5.2  +FAIL: Relocatable test 1 (64-bit)
> > rs6000-aix5.2  +FAIL: Weak test 1 (rel) (32-bit)
> > rs6000-aix5.2  +FAIL: Weak test 1 (rel) (64-bit)
> > sparc64-linux  +FAIL: PR ld/15323 (2)
> > sparc64-linux  +FAIL: PR ld/15323 (4)

Can't be reproduced.

> > x86_64-w64-mingw32  +FAIL: ld-plugin/lto-3r
> > x86_64-w64-mingw32  +FAIL: ld-plugin/lto-4r-a
> > x86_64-w64-mingw32  +FAIL: ld-plugin/lto-4r-b
> > x86_64-w64-mingw32  +FAIL: ld-plugin/lto-4r-c
> > x86_64-w64-mingw32  +FAIL: ld-plugin/lto-4r-d
> > x86_64-w64-mingw32  +FAIL: ld-plugin/lto-5r
> > x86_64-w64-mingw32  +FAIL: ld-plugin/lto-10r
> > x86_64-w64-mingw32  +FAIL: nm mixed object
> > x86_64-w64-mingw32  +FAIL: PR ld/19317 (2)
> > x86_64-w64-mingw32  +FAIL: LTO 4a
> > x86_64-w64-mingw32  +FAIL: LTO 4c
> > x86_64-w64-mingw32  +FAIL: LTO 4d
> > x86_64-w64-mingw32  +FAIL: LTO 10

Fixed.

The updated patches are on users/hjl/lto-mixed/master branch at

https://gitlab.com/x86-binutils/binutils-gdb/-/commits/users/hjl/lto-mixed/master

> >
>
> I will take a look at them.
>
>
> --
> H.J.



-- 
H.J.


More information about the Binutils mailing list