[ipxe-devel] Unrecognised relocation type R_X86_64_32S in util/elf2efi64
Michael Brown
mcb30 at ipxe.org
Thu Feb 12 11:05:53 UTC 2015
On 12/02/15 10:49, Jan Kundrát wrote:
> On Thursday, 12 February 2015 11:34:28 CEST, Michael Brown wrote:
>> Could you identify some of these relocations within the original
>> object files? Something like:
>>
>> objdump -dr bin-x86_64-efi/*.o | grep -C50 R_X86_64_32S
>
> Uploaded to http://jkt.flaska.net/R_X86_64_32S.bz2 . I'm afraid I cannot
> interpret these data.
Thanks. The problem seems to be that your build is not generating
position-independent code. One simple example is in x509_alloc_chain(),
where my build generates
14: 48 8d 0d 00 00 00 00 lea 0x0(%rip),%rcx # 1b
<x509_alloc_chain+0x1b>
17: R_X86_64_PC32 .text.x509_free_chain-0x4
but your build generates
14: 48 c7 40 08 00 00 00 movq $0x0,0x8(%rax)
1b: 00
18: R_X86_64_32S .text.x509_free_chain
I'm fairly sure there's no way to generate an equivalent PE relocation
for R_X86_64_32S, since UEFI allows objects to be loaded anywhere within
the 64-bit address space.
The question is therefore why your build is failing to consistently
generate position-independent code. Could you check the build command
line using
make bin-x86_64-efi/x509.o.rebuild V=1
and also confirm which git revision you are building (e.g. via "git log")?
Thanks,
Michael
More information about the ipxe-devel
mailing list