From: Kees Cook <keesc...@chromium.org> Date: Tue, 16 Feb 2021 12:34:37 -0800
> 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 Seems like you forgot the fix from [0], didn't you? > .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 > [0] https://lore.kernel.org/lkml/20210121184544.659998-1-aloba...@pm.me Al