[oe] [PATCH] libcap: Append `-fPIC` to `CFLAGS` to fix compilation on newer binutils/ld. (was: [gcc 4.4.2] [libcap, vdr] relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC)

Paul Menzel paulepanter at users.sourceforge.net
Sat Jan 16 13:59:47 UTC 2010


Dear OE hackers,


Am Dienstag, den 12.01.2010, 11:40 +0100 schrieb Paul Menzel:
> sorry for bothering you with this. I am trying to reproduce the errors
> Henning has seen with g++ 4.4.2 [1] and therefore added the following
> lines to my `local.conf` for Ångström with BeagleBoard [2].
> 
> Am Montag, den 11.01.2010, 23:42 +0100 schrieb Paul Menzel:
> 
> […]
> 
> > Putting
> > 
> >         PREFERRED_VERSION_binutils               = "2.20"
> >         PREFERRED_VERSION_binutils-cross         = "2.20"
> >         PREFERRED_VERSION_binutils-cross-sdk     = "2.20"
> >         
> >         PREFERRED_VERSION_gcc                    = "4.4.2"
> >         PREFERRED_VERSION_gcc-cross              = "4.4.2"
> >         PREFERRED_VERSION_gcc-cross-sdk          = "4.4.2"
> >         PREFERRED_VERSION_gcc-cross-initial      = "4.4.2"
> >         PREFERRED_VERSION_gcc-cross-intermediate = "4.4.2"
> > 
> > in my `local.conf` and running `bitbake vdr` gave me an error in
> > `do_compile` for `libcap_1.10.bb`.
> > 
> >         arm-angstrom-linux-gnueabi-ld -soname libcap.so.1 -x -shared
> -o libcap.so.1.10 cap_alloc.o cap_proc.o cap_extint.o cap_flag.o
> cap_text.o cap_sys.o
> >         arm-angstrom-linux-gnueabi-ld: cap_text.o: relocation
> R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making
> a shared object; recompile with -fPIC
> 
> I do not get these errors if I use the standard versions defined for
> Ångström which is 4.1.1. Adding `-fPIC` to the flags as suggested in
> [3]
> solves the problem for me.
> 
> Does anyone know if GCC’s behavior was changed somehow?

according to Khem Raj this has to do with binutils/ld [2].

Please find the patch inlined and attached.


Thanks,

Paul

---
From c119072b0f13b674d705d3bc50150a252bf7c5d2 Mon Sep 17 00:00:00 2001
From: Paul Menzel <paulepanter at users.sourceforge.net>
Date: Sat, 16 Jan 2010 14:41:03 +0100
Subject: [PATCH] libcap: Append `-fPIC` to `CFLAGS` to fix compilation on newer binutils/ld.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Doing `bitbake libcap` with

        PREFERRED_VERSION_binutils               = "2.20"
        PREFERRED_VERSION_binutils-cross         = "2.20"
        PREFERRED_VERSION_binutils-cross-sdk     = "2.20"

        PREFERRED_VERSION_gcc                    = "4.4.2"
        PREFERRED_VERSION_gcc-cross              = "4.4.2"
        PREFERRED_VERSION_gcc-cross-sdk          = "4.4.2"
        PREFERRED_VERSION_gcc-cross-initial      = "4.4.2"
        PREFERRED_VERSION_gcc-cross-intermediate = "4.4.2"

in `local.conf` made `do_compile` error out with the following message [1].

        arm-angstrom-linux-gnueabi-ld -soname libcap.so.1 -x -shared -o libcap.so.1.10 cap_alloc.o cap_proc.o cap_extint.o cap_flag.o cap_text.o cap_sys.o
        arm-angstrom-linux-gnueabi-ld: cap_text.o: relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC

Khem Raj explained it the following way [2].

Am Mittwoch, den 13.01.2010, 02:27 -0800 schrieb Khem Raj:
> > I also get the same error which I did not get before with GCC 4.1.1.
>
> Older versions of binutils/ld can not detect MOVT/MOVW relocations which
> are absolute and cant be used in PIC code.
> hence even if the error was there it remained latent.

Therefore just append `-fPIC` to the CFLAGS and bump the PR variable.

The strange thing is still, that other distributions seem to have patched libcap to build with `-fPIC` long ago [3–5].

[1] http://lists.linuxtogo.org/pipermail/openembedded-devel/2010-January/016142.html
[2] http://lists.linuxtogo.org/pipermail/openembedded-devel/2010-January/016211.html
[3] http://www.linuxfromscratch.org/patches/downloads/libcap/libcap-1.10-fedora_fixes-1.patch
[4] http://frugalware.org/pipermail/frugalware-darcs/2005-May/000824.html
[5] http://cvs.fedoraproject.org/viewvc/rpms/libcap/F-7/libcap-1.10-fPIC.patch?revision=1.1&view=markup

Signed-off-by: Paul Menzel <paulepanter at users.sourceforge.net>
---
 recipes/libcap/libcap_1.10.bb |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/recipes/libcap/libcap_1.10.bb b/recipes/libcap/libcap_1.10.bb
index 172acac..241529e 100644
--- a/recipes/libcap/libcap_1.10.bb
+++ b/recipes/libcap/libcap_1.10.bb
@@ -3,9 +3,9 @@ PRIORITY = "optional"
 SECTION = "libs"
 LICENSE = "GPL"
 DEPENDS = "bison-native flex-native"
-PR = "r1"
+PR = "r2"
 
-CFLAGS_append = " -I${S}/libcap/include"
+CFLAGS_append = " -I${S}/libcap/include -fPIC"
 
 SRC_URI = "${KERNELORG_MIRROR}/pub/linux/libs/security/linux-privs/kernel-2.4/${PN}-${PV}.tar.bz2 \
 	   file://makenames.patch;patch=1 \
-- 
1.6.6
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-libcap-Append-fPIC-to-CFLAGS-to-fix-compilation-on-n.patch
Type: text/x-patch
Size: 3027 bytes
Desc: not available
URL: <http://lists.openembedded.org/pipermail/openembedded-devel/attachments/20100116/94012dc0/attachment-0002.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Dies ist ein digital signierter Nachrichtenteil
URL: <http://lists.openembedded.org/pipermail/openembedded-devel/attachments/20100116/94012dc0/attachment-0002.sig>


More information about the Openembedded-devel mailing list