
On Mon, Mar 8, 2021 at 6:11 PM Marek Behun marek.behun@nic.cz wrote:
On Mon, 8 Mar 2021 17:16:03 +0800 Bin Meng bmeng.cn@gmail.com wrote:
Hi Marek,
On Sun, Mar 7, 2021 at 12:26 PM Marek BehĂșn marek.behun@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.
It is. Linking fails if it is not used, for example for nokia_rx51_defconfig.
Could you investigate why? Is this due to missing marking some variables/functions as __used?
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.
OK I will push into CI without this flag for non-LTO and if it passes all tests I shall remove this flag for non-LTO.
Regards, Bin