amd64/127640: GCC will not build shared libraries with
-fprofile-generate on amd64
Kostik Belousov
kostikbel at gmail.com
Fri Sep 26 14:14:42 UTC 2008
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:
> >
> > >Number: 127640
> > >Category: amd64
> > >Synopsis: GCC will not build shared libraries with -fprofile-generate
> on amd64
> > >Confidential: no
> > >Severity: non-critical
> > >Priority: low
> > >Responsible: freebsd-amd64
> > >State: open
> > >Quarter:
> > >Keywords:
> > >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
> UTC 2008 root at driscoll.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC
> amd64
> >
> > >Description:
> > I was porting a specialized database library to FreeBSD and the build failed
> with this error:
> >
> > /usr/bin/ld: /usr/lib/libgcov.a(_gcov_merge_add.o): relocation R_X86_64_32
> can not be used when making a shared object; recompile with -fPIC
> > /usr/lib/libgcov.a: could not read symbols: Bad value
> >
> > The library uses -fprofile-generate, runs a test set, then rebuilds
> with -fprofile-use. It's worth a few ms per lookup.
> >
> > Also, this builds very well on i386 FreeBSD 7.0 and on many varieties of
> Linux and their GCC builds (Debian ia64, Gentoo amd64, CentOS 5.2, Fedora 5,
> 8, 9).
> >
> > I can work around the problem by just not doing a profile build.
> > >How-To-Repeat:
> > Put the following in a shell script:
> >
> > #!/bin/sh
> > cat <<EOF |
> > #include <stdio.h>
> >
> > int counter(int count)
> > {
> > int i;
> >
> > for(i=0; i<count; i++) {
> > printf("loop %d\n", i);
> > }
> > return i;
> > }
> > EOF
> > gcc -O2 -shared -fprofile-generate -fPIC -o t1.so -x c -
>
> 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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-amd64/attachments/20080926/3cd0ee20/attachment.pgp
More information about the freebsd-amd64
mailing list