From 253342666fc3bf95d15607aced85fb262f980585 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Aug 24 2017 20:57:25 +0000 Subject: Don't make .reloc sections on Aarch64 binaries. Signed-off-by: Peter Jones --- diff --git a/0001-arm64-efi-remove-pointless-dummy-.reloc-section.patch b/0001-arm64-efi-remove-pointless-dummy-.reloc-section.patch new file mode 100644 index 0000000..204497f --- /dev/null +++ b/0001-arm64-efi-remove-pointless-dummy-.reloc-section.patch @@ -0,0 +1,76 @@ +From 6e32a714438f3938e1fb64cb380e7fa8b0c8789a Mon Sep 17 00:00:00 2001 +From: Peter Jones +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 +Acked-by: Mark Rutland +Acked-by: Peter Jones +--- + 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 + diff --git a/gnu-efi.spec b/gnu-efi.spec index 4aa98b5..8dac91e 100644 --- a/gnu-efi.spec +++ b/gnu-efi.spec @@ -1,7 +1,7 @@ Summary: Development Libraries and headers for EFI Name: gnu-efi Version: 3.0.5 -Release: 10%{?dist}%{?buildid} +Release: 11%{?dist}%{?buildid} Epoch: 1 Group: Development/System License: BSD @@ -31,6 +31,7 @@ Patch0010: 0010-Make-clang-not-complain-about-the-debughook-s-optimi.patch Patch0011: 0011-Nerf-Werror-pragma-away.patch Patch0012: 0012-Make-ia32-use-our-own-div-asm-on-gnu-C-as-well.patch Patch0013: 0013-Call-ar-in-deterministic-mode.patch +Patch0014: 0001-arm64-efi-remove-pointless-dummy-.reloc-section.patch %define debug_package %{nil} @@ -140,6 +141,9 @@ rm -rf %{buildroot} %attr(0644,root,root) /boot/efi/EFI/%{efidir}/*/*.efi %changelog +* Thu Aug 24 2017 Peter Jones - 3.0.5-11 +- Don't make .reloc sections on Aarch64 binaries. + * Wed Aug 02 2017 Fedora Release Engineering - 1:3.0.5-10 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild