[lld] Preliminary fat-lto-object support
authorPaul Kirth <paulkirth@google.com>
Fri, 24 Mar 2023 00:14:48 +0000 (00:14 +0000)
committerPaul Kirth <paulkirth@google.com>
Wed, 19 Jul 2023 23:07:42 +0000 (23:07 +0000)
commit3a45b843dec1bca195884aa1c5bc56bd0e6755b4
treefd32acbcabe287d093dab087a971edebdb2e98bb
parent5fdf8605102014825dc79e1859f218228dbcd15f
[lld] Preliminary fat-lto-object support

This patch adds support to lld for --fat-lto-objects. We add a new
--fat-lto-objects flag to LLD, and slightly change how it chooses input
files in the driver when the flag is set.

Fat LTO objects contain both LTO compatible IR, as well as generated object
code. This allows users to defer the choice of whether to use LTO or not to
link-time. This is a feature available in GCC for some time, and makes the
existing -ffat-lto-objects flag functional in the same way as GCC's.

If the --fat-lto-objects option is passed to LLD and the input files are fat
object files, then the linker will chose the LTO compatible bitcode sections
embedded within the fat object and link them together using LTO. Otherwise,
standard object file linking is done using the assembly section in the object
files.

Original RFC: https://discourse.llvm.org/t/rfc-ffat-lto-objects-support/63977

Depends on D146777

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D146778
lld/ELF/Config.h
lld/ELF/Driver.cpp
lld/ELF/Options.td
lld/docs/ReleaseNotes.rst
lld/docs/ld.lld.1
lld/test/ELF/fatlto/fatlto.invalid.s [new file with mode: 0644]
lld/test/ELF/fatlto/fatlto.test [new file with mode: 0644]