public inbox for linux-efi@vger.kernel.org
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ardb@kernel.org>
To: linux-efi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, "Ard Biesheuvel" <ardb@kernel.org>,
	"Evgeniy Baskov" <baskov@ispras.ru>,
	"Borislav Petkov" <bp@alien8.de>,
	"Dave Hansen" <dave.hansen@linux.intel.com>,
	"Ingo Molnar" <mingo@redhat.com>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Peter Jones" <pjones@redhat.com>,
	"Matthew Garrett" <mjg59@srcf.ucam.org>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Kees Cook" <keescook@chromium.org>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"Marvin Häuser" <mhaeuser@posteo.de>
Subject: [PATCH 09/17] x86/boot: Set EFI handover offset directly in header asm
Date: Fri, 18 Aug 2023 15:44:14 +0200	[thread overview]
Message-ID: <20230818134422.380032-10-ardb@kernel.org> (raw)
In-Reply-To: <20230818134422.380032-1-ardb@kernel.org>

The offsets of the EFI handover entrypoints are available to the
assembler when constructing the header, so there is no need to set them
from the build tool afterwards.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
 arch/x86/boot/header.S      | 18 ++++++++++++++-
 arch/x86/boot/tools/build.c | 24 --------------------
 2 files changed, 17 insertions(+), 25 deletions(-)

diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
index 5575d0f06bab1918..72744ba440f6ea09 100644
--- a/arch/x86/boot/header.S
+++ b/arch/x86/boot/header.S
@@ -524,8 +524,24 @@ pref_address:		.quad LOAD_PHYSICAL_ADDR	# preferred load addr
 # define INIT_SIZE VO_INIT_SIZE
 #endif
 
+	.macro		__handover_offset
+#ifndef CONFIG_EFI_HANDOVER_PROTOCOL
+	.long		0
+#elif !defined(CONFIG_X86_64)
+	.long		ZO_efi32_stub_entry
+#else
+	/* Yes, this is really how we defined it :( */
+	.long		ZO_efi64_stub_entry - 0x200
+#ifdef CONFIG_EFI_MIXED
+	.if		ZO_efi32_stub_entry != ZO_efi64_stub_entry - 0x200
+	.error		"32-bit and 64-bit EFI entry points do not match"
+	.endif
+#endif
+#endif
+	.endm
+
 init_size:		.long INIT_SIZE		# kernel initialization size
-handover_offset:	.long 0			# Filled in by build.c
+handover_offset:	__handover_offset
 kernel_info_offset:	.long ZO_kernel_info
 
 # End of setup header #####################################################
diff --git a/arch/x86/boot/tools/build.c b/arch/x86/boot/tools/build.c
index 14ef13fe7ab021e7..06949754316458ce 100644
--- a/arch/x86/boot/tools/build.c
+++ b/arch/x86/boot/tools/build.c
@@ -55,8 +55,6 @@ u8 buf[SETUP_SECT_MAX*512];
 #define PECOFF_COMPAT_RESERVE 0x0
 #endif
 
-static unsigned long efi32_stub_entry;
-static unsigned long efi64_stub_entry;
 static unsigned long efi_pe_entry;
 static unsigned long efi32_pe_entry;
 static unsigned long _end;
@@ -265,31 +263,12 @@ static void efi_stub_defaults(void)
 #endif
 }
 
-static void efi_stub_entry_update(void)
-{
-	unsigned long addr = efi32_stub_entry;
-
-#ifdef CONFIG_EFI_HANDOVER_PROTOCOL
-#ifdef CONFIG_X86_64
-	/* Yes, this is really how we defined it :( */
-	addr = efi64_stub_entry - 0x200;
-#endif
-
-#ifdef CONFIG_EFI_MIXED
-	if (efi32_stub_entry != addr)
-		die("32-bit and 64-bit EFI entry points do not match\n");
-#endif
-#endif
-	put_unaligned_le32(addr, &buf[0x264]);
-}
-
 #else
 
 static inline void update_pecoff_setup_and_reloc(unsigned int size) {}
 static inline void update_pecoff_text(unsigned int text_start,
 				      unsigned int file_sz) {}
 static inline void efi_stub_defaults(void) {}
-static inline void efi_stub_entry_update(void) {}
 
 static inline int reserve_pecoff_reloc_section(int c)
 {
@@ -332,8 +311,6 @@ static void parse_zoffset(char *fname)
 	p = (char *)buf;
 
 	while (p && *p) {
-		PARSE_ZOFS(p, efi32_stub_entry);
-		PARSE_ZOFS(p, efi64_stub_entry);
 		PARSE_ZOFS(p, efi_pe_entry);
 		PARSE_ZOFS(p, efi32_pe_entry);
 		PARSE_ZOFS(p, _end);
@@ -416,7 +393,6 @@ int main(int argc, char ** argv)
 
 	update_pecoff_text(setup_sectors * 512, i + (sys_size * 16));
 
-	efi_stub_entry_update();
 
 	crc = partial_crc32(buf, i, crc);
 	if (fwrite(buf, 1, i, dest) != i)
-- 
2.39.2


  parent reply	other threads:[~2023-08-18 13:46 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-18 13:44 [PATCH 00/17] x86/boot: Rework PE header generation Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 01/17] x86/efi: Drop EFI stub .bss from .data section Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 02/17] x86/efi: Disregard setup header of loaded image Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 03/17] x86/efi: Drop alignment flags from PE section headers Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 04/17] x86/boot: Remove the 'bugger off' message Ard Biesheuvel
2023-08-20  1:02   ` H. Peter Anvin
2023-08-18 13:44 ` [PATCH 05/17] x86/boot: Omit compression buffer from PE/COFF image memory footprint Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 06/17] x86/boot: Drop redundant code setting the root device Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 07/17] x86/boot: Grab kernel_info offset from zoffset header directly Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 08/17] x86/boot: Drop references to startup_64 Ard Biesheuvel
2023-08-18 13:44 ` Ard Biesheuvel [this message]
2023-08-18 13:44 ` [PATCH 10/17] x86/boot: Drop workaround for binutils 2.14 in linker script ASSERTs Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 11/17] x86/boot: Use fixed size of 16k for setup block Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 12/17] x86/boot: Derive file size from _edata symbol Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 13/17] x86/boot: Construct PE/COFF .text section from assembler Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 14/17] x86/boot: Drop PE/COFF .reloc section Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 15/17] x86/boot: Split off PE/COFF .data section Ard Biesheuvel
2023-08-18 14:35   ` Marvin Häuser
2023-09-07 13:44     ` Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 16/17] x86/boot: Increase section and file alignment to 4k/512 Ard Biesheuvel
2023-08-18 13:44 ` [PATCH 17/17] x86/boot: Drop CRC-32 checksum and the build tool that generates it Ard Biesheuvel
2023-08-20  1:03   ` H. Peter Anvin
2023-08-20 12:57     ` Ard Biesheuvel
2023-08-21  0:37       ` H. Peter Anvin
2023-08-21  7:04         ` Ard Biesheuvel

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=20230818134422.380032-10-ardb@kernel.org \
    --to=ardb@kernel.org \
    --cc=baskov@ispras.ru \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=keescook@chromium.org \
    --cc=kraxel@redhat.com \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhaeuser@posteo.de \
    --cc=mingo@redhat.com \
    --cc=mjg59@srcf.ucam.org \
    --cc=pjones@redhat.com \
    --cc=tglx@linutronix.de \
    /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