efi_loader: fix building crt0 on arm
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>
This commit is contained in:
parent
1811a928c6
commit
268ec6e00e
@ -291,6 +291,8 @@ S: Maintained
|
|||||||
T: git git://github.com/agraf/u-boot.git
|
T: git git://github.com/agraf/u-boot.git
|
||||||
F: doc/README.iscsi
|
F: doc/README.iscsi
|
||||||
F: include/efi*
|
F: include/efi*
|
||||||
|
F: include/pe.h
|
||||||
|
F: include/asm-generic/pe.h
|
||||||
F: lib/efi*/
|
F: lib/efi*/
|
||||||
F: test/py/tests/test_efi*
|
F: test/py/tests/test_efi*
|
||||||
F: cmd/bootefi.c
|
F: cmd/bootefi.c
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
* This file is taken and modified from the gnu-efi project.
|
* This file is taken and modified from the gnu-efi project.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <asm-generic/pe.h>
|
||||||
|
|
||||||
.section .text.head
|
.section .text.head
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -62,7 +64,7 @@ extra_header_fields:
|
|||||||
*/
|
*/
|
||||||
.long _start - ImageBase /* SizeOfHeaders */
|
.long _start - ImageBase /* SizeOfHeaders */
|
||||||
.long 0 /* CheckSum */
|
.long 0 /* CheckSum */
|
||||||
.short EFI_SUBSYSTEM /* Subsystem */
|
.short IMAGE_SUBSYSTEM_EFI_APPLICATION /* Subsystem */
|
||||||
.short 0 /* DllCharacteristics */
|
.short 0 /* DllCharacteristics */
|
||||||
.quad 0 /* SizeOfStackReserve */
|
.quad 0 /* SizeOfStackReserve */
|
||||||
.quad 0 /* SizeOfStackCommit */
|
.quad 0 /* SizeOfStackCommit */
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
* This file is taken and modified from the gnu-efi project.
|
* This file is taken and modified from the gnu-efi project.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <asm-generic/pe.h>
|
||||||
|
|
||||||
.section .text.head
|
.section .text.head
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -64,7 +66,7 @@ extra_header_fields:
|
|||||||
*/
|
*/
|
||||||
.long _start - image_base /* SizeOfHeaders */
|
.long _start - image_base /* SizeOfHeaders */
|
||||||
.long 0 /* CheckSum */
|
.long 0 /* CheckSum */
|
||||||
.short EFI_SUBSYSTEM /* Subsystem */
|
.short IMAGE_SUBSYSTEM_EFI_APPLICATION /* Subsystem */
|
||||||
.short 0 /* DllCharacteristics */
|
.short 0 /* DllCharacteristics */
|
||||||
.long 0 /* SizeOfStackReserve */
|
.long 0 /* SizeOfStackReserve */
|
||||||
.long 0 /* SizeOfStackCommit */
|
.long 0 /* SizeOfStackCommit */
|
||||||
|
21
include/asm-generic/pe.h
Normal file
21
include/asm-generic/pe.h
Normal file
@ -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 */
|
@ -11,6 +11,8 @@
|
|||||||
#ifndef _PE_H
|
#ifndef _PE_H
|
||||||
#define _PE_H
|
#define _PE_H
|
||||||
|
|
||||||
|
#include <asm-generic/pe.h>
|
||||||
|
|
||||||
typedef struct _IMAGE_DOS_HEADER {
|
typedef struct _IMAGE_DOS_HEADER {
|
||||||
uint16_t e_magic; /* 00: MZ Header signature */
|
uint16_t e_magic; /* 00: MZ Header signature */
|
||||||
uint16_t e_cblp; /* 02: Bytes on last page of file */
|
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
|
#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 {
|
typedef struct _IMAGE_OPTIONAL_HEADER64 {
|
||||||
uint16_t Magic; /* 0x20b */
|
uint16_t Magic; /* 0x20b */
|
||||||
uint8_t MajorLinkerVersion;
|
uint8_t MajorLinkerVersion;
|
||||||
|
@ -94,7 +94,7 @@ static void efi_set_code_and_data_type(
|
|||||||
loaded_image_info->image_data_type = EFI_BOOT_SERVICES_DATA;
|
loaded_image_info->image_data_type = EFI_BOOT_SERVICES_DATA;
|
||||||
break;
|
break;
|
||||||
case IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER:
|
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_code_type = EFI_RUNTIME_SERVICES_CODE;
|
||||||
loaded_image_info->image_data_type = EFI_RUNTIME_SERVICES_DATA;
|
loaded_image_info->image_data_type = EFI_RUNTIME_SERVICES_DATA;
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user