All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nathan Chancellor <natechancellor@gmail.com>
To: Sami Tolvanen <samitolvanen@google.com>
Cc: Will Deacon <will@kernel.org>,
	Nick Desaulniers <ndesaulniers@google.com>,
	Masahiro Yamada <masahiroy@kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	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-kernel <linux-arm-kernel@lists.infradead.org>,
	linux-kbuild <linux-kbuild@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	PCI <linux-pci@vger.kernel.org>
Subject: Re: [PATCH v8 00/16] Add support for Clang LTO
Date: Thu, 3 Dec 2020 11:21:59 -0700	[thread overview]
Message-ID: <20201203182159.GA2104680@ubuntu-m3-large-x86> (raw)
In-Reply-To: <CABCJKueby8pUoN7f5=6RoyLSt4PgWNx8idUej0sNwAi0F3Xqzw@mail.gmail.com>

On Thu, Dec 03, 2020 at 09:07:30AM -0800, Sami Tolvanen wrote:
> On Thu, Dec 3, 2020 at 3:26 AM Will Deacon <will@kernel.org> wrote:
> >
> > Hi Sami,
> >
> > On Tue, Dec 01, 2020 at 01:36:51PM -0800, Sami Tolvanen wrote:
> > > This patch series adds support for building the kernel 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.
> > >
> > > Note that arm64 support depends on Will's memory ordering patches
> > > [1]. I will post x86_64 patches separately after we have fixed the
> > > remaining objtool warnings [2][3].
> >
> > I took this series for a spin, with my for-next/lto branch merged in but
> > I see a failure during the LTO stage with clang 11.0.5 because it doesn't
> > understand the '.arch_extension rcpc' directive we throw out in READ_ONCE().
> 
> I just tested this with Clang 11.0.0, which I believe is the latest
> 11.x version, and the current Clang 12 development branch, and both
> work for me. Godbolt confirms that '.arch_extension rcpc' is supported
> by the integrated assembler starting with Clang 11 (the example fails
> with 10.0.1):
> 
> https://godbolt.org/z/1csGcT
> 
> What does running clang --version and ld.lld --version tell you?

11.0.5 is AOSP's clang, which is behind the upstream 11.0.0 release so
it is most likely the case that it is missing the patch that added rcpc.
I think that a version based on the development branch (12.0.0) is in
the works but I am not sure.

> > We actually check that this extension is available before using it in
> > the arm64 Kconfig:
> >
> >         config AS_HAS_LDAPR
> >                 def_bool $(as-instr,.arch_extension rcpc)
> >
> > so this shouldn't happen. I then realised, I wasn't passing LLVM_IAS=1
> > on my Make command line; with that, then the detection works correctly
> > and the LTO step succeeds.
> >
> > Why is it necessary to pass LLVM_IAS=1 if LTO is enabled? I think it
> > would be _much_ better if this was implicit (or if LTO depended on it).
> 
> Without LLVM_IAS=1, Clang uses two different assemblers when LTO is
> enabled: the external GNU assembler for stand-alone assembly, and
> LLVM's integrated assembler for inline assembly. as-instr tests the
> external assembler and makes an admittedly reasonable assumption that
> the test is also valid for inline assembly.
> 
> I agree that it would reduce confusion in future if we just always
> enabled IAS with LTO. Nick, Nathan, any thoughts about this?

I am personally fine with that. As far as I am aware, we are in a fairly
good spot on arm64 and x86_64 when it comes to the integrated assembler.
Should we make it so that the user has to pass LLVM_IAS=1 explicitly or
we just make adding the no integrated assembler flag to CLANG_FLAGS
depend on not LTO (although that will require extra handling because
Kconfig is not available at that stage I think)?

Cheers,
Nathan

WARNING: multiple messages have this Message-ID (diff)
From: Nathan Chancellor <natechancellor@gmail.com>
To: Sami Tolvanen <samitolvanen@google.com>
Cc: linux-arch <linux-arch@vger.kernel.org>,
	Kees Cook <keescook@chromium.org>,
	"Paul E. McKenney" <paulmck@kernel.org>,
	Kernel Hardening <kernel-hardening@lists.openwall.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Masahiro Yamada <masahiroy@kernel.org>,
	linux-kbuild <linux-kbuild@vger.kernel.org>,
	Nick Desaulniers <ndesaulniers@google.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	clang-built-linux <clang-built-linux@googlegroups.com>,
	PCI <linux-pci@vger.kernel.org>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Will Deacon <will@kernel.org>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v8 00/16] Add support for Clang LTO
Date: Thu, 3 Dec 2020 11:21:59 -0700	[thread overview]
Message-ID: <20201203182159.GA2104680@ubuntu-m3-large-x86> (raw)
In-Reply-To: <CABCJKueby8pUoN7f5=6RoyLSt4PgWNx8idUej0sNwAi0F3Xqzw@mail.gmail.com>

