linux-kbuild.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Nick Desaulniers <ndesaulniers@google.com>
To: Sami Tolvanen <samitolvanen@google.com>
Cc: Masahiro Yamada <masahiroy@kernel.org>,
	Will Deacon <will@kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Paul E. McKenney" <paulmck@kernel.org>,
	Kees Cook <keescook@chromium.org>,
	clang-built-linux <clang-built-linux@googlegroups.com>,
	Kernel Hardening <kernel-hardening@lists.openwall.com>,
	linux-arch <linux-arch@vger.kernel.org>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Linux Kbuild mailing list <linux-kbuild@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	linux-pci@vger.kernel.org,
	"maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)"
	<x86@kernel.org>
Subject: Re: [PATCH v4 00/29] Add support for Clang LTO
Date: Wed, 30 Sep 2020 14:58:00 -0700	[thread overview]
Message-ID: <CAKwvOdnYBkUx9YpY9XLONbNYFD7JrOfGbRFQ8ZTf-sa2GTgQdQ@mail.gmail.com> (raw)
In-Reply-To: <20200929214631.3516445-1-samitolvanen@google.com>

On Tue, Sep 29, 2020 at 2:46 PM Sami Tolvanen <samitolvanen@google.com> wrote:
>
> This patch series adds support for building x86_64 and arm64 kernels
> with Clang's Link Time Optimization (LTO).
>
> In addition to performance, the primary motivation for LTO is
> to allow Clang's Control-Flow Integrity (CFI) to be used in the
> kernel. Google has shipped millions of Pixel devices running three
> major kernel versions with LTO+CFI since 2018.
>
> Most of the patches are build system changes for handling LLVM
> bitcode, which Clang produces with LTO instead of ELF object files,
> postponing ELF processing until a later stage, and ensuring initcall
> ordering.

Sami, thanks for continuing to drive the series. I encourage you to
keep resending with fixes accumulated or dropped on a weekly cadence.

The series worked well for me on arm64, but for x86_64 on mainline I
saw a stream of new objtool warnings:

testing your LTO series; x86_64 defconfig + CONFIG_THINLTO:
``` LTO vmlinux.o OBJTOOL vmlinux.o vmlinux.o: warning: objtool:
wakeup_long64()+0x61: indirect jump found in RETPOLINE build
vmlinux.o: warning: objtool: .text+0x308a: indirect jump found in
RETPOLINE build vmlinux.o: warning: objtool: .text+0x30c5: indirect
jump found in RETPOLINE build vmlinux.o: warning: objtool:
copy_user_enhanced_fast_string() falls through to next function
copy_user_generic_unrolled() vmlinux.o: warning: objtool:
__memcpy_mcsafe() falls through to next function mcsafe_handle_tail()
vmlinux.o: warning: objtool: memset() falls through to next function
memset_erms() vmlinux.o: warning: objtool: __memcpy() falls through to
next function memcpy_erms() vmlinux.o: warning: objtool:
__x86_indirect_thunk_rax() falls through to next function
__x86_retpoline_rax() vmlinux.o: warning: objtool:
__x86_indirect_thunk_rbx() falls through to next function
__x86_retpoline_rbx() vmlinux.o: warning: objtool:
__x86_indirect_thunk_rcx() falls through to next function
__x86_retpoline_rcx() vmlinux.o: warning: objtool:
__x86_indirect_thunk_rdx() falls through to next function
__x86_retpoline_rdx() vmlinux.o: warning: objtool:
__x86_indirect_thunk_rsi() falls through to next function
__x86_retpoline_rsi() vmlinux.o: warning: objtool:
__x86_indirect_thunk_rdi() falls through to next function
__x86_retpoline_rdi() vmlinux.o: warning: objtool:
__x86_indirect_thunk_rbp() falls through to next function
__x86_retpoline_rbp() vmlinux.o: warning: objtool:
__x86_indirect_thunk_r8() falls through to next function
__x86_retpoline_r8() vmlinux.o: warning: objtool:
__x86_indirect_thunk_r9() falls through to next function
__x86_retpoline_r9() vmlinux.o: warning: objtool:
__x86_indirect_thunk_r10() falls through to next function
__x86_retpoline_r10() vmlinux.o: warning: objtool:
__x86_indirect_thunk_r11() falls through to next function
__x86_retpoline_r11() vmlinux.o: warning: objtool:
__x86_indirect_thunk_r12() falls through to next function
__x86_retpoline_r12() vmlinux.o: warning: objtool:
__x86_indirect_thunk_r13() falls through to next function
__x86_retpoline_r13() vmlinux.o: warning: objtool:
__x86_indirect_thunk_r14() falls through to next function
__x86_retpoline_r14() vmlinux.o: warning: objtool:
__x86_indirect_thunk_r15() falls through to next function
__x86_retpoline_r15() ```

