Hi Linus, Please pull this Clang Link Time Optimization series for v5.12-rc1. This has been in linux-next for the entire last development cycle, and is built on the work done preparing[0] for LTO by arm64 folks, tracing folks, etc. This series includes the core changes as well as the remaining pieces for arm64 (LTO has been the default build method on Android for about 3 years now, as it is the prerequisite for the Control Flow Integrity protections). While x86 LTO support is done[1], there is still some on-going clean-up work happening for objtool[2] that should hopefully land by the v5.13 merge window.
For merge log posterity, and as detailed in commit dc5723b02e52 ("kbuild: add support for Clang LTO"), here is the lt;dr to do an LTO build: make LLVM=1 LLVM_IAS=1 defconfig scripts/config -e LTO_CLANG_THIN make LLVM=1 LLVM_IAS=1 (To do a cross-compile of arm64, add "CROSS_COMPILE=aarch64-linux-gnu-" and "ARCH=arm64" to the "make" command lines.) Thanks! -Kees [0] https://git.kernel.org/linus/3c09ec59cdea5b132212d97154d625fd34e436dd [1] https://github.com/samitolvanen/linux/commits/clang-lto [2] https://lore.kernel.org/lkml/cover.1611263461.git.jpoim...@redhat.com/ The following changes since commit e71ba9452f0b5b2e8dc8aa5445198cd9214a6a62: Linux 5.11-rc2 (2021-01-03 15:55:30 -0800) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git tags/clang-lto-v5.12-rc1 for you to fetch changes up to 112b6a8e038d793d016e330f53acb9383ac504b3: arm64: allow LTO to be selected (2021-01-14 08:21:10 -0800) ---------------------------------------------------------------- clang-lto for v5.12-rc1 Provide build infrastructure for arm64 Clang LTO. ---------------------------------------------------------------- Sami Tolvanen (16): tracing: move function tracer options to Kconfig kbuild: add support for Clang LTO kbuild: lto: fix module versioning kbuild: lto: limit inlining kbuild: lto: merge module sections kbuild: lto: add a default list of used symbols init: lto: ensure initcall ordering init: lto: fix PREL32 relocations PCI: Fix PREL32 relocations for LTO modpost: lto: strip .lto from module names scripts/mod: disable LTO for empty.c efi/libstub: disable LTO drivers/misc/lkdtm: disable LTO for rodata.o arm64: vdso: disable LTO arm64: disable recordmcount with DYNAMIC_FTRACE_WITH_REGS arm64: allow LTO to be selected .gitignore | 1 + Makefile | 45 ++++-- arch/Kconfig | 90 ++++++++++++ arch/arm64/Kconfig | 4 + arch/arm64/kernel/vdso/Makefile | 3 +- drivers/firmware/efi/libstub/Makefile | 2 + drivers/misc/lkdtm/Makefile | 1 + include/asm-generic/vmlinux.lds.h | 11 +- include/linux/init.h | 79 ++++++++-- include/linux/pci.h | 27 +++- init/Kconfig | 1 + kernel/trace/Kconfig | 16 ++ scripts/Makefile.build | 48 +++++- scripts/Makefile.lib | 6 +- scripts/Makefile.modfinal | 9 +- scripts/Makefile.modpost | 25 +++- scripts/generate_initcall_order.pl | 270 ++++++++++++++++++++++++++++++++++ scripts/link-vmlinux.sh | 70 +++++++-- scripts/lto-used-symbollist.txt | 5 + scripts/mod/Makefile | 1 + scripts/mod/modpost.c | 16 +- scripts/mod/modpost.h | 9 ++ scripts/mod/sumversion.c | 6 +- scripts/module.lds.S | 24 +++ 24 files changed, 707 insertions(+), 62 deletions(-) create mode 100755 scripts/generate_initcall_order.pl create mode 100644 scripts/lto-used-symbollist.txt -- Kees Cook