On Thu, Dec 03, 2020 at 09:07:30AM -0800, Sami Tolvanen wrote:
> On Thu, Dec 3, 2020 at 3:26 AM Will Deacon <will@kernel.org> wrote:
> >
> > Hi Sami,
> >
> > On Tue, Dec 01, 2020 at 01:36:51PM -0800, Sami Tolvanen wrote:
> > > This patch series adds support for building the kernel 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.
> > >
> > > Note that arm64 support depends on Will's memory ordering patches
> > > [1]. I will post x86_64 patches separately after we have fixed the
> > > remaining objtool warnings [2][3].
> >
> > I took this series for a spin, with my for-next/lto branch merged in but
> > I see a failure during the LTO stage with clang 11.0.5 because it doesn't
> > understand the '.arch_extension rcpc' directive we throw out in READ_ONCE().
> 
> I just tested this with Clang 11.0.0, which I believe is the latest
> 11.x version, and the current Clang 12 development branch, and both
> work for me. Godbolt confirms that '.arch_extension rcpc' is supported
> by the integrated assembler starting with Clang 11 (the example fails
> with 10.0.1):
> 
> https://godbolt.org/z/1csGcT
> 
> What does running clang --version and ld.lld --version tell you?

11.0.5 is AOSP's clang, which is behind the upstream 11.0.0 release so
it is most likely the case that it is missing the patch that added rcpc.
I think that a version based on the development branch (12.0.0) is in
the works but I am not sure.

> > We actually check that this extension is available before using it in
> > the arm64 Kconfig:
> >
> >         config AS_HAS_LDAPR
> >                 def_bool $(as-instr,.arch_extension rcpc)
> >
> > so this shouldn't happen. I then realised, I wasn't passing LLVM_IAS=1
> > on my Make command line; with that, then the detection works correctly
> > and the LTO step succeeds.
> >
> > Why is it necessary to pass LLVM_IAS=1 if LTO is enabled? I think it
> > would be _much_ better if this was implicit (or if LTO depended on it).
> 
> Without LLVM_IAS=1, Clang uses two different assemblers when LTO is
> enabled: the external GNU assembler for stand-alone assembly, and
> LLVM's integrated assembler for inline assembly. as-instr tests the
> external assembler and makes an admittedly reasonable assumption that
> the test is also valid for inline assembly.
> 
> I agree that it would reduce confusion in future if we just always
> enabled IAS with LTO. Nick, Nathan, any thoughts about this?

I am personally fine with that. As far as I am aware, we are in a fairly
good spot on arm64 and x86_64 when it comes to the integrated assembler.
Should we make it so that the user has to pass LLVM_IAS=1 explicitly or
we just make adding the no integrated assembler flag to CLANG_FLAGS
depend on not LTO (although that will require extra handling because
Kconfig is not available at that stage I think)?

Cheers,
Nathan

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-12-03 18:22 UTC|newest]