I think those should be resolved before I provide any kind of tested
by tag.  My other piece of feedback was that I like the default
ThinLTO, but I think the help text in the Kconfig which is visible
during menuconfig could be improved by informing the user the
tradeoffs.  For example, if CONFIG_THINLTO is disabled, it should be
noted that full LTO will be used instead.  Also, that full LTO may
produce slightly better optimized binaries than ThinLTO, at the cost
of not utilizing multiple cores when linking and thus significantly
slower to link.

Maybe explaining that setting it to "n" implies a full LTO build,
which will be much slower to link but possibly slightly faster would
be good?  It's not visible unless LTO_CLANG and ARCH_SUPPORTS_THINLTO
is enabled, so I don't think you need to explain that THINLTO without
those is *not* full LTO.  I'll leave the precise wording to you. WDYT?

Also, when I look at your treewide DISABLE_LTO patch, I think "does
that need to be a part of this series, or is it a cleanup that can
stand on its own?"  I think it may be the latter?  Maybe it would help
shed one more patch than to have to carry it to just send it?  Or did
I miss something as to why it should remain a part of this series?
-- 
Thanks,
~Nick Desaulniers

  parent reply	other threads:[~2020-09-30 21:58 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-29 21:46 [PATCH v4 00/29] Add support for Clang LTO Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 01/29] RAS/CEC: Fix cec_init() prototype Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 02/29] x86/asm: Replace __force_order with memory clobber Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 03/29] kbuild: preprocess module linker script Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 04/29] objtool: Add a pass for generating __mcount_loc Sami Tolvanen
2020-10-01 13:17   ` Miroslav Benes
2020-10-01 13:36     ` Peter Zijlstra
2020-10-02 14:13       ` Josh Poimboeuf
2020-10-05  7:10         ` Miroslav Benes
2020-09-29 21:46 ` [PATCH v4 05/29] objtool: Don't autodetect vmlinux.o Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 06/29] tracing: move function tracer options to Kconfig Sami Tolvanen
2020-09-30  0:12   ` Steven Rostedt
2020-09-30 16:05     ` Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 07/29] tracing: add support for objtool mcount Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 08/29] x86, build: use " Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 09/29] arm64: disable recordmcount with DYNAMIC_FTRACE_WITH_REGS Sami Tolvanen
2020-09-30  9:58   ` Mark Rutland
2020-09-30 17:10     ` Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 10/29] treewide: remove DISABLE_LTO Sami Tolvanen
2020-09-30 20:45   ` Kees Cook
2020-09-29 21:46 ` [PATCH v4 11/29] kbuild: add support for Clang LTO Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 12/29] kbuild: lto: fix module versioning Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 13/29] kbuild: lto: postpone objtool Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 14/29] kbuild: lto: limit inlining Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 15/29] kbuild: lto: merge module sections Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 16/29] kbuild: lto: remove duplicate dependencies from .mod files Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 17/29] init: lto: ensure initcall ordering Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 18/29] init: lto: fix PREL32 relocations Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 19/29] PCI: Fix PREL32 relocations for LTO Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 20/29] modpost: lto: strip .lto from module names Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 21/29] scripts/mod: disable LTO for empty.c Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 22/29] efi/libstub: disable LTO Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 23/29] drivers/misc/lkdtm: disable LTO for rodata.o Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 24/29] arm64: vdso: disable LTO Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 25/29] KVM: arm64: disable LTO for the nVHE directory Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 26/29] arm64: allow LTO_CLANG and THINLTO to be selected Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 27/29] x86, vdso: disable LTO only for vDSO Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 28/29] x86, cpu: disable LTO for cpu.c Sami Tolvanen
2020-09-29 21:46 ` [PATCH v4 29/29] x86, build: allow LTO_CLANG and THINLTO to be selected Sami Tolvanen
2020-09-30 21:10 ` [PATCH v4 00/29] Add support for Clang LTO Kees Cook
2020-09-30 21:58 ` Nick Desaulniers [this message]
2020-09-30 22:12   ` Sami Tolvanen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAKwvOdnYBkUx9YpY9XLONbNYFD7JrOfGbRFQ8ZTf-sa2GTgQdQ@mail.gmail.com \
    --to=ndesaulniers@google.com \
    --cc=clang-built-linux@googlegroups.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=keescook@chromium.org \
    --cc=kernel-hardening@lists.openwall.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=samitolvanen@google.com \
    --cc=will@kernel.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).