x86, efi: Fix issue of overlapping .reloc section for EFI_STUB
authorJordan Justen <jordan.l.justen@intel.com>
Fri, 23 Mar 2012 16:35:04 +0000 (09:35 -0700)
committerH. Peter Anvin <hpa@linux.intel.com>
Mon, 26 Mar 2012 20:08:33 +0000 (13:08 -0700)
Previously the .reloc section was embedded in the .text
section.

No relocations are required during the PE/COFF loading phase
for the kernel using the EFI_STUB UEFI loader. To fix the
issue of overlapping sections, create a .reloc section with a
zero length.

The .reloc section header must exist to make sure the image
will be loaded by the UEFI firmware, but a zero-length
section header seems to be sufficient.

Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Link: http://lkml.kernel.org/r/1332520506-6472-2-git-send-email-jordan.l.justen@intel.com
Acked-by: Matt Fleming <matt.fleming@intel.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
arch/x86/boot/header.S

index f1bbeeb091489d43267975234b0c0403e9cbffe5..4e9124b148c2a4c3d3f693c0fc385eadaf656698 100644 (file)
@@ -217,18 +217,17 @@ section_table:
 
        #
        # The EFI application loader requires a relocation section
-       # because EFI applications are relocatable and not having
-       # this section seems to confuse it. But since we don't need
-       # the loader to fixup any relocs for us just fill it with a
-       # single dummy reloc.
+       # because EFI applications must be relocatable. But since
+       # we don't need the loader to fixup any relocs for us, we
+       # just create an empty (zero-length) .reloc section header.
        #
        .ascii  ".reloc"
        .byte   0
        .byte   0
-       .long   reloc_end - reloc_start
-       .long   reloc_start
-       .long   reloc_end - reloc_start         # SizeOfRawData
-       .long   reloc_start                     # PointerToRawData
+       .long   0
+       .long   0
+       .long   0                               # SizeOfRawData
+       .long   0                               # PointerToRawData
        .long   0                               # PointerToRelocations
        .long   0                               # PointerToLineNumbers
        .word   0                               # NumberOfRelocations
@@ -469,10 +468,3 @@ setup_corrupt:
 
        .data
 dummy: .long   0
-
-       .section .reloc
-reloc_start:
-       .long   dummy - reloc_start
-       .long   10
-       .word   0
-reloc_end: