On 12/06/2013 04:18 AM, Paolo Bonzini wrote:
$ 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 f@PLT # PLT32 relocation
The easy workaround is to drop -fPIE when we're adding -fPIC.
r~