From: Steven Rostedt <rostedt@goodmis.org>
To: Ricardo Ribalda <ribalda@chromium.org>
Cc: Eric Biederman <ebiederm@xmission.com>,
Baoquan He <bhe@redhat.com>, Philipp Rudo <prudo@redhat.com>,
kexec@lists.infradead.org, linux-kernel@vger.kernel.org,
Ross Zwisler <zwisler@google.com>,
Simon Horman <horms@kernel.org>,
"x86@kernel.org" <x86@kernel.org>, Borislav Petkov <bp@alien8.de>
Subject: Re: [PATCH v5 2/2] x86/purgatory: Add linker script
Date: Thu, 30 Mar 2023 11:15:23 -0400 [thread overview]
Message-ID: <20230330111523.4b98c8ce@gandalf.local.home> (raw)
In-Reply-To: <20230321-kexec_clang16-v5-2-5563bf7c4173@chromium.org>
Hmm, this patch may need some more eyes. At least from the x86 maintainers.
-- Steve
On Thu, 30 Mar 2023 11:44:48 +0200
Ricardo Ribalda <ribalda@chromium.org> wrote:
> Make sure that the .text section is not divided in multiple overlapping
> sections. This is not supported by kexec_file.
>
> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> ---
> arch/x86/purgatory/.gitignore | 2 ++
> arch/x86/purgatory/Makefile | 20 +++++++++----
> arch/x86/purgatory/kexec-purgatory.S | 2 +-
> arch/x86/purgatory/purgatory.lds.S | 57 ++++++++++++++++++++++++++++++++++++
> 4 files changed, 74 insertions(+), 7 deletions(-)
>
> diff --git a/arch/x86/purgatory/.gitignore b/arch/x86/purgatory/.gitignore
> index d2be1500671d..1fe71fe5945d 100644
> --- a/arch/x86/purgatory/.gitignore
> +++ b/arch/x86/purgatory/.gitignore
> @@ -1 +1,3 @@
> purgatory.chk
> +purgatory.lds
> +purgatory
> diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile
> index 17f09dc26381..4dc96d409bec 100644
> --- a/arch/x86/purgatory/Makefile
> +++ b/arch/x86/purgatory/Makefile
> @@ -16,10 +16,11 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS
>
> # 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
> -LDFLAGS_purgatory.ro := -r $(PURGATORY_LDFLAGS)
> -LDFLAGS_purgatory.chk := $(PURGATORY_LDFLAGS)
> -targets += purgatory.ro purgatory.chk
> +PURGATORY_LDFLAGS := -nostdlib -z nodefaultlib
> +LDFLAGS_purgatory := -r $(PURGATORY_LDFLAGS) -T
> +LDFLAGS_purgatory.chk := -e purgatory_start $(PURGATORY_LDFLAGS)
> +
> +targets += purgatory.lds purgatory.ro purgatory.chk
>
> # Sanitizer, etc. runtimes are unavailable and cannot be linked here.
> GCOV_PROFILE := n
> @@ -72,10 +73,17 @@ CFLAGS_string.o += $(PURGATORY_CFLAGS)
> AFLAGS_REMOVE_setup-x86_$(BITS).o += -Wa,-gdwarf-2
> AFLAGS_REMOVE_entry64.o += -Wa,-gdwarf-2
>
> -$(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE
> +OBJCOPYFLAGS_purgatory.ro := -O elf64-x86-64
> +OBJCOPYFLAGS_purgatory.ro += --remove-section='*debug*'
> +OBJCOPYFLAGS_purgatory.ro += --remove-section='.comment'
> +OBJCOPYFLAGS_purgatory.ro += --remove-section='.note.*'
> +$(obj)/purgatory.ro: $(obj)/purgatory FORCE
> + $(call if_changed,objcopy)
> +
> +$(obj)/purgatory.chk: $(obj)/purgatory FORCE
> $(call if_changed,ld)
>
> -$(obj)/purgatory.chk: $(obj)/purgatory.ro FORCE
> +$(obj)/purgatory: $(obj)/purgatory.lds $(PURGATORY_OBJS) FORCE
> $(call if_changed,ld)
>
> $(obj)/kexec-purgatory.o: $(obj)/purgatory.ro $(obj)/purgatory.chk
> diff --git a/arch/x86/purgatory/kexec-purgatory.S b/arch/x86/purgatory/kexec-purgatory.S
> index 8530fe93b718..54b0d0b4dc42 100644
> --- a/arch/x86/purgatory/kexec-purgatory.S
> +++ b/arch/x86/purgatory/kexec-purgatory.S
> @@ -5,7 +5,7 @@
> .align 8
> kexec_purgatory:
> .globl kexec_purgatory
> - .incbin "arch/x86/purgatory/purgatory.ro"
> + .incbin "arch/x86/purgatory/purgatory"
> .Lkexec_purgatory_end:
>
> .align 8
> diff --git a/arch/x86/purgatory/purgatory.lds.S b/arch/x86/purgatory/purgatory.lds.S
> new file mode 100644
> index 000000000000..610da88aafa0
> --- /dev/null
> +++ b/arch/x86/purgatory/purgatory.lds.S
> @@ -0,0 +1,57 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#include <asm-generic/vmlinux.lds.h>
> +
> +OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT)
> +
> +#undef i386
> +
> +#include <asm/cache.h>
> +#include <asm/page_types.h>
> +
> +ENTRY(purgatory_start)
> +
> +SECTIONS
> +{
> + . = 0;
> + .head.text : {
> + _head = . ;
> + HEAD_TEXT
> + _ehead = . ;
> + }
> + .rodata : {
> + _rodata = . ;
> + *(.rodata) /* read-only data */
> + *(.rodata.*)
> + _erodata = . ;
> + }
> + .text : {
> + _text = .; /* Text */
> + *(.text)
> + *(.text.*)
> + *(.noinstr.text)
> + _etext = . ;
> + }
> + .data : {
> + _data = . ;
> + *(.data)
> + *(.data.*)
> + *(.bss.efistub)
> + _edata = . ;
> + }
> + . = ALIGN(L1_CACHE_BYTES);
> + .bss : {
> + _bss = . ;
> + *(.bss)
> + *(.bss.*)
> + *(COMMON)
> + . = ALIGN(8); /* For convenience during zeroing */
> + _ebss = .;
> + }
> +
> + /* Sections to be discarded */
> + /DISCARD/ : {
> + *(.eh_frame)
> + *(*__ksymtab*)
> + *(___kcrctab*)
> + }
> +}
>
next prev parent reply other threads:[~2023-03-30 15:17 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-30 9:44 [PATCH v5 0/2] kexec: Fix kexec_file_load for llvm16 Ricardo Ribalda
2023-03-30 9:44 ` [PATCH v5 1/2] kexec: Support purgatories with .text.hot sections Ricardo Ribalda
2023-03-30 15:03 ` Steven Rostedt
2023-04-03 14:42 ` Philipp Rudo
2023-03-30 9:44 ` [PATCH v5 2/2] x86/purgatory: Add linker script Ricardo Ribalda
2023-03-30 15:15 ` Steven Rostedt [this message]
2023-03-30 15:18 ` Borislav Petkov
2023-03-30 15:31 ` Steven Rostedt
2023-03-30 16:00 ` Borislav Petkov
2023-04-07 23:22 ` Nick Desaulniers
2023-04-11 21:45 ` Ricardo Ribalda
2023-04-18 17:49 ` Nick Desaulniers
2023-03-31 19:13 ` Ross Zwisler
2023-04-03 15:35 ` Ricardo Ribalda
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=20230330111523.4b98c8ce@gandalf.local.home \
--to=rostedt@goodmis.org \
--cc=bhe@redhat.com \
--cc=bp@alien8.de \
--cc=ebiederm@xmission.com \
--cc=horms@kernel.org \
--cc=kexec@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=prudo@redhat.com \
--cc=ribalda@chromium.org \
--cc=x86@kernel.org \
--cc=zwisler@google.com \
/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
all inboxes | Powered by JetHome®