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
|
||||
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
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
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
|
||||
#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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user