diff options
author | Michael Brown | 2015-02-12 14:35:11 +0100 |
---|---|---|
committer | Michael Brown | 2015-02-12 14:39:25 +0100 |
commit | 907cffb7c50917d1576cee6363ecbe5d269efa00 (patch) | |
tree | 4a9d52f1bc8226407037031e6ad75af7a5a989b5 | |
parent | [build] Sort objects in blib.a (diff) | |
download | ipxe-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>
-rw-r--r-- | src/util/elf2efi.c | 3 |
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 ) { |