Hi Marek, On Sun, Mar 7, 2021 at 12:26 PM Marek Behún <marek.be...@nic.cz> wrote: > > Currently we use incremental linking (ld -r) to link several object > files from one directory into one built-in.o object file containing the > linked code from that directory (and its subdirectories). > > Linux has, some time ago, moved to thin archives instead. > > Thin archives are archives (.a) that do not really contain the object > files, only references to them. > > Using thin archives instead of incremental linking > - saves disk space > - apparently works better with dead code elimination > - makes things easier for LTO > > The third point is the important one for us. With incremental linking > there are several options how to do LTO, and that would unnecessarily > complicate things. > > On the other hand, by using thin archives we can make (via the > --whole-archive use flag) the final linking behave as if we passed all > the object files from the archives to the linking program as arguments.
I don't think --whole-archive is required for LTO to work. Switching to --whole-archive should be made conditionally when LTO is on, otherwise for targets that don't have -ffunction-sections/data-sections/--gc-sections specified, it will create unnecessary bloat. > > We also need to use the P flag for ar, otherwise final linking may fail. > > Signed-off-by: Marek Behún <marek.be...@nic.cz> > --- > Makefile | 4 ++-- > arch/sandbox/config.mk | 10 +++++++--- > scripts/Makefile.build | 16 ++++++++-------- > scripts/Makefile.spl | 4 ++-- > 4 files changed, 19 insertions(+), 15 deletions(-) > Regards, Bin