Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Sep 2008 17:14:29 +0300
From:      Kostik Belousov <kostikbel@gmail.com>
To:        John Baldwin <jhb@freebsd.org>
Cc:        Jonathan Briggs <zlynx@acm.org>, freebsd-amd64@freebsd.org
Subject:   Re: amd64/127640: GCC will not build shared libraries with -fprofile-generate on amd64
Message-ID:  <20080926141429.GW47828@deviant.kiev.zoral.com.ua>
In-Reply-To: <200809261001.44340.jhb@freebsd.org>
References:  <200809252050.m8PKohFr095842@www.freebsd.org> <200809261001.44340.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--2Stxnv0JS2q2nyCF
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Fri, Sep 26, 2008 at 10:01:43AM -0400, John Baldwin wrote:
> On Thursday 25 September 2008 04:50:43 pm Jonathan Briggs wrote:
> >=20
> > >Number:         127640
> > >Category:       amd64
> > >Synopsis:       GCC will not build shared libraries with -fprofile-gen=
erate=20
> on amd64
> > >Confidential:   no
> > >Severity:       non-critical
> > >Priority:       low
> > >Responsible:    freebsd-amd64
> > >State:          open
> > >Quarter:       =20
> > >Keywords:      =20
> > >Date-Required:
> > >Class:          sw-bug
> > >Submitter-Id:   current-users
> > >Arrival-Date:   Thu Sep 25 21:00:03 UTC 2008
> > >Closed-Date:
> > >Last-Modified:
> > >Originator:     Jonathan Briggs
> > >Release:        7.0-RELEASE
> > >Organization:
> > >Environment:
> > FreeBSD freebsd64 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 10:35:=
36=20
> UTC 2008     root@driscoll.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC =
=20
> amd64
> >=20
> > >Description:
> > I was porting a specialized database library to FreeBSD and the build f=
ailed=20
> with this error:
> >=20
> > /usr/bin/ld: /usr/lib/libgcov.a(_gcov_merge_add.o): relocation R_X86_64=
_32=20
> can not be used when making a shared object; recompile with -fPIC
> > /usr/lib/libgcov.a: could not read symbols: Bad value
> >=20
> > The library uses -fprofile-generate, runs a test set, then rebuilds=20
> with -fprofile-use.  It's worth a few ms per lookup.
> >=20
> > Also, this builds very well on i386 FreeBSD 7.0 and on many varieties o=
f=20
> Linux and their GCC builds (Debian ia64, Gentoo amd64, CentOS 5.2, Fedora=
 5,=20
> 8, 9).
> >=20
> > I can work around the problem by just not doing a profile build.
> > >How-To-Repeat:
> > Put the following in a shell script:
> >=20
> > #!/bin/sh
> > cat <<EOF |
> > #include <stdio.h>
> >=20
> > int counter(int count)
> > {
> > 	int i;
> >=20
> > 	for(i=3D0; i<count; i++) {
> > 		printf("loop %d\n", i);
> > 	}
> > 	return i;
> > }
> > EOF
> > gcc -O2 -shared -fprofile-generate -fPIC -o t1.so -x c -
>=20
> What if you add -fPIC as the message suggests?

Note that libgcov needs to be recompiled with -fPIC.
The R_X86_64_32 issue is systematic on amd64. When you build a shared
object, better make sure that all .o are compiled with -fPIC.

--2Stxnv0JS2q2nyCF
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (FreeBSD)

iEYEARECAAYFAkjc7kUACgkQC3+MBN1Mb4hyxQCgtU49iN4tL4qrrbyWJglCIGWW
olsAoKjx60c0jcOcRmf5lsPUuyDy+JjV
=PdcL
-----END PGP SIGNATURE-----

--2Stxnv0JS2q2nyCF--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080926141429.GW47828>