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

Re: [Xen-devel] [Qemu-devel] [Bug 1257099] [NEW] QEMU fails to build on CentOS 5.10 with relocation R_X86_64_PC32 error



On 12/05/13 16:24, Richard Henderson wrote:
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~
Here is a possible patch based on this statement:

From 6e57382c58fa1b9be0fe9db8f35f53a7a7858ccd Mon Sep 17 00:00:00 2001
From: Don Slutz <dslutz@xxxxxxxxxxx>
Date: Fri, 6 Dec 2013 03:12:12 +0000
Subject: [PATCH] configure: Auto disabling of libtool due to broken toolchain
 support (bug #1257099)

See https://bugs.launchpad.net/bugs/1257099

On RHEL5 GCC with libtool and PIE, you get 'relocation R_X86_64_PC32' errors from ld.
So disable libtool which disables smartcard-nss (aka nss) if this is true.

Signed-off-by: Don Slutz <dslutz@xxxxxxxxxxx>
---
 configure | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/configure b/configure
index 0666228..5e34095 100755
--- a/configure
+++ b/configure
@@ -1310,6 +1310,33 @@ if compile_prog "-Werror -fno-gcse" "" ; then
   TRANSLATE_OPT_CFLAGS=-fno-gcse
 fi

+# check for broken GCC in RHEL5 with PIE
+if test -n "$libtool" -a "$pie" = "" ; then
+  cat > $TMPC << EOF
+
+void *f(unsigned char *buf, int len);
+void *g(unsigned char *buf, int len);
+
+void *
+f(unsigned char *buf, int len)
+{
+    return (void*)0L;
+}
+
+void *
+g(unsigned char *buf, int len)
+{
+    return f(buf, len);
+}
+
+EOF
+  if ! compile_prog "-shared -fPIE -fPIC" ""; then
+    echo "Disabling libtool due to broken toolchain support"
+    echo "Defaulting to --disable-smartcard-nss"
+    libtool=
+  fi
+fi
+
 if test "$static" = "yes" ; then
   if test "$pie" = "yes" ; then
     error_exit "static and pie are mutually incompatible"
--
1.8.2.1

  -Don Slutz

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.