Thread overview: 141+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-01 21:36 [PATCH v8 00/16] Add support for Clang LTO Sami Tolvanen
2020-12-01 21:36 ` Sami Tolvanen
2020-12-01 21:36 ` Sami Tolvanen
2020-12-01 21:36 ` [PATCH v8 01/16] tracing: move function tracer options to Kconfig Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:47   ` Steven Rostedt
2020-12-01 21:47     ` Steven Rostedt
2020-12-01 21:36 ` [PATCH v8 02/16] kbuild: add support for Clang LTO Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-02  2:59   ` Masahiro Yamada
2020-12-02  2:59     ` Masahiro Yamada
2020-12-03  0:07   ` Nick Desaulniers
2020-12-03  0:07     ` Nick Desaulniers
2020-12-03  0:07     ` Nick Desaulniers
2020-12-01 21:36 ` [PATCH v8 03/16] kbuild: lto: fix module versioning Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:36 ` [PATCH v8 04/16] kbuild: lto: limit inlining Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:36 ` [PATCH v8 05/16] kbuild: lto: merge module sections Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:36 ` [PATCH v8 06/16] kbuild: lto: remove duplicate dependencies from .mod files Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:36 ` [PATCH v8 07/16] init: lto: ensure initcall ordering Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:36 ` [PATCH v8 08/16] init: lto: fix PREL32 relocations Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:36   ` Sami Tolvanen
2020-12-01 21:37 ` [PATCH v8 09/16] PCI: Fix PREL32 relocations for LTO Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37 ` [PATCH v8 10/16] modpost: lto: strip .lto from module names Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37 ` [PATCH v8 11/16] scripts/mod: disable LTO for empty.c Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37 ` [PATCH v8 12/16] efi/libstub: disable LTO Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37 ` [PATCH v8 13/16] drivers/misc/lkdtm: disable LTO for rodata.o Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37 ` [PATCH v8 14/16] arm64: vdso: disable LTO Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37 ` [PATCH v8 15/16] arm64: disable recordmcount with DYNAMIC_FTRACE_WITH_REGS Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37 ` [PATCH v8 16/16] arm64: allow LTO to be selected Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-01 21:37   ` Sami Tolvanen
2020-12-03  0:01 ` [PATCH v8 00/16] Add support for Clang LTO Nick Desaulniers
2020-12-03  0:01   ` Nick Desaulniers
2020-12-03  0:01   ` Nick Desaulniers
2020-12-03 11:26 ` Will Deacon
2020-12-03 11:26   ` Will Deacon
2020-12-03 17:07   ` Sami Tolvanen
2020-12-03 17:07     ` Sami Tolvanen
2020-12-03 17:07     ` Sami Tolvanen
2020-12-03 18:21     ` Nathan Chancellor [this message]
2020-12-03 18:21       ` Nathan Chancellor
2020-12-03 18:22     ` Will Deacon
2020-12-03 18:22       ` Will Deacon
2020-12-03 22:32       ` Nick Desaulniers
2020-12-03 22:32         ` Nick Desaulniers
2020-12-03 22:32         ` Nick Desaulniers
2020-12-04  9:35         ` Will Deacon
2020-12-04  9:35           ` Will Deacon
2020-12-04 22:52         ` Sami Tolvanen
2020-12-04 22:52           ` Sami Tolvanen
2020-12-04 22:52           ` Sami Tolvanen
2020-12-06  6:50           ` Nathan Chancellor
2020-12-06  6:50             ` Nathan Chancellor
2020-12-06 20:09             ` Sami Tolvanen
2020-12-06 20:09               ` Sami Tolvanen
2020-12-06 20:09               ` Sami Tolvanen
2020-12-08  0:46               ` Nathan Chancellor
2020-12-08  0:46                 ` Nathan Chancellor
2020-12-08 12:15 ` Arnd Bergmann
2020-12-08 12:15   ` Arnd Bergmann
2020-12-08 12:15   ` Arnd Bergmann
2020-12-08 13:54   ` Arnd Bergmann
2020-12-08 13:54     ` Arnd Bergmann
2020-12-08 13:54     ` Arnd Bergmann
2020-12-08 16:53     ` Sami Tolvanen
2020-12-08 16:53       ` Sami Tolvanen
2020-12-08 16:53       ` Sami Tolvanen
2020-12-08 16:56       ` Arnd Bergmann
2020-12-08 16:56         ` Arnd Bergmann
2020-12-08 16:56         ` Arnd Bergmann
2020-12-08 16:43   ` Sami Tolvanen
2020-12-08 16:43     ` Sami Tolvanen
2020-12-08 16:43     ` Sami Tolvanen
2020-12-08 20:59     ` Arnd Bergmann
2020-12-08 20:59       ` Arnd Bergmann
2020-12-08 21:02       ` Arnd Bergmann
2020-12-08 21:02         ` Arnd Bergmann
2020-12-09  5:23         ` Fāng-ruì Sòng
2020-12-09  5:23           ` Fāng-ruì Sòng
2020-12-09  5:23           ` Fāng-ruì Sòng
2020-12-09  9:07           ` Arnd Bergmann
2020-12-09  9:07             ` Arnd Bergmann
2020-12-09  9:07             ` Arnd Bergmann
2020-12-09  9:59         ` Arnd Bergmann
2020-12-09  9:59           ` Arnd Bergmann
2020-12-09 16:09         ` Sami Tolvanen
2020-12-09 16:09           ` Sami Tolvanen
2020-12-09 16:09           ` Sami Tolvanen
2020-12-09 19:24           ` Arnd Bergmann
2020-12-09 19:24             ` Arnd Bergmann
2020-12-09 19:24             ` Arnd Bergmann
2020-12-08 21:09       ` Nick Desaulniers
2020-12-08 21:09         ` Nick Desaulniers
2020-12-08 21:09         ` Nick Desaulniers
2020-12-08 22:20         ` Arnd Bergmann
2020-12-08 22:20           ` Arnd Bergmann
2020-12-08 22:20           ` Arnd Bergmann
2020-12-09 16:11           ` Sami Tolvanen
2020-12-09 16:11             ` Sami Tolvanen
2020-12-09 16:11             ` Sami Tolvanen
2020-12-09  4:55     ` Fangrui Song
2020-12-09  4:55       ` Fangrui Song
2020-12-09  9:19       ` Arnd Bergmann
2020-12-09  9:19         ` Arnd Bergmann
2020-12-09  9:19         ` Arnd Bergmann
2020-12-09 12:35   ` Arnd Bergmann
2020-12-09 12:35     ` Arnd Bergmann
2020-12-09 12:35     ` Arnd Bergmann
2020-12-09 16:25     ` Sami Tolvanen
2020-12-09 16:25       ` Sami Tolvanen
2020-12-09 16:25       ` Sami Tolvanen
2020-12-09 17:51       ` Arnd Bergmann
2020-12-09 17:51         ` Arnd Bergmann
2020-12-09 17:51         ` Arnd Bergmann

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=20201203182159.GA2104680@ubuntu-m3-large-x86 \
    --to=natechancellor@gmail.com \
    --cc=clang-built-linux@googlegroups.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jpoimboe@redhat.com \
    --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=ndesaulniers@google.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=samitolvanen@google.com \
    --cc=will@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.