[PATCH 4/4] arm64: head: tidy up the Image header definition

Will Deacon will at kernel.org
Wed Oct 28 10:17:27 EDT 2020


On Tue, Oct 27, 2020 at 08:32:09AM +0100, Ard Biesheuvel wrote:
> Even though support for EFI boot remains entirely optional for arm64,
> it is unlikely that we will ever be able to repurpose the image header
> fields that the EFI loader relies on, i.e., the magic NOP at offset
> 0x0 and the PE header address at offset 0x3c.
> 
> So let's factor out the differences into a 'magic_nop' macro and a local
> symbol representing the PE header address, and move the conditional
> definitions into efi-header.S, taking into account whether CONFIG_EFI is
> enabled or not.

How many architectures can claim to have both a "magic nop" and a
"mysterious nop", hey?

> Signed-off-by: Ard Biesheuvel <ardb at kernel.org>
> ---
>  arch/arm64/kernel/efi-header.S | 43 +++++++++++++++-----
>  arch/arm64/kernel/head.S       | 19 +--------
>  2 files changed, 35 insertions(+), 27 deletions(-)
> 
> diff --git a/arch/arm64/kernel/efi-header.S b/arch/arm64/kernel/efi-header.S
> index ddaf57d825b5..7b7ac4316d95 100644
> --- a/arch/arm64/kernel/efi-header.S
> +++ b/arch/arm64/kernel/efi-header.S
> @@ -7,7 +7,27 @@
>  #include <linux/pe.h>
>  #include <linux/sizes.h>
>  
> +	.macro	magic_nop
> +#ifdef CONFIG_EFI
> +.L_head:
> +	/*
> +	 * This add instruction has no meaningful effect except that
> +	 * its opcode forms the magic "MZ" signature required by UEFI.
> +	 */
> +	add	x13, x18, #0x16

It's probably faster too ;)

> +#else
> +	/*
> +	 * Bootloaders may inspect the opcode at the start of the kernel
> +	 * image to decide if the kernel is capable of booting via UEFI.
> +	 * So put an ordinary NOP here, not the "MZ.." pseudo-nop above.
> +	 */
> +	nop

Let's just hope nobody was decoding the branch instruction...

Acked-by: Will Deacon >will at kernel.org>

Will



More information about the linux-arm-kernel mailing list