ce8b17269b
Signed-off-by: Peter Jones <pjones@redhat.com>
77 lines
2.6 KiB
Diff
77 lines
2.6 KiB
Diff
From 6e32a714438f3938e1fb64cb380e7fa8b0c8789a Mon Sep 17 00:00:00 2001
|
|
From: Peter Jones <pjones@redhat.com>
|
|
Date: Thu, 24 Aug 2017 16:54:18 -0400
|
|
Subject: [PATCH] arm64: efi: remove pointless dummy .reloc section
|
|
|
|
The kernel's EFI PE/COFF header contains a dummy .reloc section, and
|
|
an explanatory comment that claims that this is required for the EFI
|
|
application loader to accept the Image as a relocatable image (i.e.,
|
|
one that can be loaded at any offset and fixed up in place)
|
|
|
|
This was inherited from the x86 implementation, which has elaborate host
|
|
tooling to mangle the PE/COFF header post-link time, and which populates
|
|
the .reloc section with a single dummy base relocation. On ARM, no such
|
|
tooling exists, and the .reloc section remains empty, and is never even
|
|
exposed via the BaseRelocationTable directory entry, which is where the
|
|
PE/COFF loader looks for it.
|
|
|
|
The PE/COFF spec is unclear about relocatable images that do not require
|
|
any fixups, but the EDK2 implementation, which is the de facto reference
|
|
for PE/COFF in the UEFI space, clearly does not care, and explicitly
|
|
mentions (in a comment) that relocatable images with no base relocations
|
|
are perfectly fine, as long as they don't have the RELOCS_STRIPPED
|
|
attribute set (which is not the case for our PE/COFF image)
|
|
|
|
So simply remove the .reloc section altogether.
|
|
|
|
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
|
|
Acked-by: Mark Rutland <mark.rutland@arm.com>
|
|
Acked-by: Peter Jones <pjones@redhat.com>
|
|
---
|
|
gnuefi/crt0-efi-aarch64.S | 22 +---------------------
|
|
1 file changed, 1 insertion(+), 21 deletions(-)
|
|
|
|
diff --git a/gnuefi/crt0-efi-aarch64.S b/gnuefi/crt0-efi-aarch64.S
|
|
index 7a9e5c2..fef997b 100644
|
|
--- a/gnuefi/crt0-efi-aarch64.S
|
|
+++ b/gnuefi/crt0-efi-aarch64.S
|
|
@@ -31,7 +31,7 @@ pe_header:
|
|
.short 0
|
|
coff_header:
|
|
.short 0xaa64 // AArch64
|
|
- .short 2 // nr_sections
|
|
+ .short 1 // nr_sections
|
|
.long 0 // TimeDateStamp
|
|
.long 0 // PointerToSymbolTable
|
|
.long 1 // NumberOfSymbols
|
|
@@ -85,26 +85,6 @@ extra_header_fields:
|
|
|
|
// Section table
|
|
section_table:
|
|
-
|
|
- /*
|
|
- * The EFI application loader requires a relocation section
|
|
- * because EFI applications must be relocatable. This is a
|
|
- * dummy section as far as we are concerned.
|
|
- */
|
|
- .ascii ".reloc"
|
|
- .byte 0
|
|
- .byte 0 // end of 0 padding of section name
|
|
- .long 0
|
|
- .long 0
|
|
- .long 0 // SizeOfRawData
|
|
- .long 0 // PointerToRawData
|
|
- .long 0 // PointerToRelocations
|
|
- .long 0 // PointerToLineNumbers
|
|
- .short 0 // NumberOfRelocations
|
|
- .short 0 // NumberOfLineNumbers
|
|
- .long 0x42100040 // Characteristics (section flags)
|
|
-
|
|
-
|
|
.ascii ".text"
|
|
.byte 0
|
|
.byte 0
|
|
--
|
|
2.13.5
|
|
|