* Re: [PATCH] x86/purgatory: Remove LTO flags [not found] <20230908225353.984169-1-song@kernel.org> @ 2023-09-08 22:59 ` Nick Desaulniers 2023-09-08 23:10 ` Song Liu 0 siblings, 1 reply; 2+ messages in thread From: Nick Desaulniers @ 2023-09-08 22:59 UTC (permalink / raw) To: Song Liu Cc: linux-kernel, songliubraving, Ricardo Ribalda, kexec, x86, samitolvanen, llvm On Fri, Sep 08, 2023 at 03:53:53PM -0700, Song Liu wrote: > With LTO enabled, ld.lld generates multiple .text sections for > purgatory.ro: > > $ readelf -S purgatory.ro | grep " .text" > [ 1] .text PROGBITS 0000000000000000 00000040 > [ 7] .text.purgatory PROGBITS 0000000000000000 000020e0 > [ 9] .text.warn PROGBITS 0000000000000000 000021c0 > [13] .text.sha256_upda PROGBITS 0000000000000000 000022f0 > [15] .text.sha224_upda PROGBITS 0000000000000000 00002be0 > [17] .text.sha256_fina PROGBITS 0000000000000000 00002bf0 > [19] .text.sha224_fina PROGBITS 0000000000000000 00002cc0 > > This cause WARNING from kexec_purgatory_setup_sechdrs(): > > WARNING: CPU: 26 PID: 110894 at kernel/kexec_file.c:919 > kexec_load_purgatory+0x37f/0x390 > > Fix this by disabling LTO for purgatory. > > Fixes: 8652d44f466a ("kexec: support purgatories with .text.hot sections") > Cc: Ricardo Ribalda <ribalda@chromium.org> > Cc: kexec@lists.infradead.org > Cc: linux-kernel@vger.kernel.org > Cc: x86@kernel.org > Signed-off-by: Song Liu <song@kernel.org> > > --- > AFAICT, x86 is the only arch that supports LTO and purgatory. > --- > arch/x86/purgatory/Makefile | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile > index c2a29be35c01..9c0bff4992ea 100644 > --- a/arch/x86/purgatory/Makefile > +++ b/arch/x86/purgatory/Makefile > @@ -19,6 +19,10 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS -D__NO_FORTIFY > # optimization flags. > KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS)) > > +# When LTO is enabled, llvm emits many text sections, which is not supported > +# by kexec. Remove -flto=* flags. > +KBUILD_CFLAGS := $(filter-out -flto=%,$(KBUILD_CFLAGS)) Thanks for the patch! Please prefer something akin to: commit 6e20f18579c5 ("efi/libstub: disable LTO") Please also CC Sami and llvm@lists.linux.dev for v2. Pretty sure we use a linker script to rejoin .text.* elsewhere in the kernel, but it doesn't look like x86 purgatory has one. > + > # When linking purgatory.ro with -r unresolved symbols are not checked, > # also link a purgatory.chk binary without -r to check for unresolved symbols. > PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] x86/purgatory: Remove LTO flags 2023-09-08 22:59 ` [PATCH] x86/purgatory: Remove LTO flags Nick Desaulniers @ 2023-09-08 23:10 ` Song Liu 0 siblings, 0 replies; 2+ messages in thread From: Song Liu @ 2023-09-08 23:10 UTC (permalink / raw) To: Nick Desaulniers Cc: linux-kernel, songliubraving, Ricardo Ribalda, kexec, x86, samitolvanen, llvm On Fri, Sep 8, 2023 at 3:59 PM Nick Desaulniers <ndesaulniers@google.com> wrote: > > On Fri, Sep 08, 2023 at 03:53:53PM -0700, Song Liu wrote: > > With LTO enabled, ld.lld generates multiple .text sections for > > purgatory.ro: > > > > $ readelf -S purgatory.ro | grep " .text" > > [ 1] .text PROGBITS 0000000000000000 00000040 > > [ 7] .text.purgatory PROGBITS 0000000000000000 000020e0 > > [ 9] .text.warn PROGBITS 0000000000000000 000021c0 > > [13] .text.sha256_upda PROGBITS 0000000000000000 000022f0 > > [15] .text.sha224_upda PROGBITS 0000000000000000 00002be0 > > [17] .text.sha256_fina PROGBITS 0000000000000000 00002bf0 > > [19] .text.sha224_fina PROGBITS 0000000000000000 00002cc0 > > > > This cause WARNING from kexec_purgatory_setup_sechdrs(): > > > > WARNING: CPU: 26 PID: 110894 at kernel/kexec_file.c:919 > > kexec_load_purgatory+0x37f/0x390 > > > > Fix this by disabling LTO for purgatory. > > > > Fixes: 8652d44f466a ("kexec: support purgatories with .text.hot sections") > > Cc: Ricardo Ribalda <ribalda@chromium.org> > > Cc: kexec@lists.infradead.org > > Cc: linux-kernel@vger.kernel.org > > Cc: x86@kernel.org > > Signed-off-by: Song Liu <song@kernel.org> > > > > --- > > AFAICT, x86 is the only arch that supports LTO and purgatory. > > --- > > arch/x86/purgatory/Makefile | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile > > index c2a29be35c01..9c0bff4992ea 100644 > > --- a/arch/x86/purgatory/Makefile > > +++ b/arch/x86/purgatory/Makefile > > @@ -19,6 +19,10 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS -D__NO_FORTIFY > > # optimization flags. > > KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS)) > > > > +# When LTO is enabled, llvm emits many text sections, which is not supported > > +# by kexec. Remove -flto=* flags. > > +KBUILD_CFLAGS := $(filter-out -flto=%,$(KBUILD_CFLAGS)) > > Thanks for the patch! > > Please prefer something akin to: > commit 6e20f18579c5 ("efi/libstub: disable LTO") Thanks for the pointer! This does look better. Thanks, Song > > Please also CC Sami and llvm@lists.linux.dev for v2. > > Pretty sure we use a linker script to rejoin .text.* elsewhere in the > kernel, but it doesn't look like x86 purgatory has one. > > > + > > # When linking purgatory.ro with -r unresolved symbols are not checked, > > # also link a purgatory.chk binary without -r to check for unresolved symbols. > > PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib > > -- > > 2.34.1 > > ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-09-08 23:10 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20230908225353.984169-1-song@kernel.org>
2023-09-08 22:59 ` [PATCH] x86/purgatory: Remove LTO flags Nick Desaulniers
2023-09-08 23:10 ` Song Liu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox