port math/gmp fails regression tests [WAS: port lang/gcc45 - not sure how to interpret GCC developers' advice]

Marius Strobl marius at alchemy.franken.de
Fri Nov 19 16:21:00 UTC 2010


On Thu, Nov 18, 2010 at 11:07:25AM +0000, Anton Shterenlikht wrote:
> On Wed, Nov 17, 2010 at 10:26:24PM +0100, Marius Strobl wrote:
> > On Wed, Nov 17, 2010 at 01:48:49PM +0000, Anton Shterenlikht wrote:
> > > On Tue, Nov 16, 2010 at 09:31:37AM +0000, Anton Shterenlikht wrote:
> > > > On Mon, Nov 15, 2010 at 10:48:20AM -0800, John-Mark Gurney wrote:
> > > > > Anton Shterenlikht wrote this message on Mon, Nov 15, 2010 at 10:54 +0000:
> > > > > > On sparc64 -current r212302 I'm having trouble
> > > > > > building port lang/gcc45.
> > > > > > 
> > > > > > Before I go any further, let me just check if anybody
> > > > > > on this list has built gcc45 successfully?
> > > > > > 
> > > > > > Here's my GCC bug submission:
> > > > > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46086
> > > > > > 
> > > > > > I just can't understand what the GCC folks tell me to do.
> > > > > > 
> > > > > > They referred me to this page:
> > > > > > http://gcc.gnu.org/install/specific.html#sparc-x-x
> > > > > > 
> > > > > > and apparently to this paragraph:
> > > > > > 
> > > > > > *quote*
> > > > > > Newer versions of the GNU Multiple Precision Library (GMP),
> > > > > > the MPFR library and the MPC library are known to be
> > > > > > miscompiled by earlier versions of GCC on these platforms.
> > > > > > We therefore recommend the use of the exact versions of
> > > > > > these libraries listed as minimal versions in the prerequisites. 
> > > > > > *end quote*
> > > > > > 
> > > > > > The prerequisites link lists:
> > > > > > 
> > > > > > GNU Multiple Precision Library (GMP) version 4.3.2 (or later)
> > > > > > MPFR Library version 2.4.2 (or later)
> > > > > > 
> > > > > > I've installed:
> > > > > > 
> > > > > > gmp-5.0.1
> > > > > > gmp-ecm-6.3
> > > > > > mpfr-3.0.0
> > > > > > 
> > > > > > So do they mean to say that I should downgrade to GMP 4.3.2 and
> > > > > > MPFR 2.4.2?
> > > > > 
> > > > > Yes, I believe that they do.  I think the important phrase is:
> > > > > exact versions of these libraries listed as minimal versions
> > > > > 
> > > > > which isn't very clear, but saying use the minimal version listed on
> > > > > the page...  They probably had someone try w/ 4.3.3 and wonder why it
> > > > > wasn't working so they added the exact verbage...
> > > > 
> > > > ok, I get it. However, the ports above were pulled up and
> > > > installed when I was building gcc45. So downgrading might
> > > > break ports interdependency. I'll try instead to build GMP
> > > > and MPFR with gcc44.
> > > 
> > > I've rebuilt GMP with gcc 4.4.6 20101026,
> > > and discovered that it fails regression tests.
> > > Here's my log:
> > > 
> > > http://seis.bris.ac.uk/~mexas/gmp-5.0.1-regression-test.log
> > > 
> > > Can anybody on this list confirm (or otherwise) this.
> > > 
> > > I also checked that GMP passes all tests fine on amd64 and ia64,
> > > so the issue indeed seems to be sparc64 specific.
> > > 
> > 
> > You seem to be building the gmp port with a non-base compiler but the
> > regression test of the port is picking up the base libstdc++. Likely
> > you need fix your search path for the dynamic linker to include the
> > directory of the libraries of the gcc port you are using (I think for
> > the gcc* ports this is intended to be done via ldconfig(8), i.e. the
> > `ldconfig -r` output needs to include the libstdc++.so.6 of that gcc
> > port) or to include it before the base counterparts. If that doesn't
> > solve your problem you should talk to the port maintainer.
> 
> That seems to be the case:
> 
> # pwd
> /usr/ports/math/gmp
> # ldconfig -r | grep stdc
>         85:-lstdc++.6 => /usr/lib/libstdc++.so.6
>         251:-lstdc++.6 => /usr/local/lib/gcc44/libstdc++.so.6
> 
> Perhaps the order is wrong?

If `nm -D /usr/local/lib/gcc44/libstdc++.so.6 | grep GLIBCXX_3.4.11`
returns a hit then it most likely is. In that case I'm not sure how
the gcc ports are expected to be usable out-of-the-box though as
/etc/rc.d/ldconfig always adds /usr/lib before any local paths. The
only way I see then is to always set LD_LIBRARY_PATH to something
like "/usr/local/lib/gcc44 /lib /usr/lib /usr/local/lib" in the
environment. I think (but may be wrong) that there was also a way
to tell ld(1) to record the path to the library but that likely
wouldn't be usable with every port being built with a non-base gcc.

Marius



More information about the freebsd-sparc64 mailing list