qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [Bug 1257099] [NEW] QEMU fails to build on CentOS 5.10


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 status

However QEMU builds just fine. So it is looking like libtool is also part of the problem.

   -Don Slutz



reply via email to

[Prev in Thread] Current Thread [Next in Thread]