]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
efi_loader: fix building crt0 on arm
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Wed, 31 Jan 2018 18:45:35 +0000 (18:45 +0000)
committerAlexander Graf <agraf@suse.de>
Fri, 9 Feb 2018 23:24:00 +0000 (00:24 +0100)
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@arm.com>
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Tested-by: Vagrant Cascadian <vagrant@debian.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
MAINTAINERS
arch/arm/lib/crt0_aarch64_efi.S
arch/arm/lib/crt0_arm_efi.S
include/asm-generic/pe.h [new file with mode: 0644]
include/pe.h
lib/efi_loader/efi_image_loader.c

index be941c1e9967a5a9b2b6521e9f2875d410393562..ac21ec581d9847a5fc6a596ba99b248e588775f7 100644 (file)
@@ -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
index 52056469beb9ead8afa0191412aed06809ae8759..9b0e894f8a2eb373ca4067205c7acd238cf3c67d 100644 (file)
@@ -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 */
index 967c885982974d1d4be55035e54420440251996c..af55bba4baa0eb533a3982d7109ec9301283610d 100644 (file)
@@ -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 (file)
index 0000000..d1683f2
--- /dev/null
@@ -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 */
index 4ef3e92efafcbc29d7c1453c5a41bc7ecd47fe48..c3a19cef765ed17ee0764b5f1edbd1664b6c489f 100644 (file)
@@ -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;
index 9d2214b481c6b0816a3bf4eed200691267d8f48d..cac64ba9fec229f9f1f2fd9b9efb8e31ce7fe5db 100644 (file)
@@ -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;