|
From: | Don Slutz |
Subject: | Re: [Qemu-devel] [Bug 1257099] [NEW] QEMU fails to build on CentOS 5.10 with relocation R_X86_64_PC32 error |
Date: | Sat, 7 Dec 2013 08:27:51 -0500 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130625 Thunderbird/17.0.7 |
On 12/05/13 10:18, Paolo Bonzini wrote:
Il 04/12/2013 02:32, Don Slutz ha scritto:Any hints or pointers about the bug in RHEL5 binutils? I can try and make a patch to auto detect this.Actually it's RHEL5 GCC: $ cat f.c void * f(unsigned char *buf, int len) { return (void*)0L; } void * g(unsigned char *buf, int len) { return f(buf, len); } $ gcc -shared -o f.so f.c -fPIE -fPIC /usr/bin/ld: /tmp/ccQc9els.o: relocation R_X86_64_PC32 against `f' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: final link failed: Bad value collect2: ld returned 1 exit status The bug is simply that "-fPIE -fPIC" counts as -fPIE rather than -fPIC: $ gcc -S -o - f.c -fPIE |grep call call f # PC32 relocation $ gcc -S -o - f.c -fPIC |grep call call address@hidden # PLT32 relocation On RHEL5: $ gcc -S -o - f.c -fPIE -fPIC |grep call call f On RHEL6: $ gcc -S -o - f.c -fPIE -fPIC |grep call call address@hidden Paolo
RHEL5 also "works" if you add -pie: dcs-xen-53:~/tmp>gcc -shared -o f.so f.c -fPIE -fPIC/usr/bin/ld: /tmp/cc6pp1n2.o: relocation R_X86_64_PC32 against `f' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value collect2: ld returned 1 exit status dcs-xen-53:~/tmp>gcc -shared -o f.so f.c -fPIE -fPIC -pie dcs-xen-53:~/tmp>gcc -S -o - f.c -fPIE -pie|grep call call f I have not figured out a way to take advantage of this. I just checked and Fedora 17 has the same issue with gcc: FC17: dcs-xen-52:~/tmp>gcc -S -o - f.c -fPIE -fPIC |grep call call f dcs-xen-52:~/tmp>gcc -shared -o f.so f.c -fPIE -fPIC/usr/bin/ld: /tmp/ccUlVgMP.o: relocation R_X86_64_PC32 against symbol `f' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value collect2: error: ld returned 1 exit statusHowever QEMU builds just fine. So it is looking like libtool is also part of the problem.
-Don Slutz
[Prev in Thread] | Current Thread | [Next in Thread] |