Skip to content
Snippets Groups Projects
Commit 268ec6e0 authored by Heinrich Schuchardt's avatar Heinrich Schuchardt :speech_balloon: Committed by Alexander Graf
Browse files

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: default avatarAndre Przywara <andre.przywara@arm.com>
Signed-off-by: Heinrich Schuchardt's avatarHeinrich Schuchardt <xypron.glpk@gmx.de>
Tested-by: default avatarVagrant Cascadian <vagrant@debian.org>
Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
parent 1811a928
No related branches found
No related tags found
No related merge requests found
......@@ -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 */
......
/*
* 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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment