summaryrefslogtreecommitdiffstats
path: root/src/util
diff options
context:
space:
mode:
authorMichael Brown2015-02-12 14:35:11 +0100
committerMichael Brown2015-02-12 14:39:25 +0100
commit907cffb7c50917d1576cee6363ecbe5d269efa00 (patch)
tree4a9d52f1bc8226407037031e6ad75af7a5a989b5 /src/util
parent[build] Sort objects in blib.a (diff)
downloadipxe-907cffb7c50917d1576cee6363ecbe5d269efa00.tar.gz
ipxe-907cffb7c50917d1576cee6363ecbe5d269efa00.tar.xz
ipxe-907cffb7c50917d1576cee6363ecbe5d269efa00.zip
[efi] Disallow R_X86_64_32 relocations
UEFI binaries may be relocated to any location within the 64-bit address space. We compile as position-independent code with hidden visibility, which should force all relocation records to be either PC-relative (in which case no PE relocations are required) or full 64-bit relocations. There should be no R_X86_64_32 relocation records, since that would imply an invalid assumption that code could not be relocated above 4GB. Remove support for R_X86_64_32 relocation records from util/elf2efi.c, so that any such records result in a build failure rather than a potential runtime failure. Reported-by: Jan Kundrát <jkt@kde.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/util')
-rw-r--r--src/util/elf2efi.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/util/elf2efi.c b/src/util/elf2efi.c
index 45d53957..1e7a99b7 100644
--- a/src/util/elf2efi.c
+++ b/src/util/elf2efi.c
@@ -481,8 +481,7 @@ static void process_reloc ( bfd *bfd __attribute__ (( unused )),
} else if ( strcmp ( howto->name, "R_X86_64_64" ) == 0 ) {
/* Generate an 8-byte PE relocation */
generate_pe_reloc ( pe_reltab, offset, 8 );
- } else if ( ( strcmp ( howto->name, "R_386_32" ) == 0 ) ||
- ( strcmp ( howto->name, "R_X86_64_32" ) == 0 ) ) {
+ } else if ( strcmp ( howto->name, "R_386_32" ) == 0 ) {
/* Generate a 4-byte PE relocation */
generate_pe_reloc ( pe_reltab, offset, 4 );
} else if ( strcmp ( howto->name, "R_386_16" ) == 0 ) {