[U-Boot] [U-Boot,1/1] efi_loader: fix building crt0 on arm
Vagrant Cascadian
vagrant at debian.org
Wed Jan 31 19:51:18 UTC 2018
On 2018-01-31, Heinrich Schuchardt wrote:
> Before the patch an undefined constant EFI_SUBSYSTEM was used in the
> crt0 code. The current version of binutils does not swallow the error.
>
> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=888403
>
> The necessary constant IMAGE_SUBSYSTEM_EFI_APPLICATION is already
> defined in pe.h. So let's factor out asm-generic/pe.h for the
> image subsystem constants and use it in our assembler code.
>
> IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER does not exist in the specification
> let's use IMAGE_SUBSYSTEM_EFI_ROM instead.
>
> The include pe.h is only used in code maintained by Alex so let him be the
> maintainer here too.
>
> Reported-by: Andre Przywara <andre.przywara at arm.com>
> Cc: Alexander Graf <agraf at suse.de>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
>
> ---
> MAINTAINERS | 2 ++
> arch/arm/lib/crt0_aarch64_efi.S | 4 +++-
> arch/arm/lib/crt0_arm_efi.S | 4 +++-
> include/asm-generic/pe.h | 21 +++++++++++++++++++++
> include/pe.h | 8 ++------
> lib/efi_loader/efi_image_loader.c | 2 +-
> 6 files changed, 32 insertions(+), 9 deletions(-)
> create mode 100644 include/asm-generic/pe.h
I tested that it at least fixed the build failure with v2018.03-rc1,
though I haven't tested the resulting images actually boot.
Also haven't been able to successfully backported it to v2018.01...
With those caveats:
Tested-by: Vagrant Cascadian <vagrant at debian.org>
live well,
vagrant
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 0aecc18a6c..879b41c97e 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -291,6 +291,8 @@ S: Maintained
> T: git git://github.com/agraf/u-boot.git
> F: doc/README.iscsi
> F: include/efi*
> +F: include/pe.h
> +F: include/asm-generic/pe.h
> F: lib/efi*/
> F: test/py/tests/test_efi*
> F: cmd/bootefi.c
> diff --git a/arch/arm/lib/crt0_aarch64_efi.S b/arch/arm/lib/crt0_aarch64_efi.S
> index 52056469be..9b0e894f8a 100644
> --- a/arch/arm/lib/crt0_aarch64_efi.S
> +++ b/arch/arm/lib/crt0_aarch64_efi.S
> @@ -8,6 +8,8 @@
> * This file is taken and modified from the gnu-efi project.
> */
>
> +#include <asm-generic/pe.h>
> +
> .section .text.head
>
> /*
> @@ -62,7 +64,7 @@ extra_header_fields:
> */
> .long _start - ImageBase /* SizeOfHeaders */
> .long 0 /* CheckSum */
> - .short EFI_SUBSYSTEM /* Subsystem */
> + .short IMAGE_SUBSYSTEM_EFI_APPLICATION /* Subsystem */
> .short 0 /* DllCharacteristics */
> .quad 0 /* SizeOfStackReserve */
> .quad 0 /* SizeOfStackCommit */
> diff --git a/arch/arm/lib/crt0_arm_efi.S b/arch/arm/lib/crt0_arm_efi.S
> index 967c885982..af55bba4ba 100644
> --- a/arch/arm/lib/crt0_arm_efi.S
> +++ b/arch/arm/lib/crt0_arm_efi.S
> @@ -8,6 +8,8 @@
> * This file is taken and modified from the gnu-efi project.
> */
>
> +#include <asm-generic/pe.h>
> +
> .section .text.head
>
> /*
> @@ -64,7 +66,7 @@ extra_header_fields:
> */
> .long _start - image_base /* SizeOfHeaders */
> .long 0 /* CheckSum */
> - .short EFI_SUBSYSTEM /* Subsystem */
> + .short IMAGE_SUBSYSTEM_EFI_APPLICATION /* Subsystem */
> .short 0 /* DllCharacteristics */
> .long 0 /* SizeOfStackReserve */
> .long 0 /* SizeOfStackCommit */
> diff --git a/include/asm-generic/pe.h b/include/asm-generic/pe.h
> new file mode 100644
> index 0000000000..d1683f238a
> --- /dev/null
> +++ b/include/asm-generic/pe.h
> @@ -0,0 +1,21 @@
> +/*
> + * Portable Executable and Common Object Constants
> + *
> + * Copyright (c) 2018 Heinrich Schuchardt
> + *
> + * based on the "Microsoft Portable Executable and Common Object File Format
> + * Specification", revision 11, 2017-01-23
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#ifndef _ASM_PE_H
> +#define _ASM_PE_H
> +
> +/* Subsystem type */
> +#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
> +#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
> +#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
> +#define IMAGE_SUBSYSTEM_EFI_ROM 13
> +
> +#endif /* _ASM_PE_H */
> diff --git a/include/pe.h b/include/pe.h
> index 4ef3e92efa..c3a19cef76 100644
> --- a/include/pe.h
> +++ b/include/pe.h
> @@ -11,6 +11,8 @@
> #ifndef _PE_H
> #define _PE_H
>
> +#include <asm-generic/pe.h>
> +
> typedef struct _IMAGE_DOS_HEADER {
> uint16_t e_magic; /* 00: MZ Header signature */
> uint16_t e_cblp; /* 02: Bytes on last page of file */
> @@ -62,12 +64,6 @@ typedef struct _IMAGE_DATA_DIRECTORY {
>
> #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
>
> -/* PE32+ Subsystem type for EFI images */
> -#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
> -#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
> -#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
> -#define IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER 13
> -
> typedef struct _IMAGE_OPTIONAL_HEADER64 {
> uint16_t Magic; /* 0x20b */
> uint8_t MajorLinkerVersion;
> diff --git a/lib/efi_loader/efi_image_loader.c b/lib/efi_loader/efi_image_loader.c
> index 9d2214b481..cac64ba9fe 100644
> --- a/lib/efi_loader/efi_image_loader.c
> +++ b/lib/efi_loader/efi_image_loader.c
> @@ -94,7 +94,7 @@ static void efi_set_code_and_data_type(
> loaded_image_info->image_data_type = EFI_BOOT_SERVICES_DATA;
> break;
> case IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER:
> - case IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER:
> + case IMAGE_SUBSYSTEM_EFI_ROM:
> loaded_image_info->image_code_type = EFI_RUNTIME_SERVICES_CODE;
> loaded_image_info->image_data_type = EFI_RUNTIME_SERVICES_DATA;
> break;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180131/6bc7b640/attachment.sig>
More information about the U-Boot
mailing list