Test t-tdiv aborts (6.0.0a)

Ludwig, Mark ludwig.mark at siemens.com
Thu Mar 26 16:09:48 UTC 2015


> On Thursday, March 26, 2015 5:49 AM, Torbjörn wrote:
> 
> "Ludwig, Mark" <ludwig.mark at siemens.com> writes:
> 
>   Greetings,
> 
>   I am working to bootstrap GCC on Solaris, and having trouble with GMP 6.0.0a.
> 
>   The failure is in check-TESTS in directory mpz:
> 
>   bash: line 5: 17152 Segmentation Fault      (core dumped) ${dir}$tst
>   FAIL: t-tdiv
> 
>   Traceback from dbx:
> 
>   > dbx t-tdiv core
>   program terminated by signal SEGV (no mapping at the fault address) (fault
> address is just beyond end of stack)
>   0x0001b620: __gmpn_mul+0x0228:  ld       [%l6], %i3
>   (dbx) t
>   =>[1] __gmpn_mul(0xffbfad98, 0xffbfb308, 0x8e7, 0x0, 0xfffffa11, 0xffffe844),
> at 0x1b620
>     [2] __gmpn_dcpi1_divappr_q(0x1, 0xffbfe284, 0xffbfbee8, 0xffbfb308,
> 0xffbfb308, 0xffbfcc78), at 0x38dd4
>     [3] __gmpn_div_q(0xffffffff, 0x10ddc4, 0x0, 0xffbfb308, 0x1ff, 0xffffffff), at
> 0x209d0
>     [4] __gmpz_tdiv_q(0xffbfef44, 0xffbfef74, 0x10000, 0x9b35c, 0x83a14,
> 0x2f7), at 0x1841c
>     [5] main(0xffbfef68, 0xffbfef74, 0xffbfef50, 0xace4, 0xffbfef5c, 0xffbfef80),
> at 0x13260
>   (dbx)
> 
>   Configured with:
> 
>   CC=cc CXX=CC ./configure --enable-cxx --build=sparc-sun-solaris2.10
> 
>   > cc -V
>   cc: Sun C 5.12 SunOS_sparc 2011/11/16
>   > uname -a
>   SunOS myhost 5.10 Generic_Virtual sun4v sparc sun4v
>   > ./config.guess
>   ultrasparc-sun-solaris2.10
>   > ./configfsf.guess
>   sparc-sun-solaris2.10
> 
>   Note that I am explicitly using the 32-bit form, because the GCC bootstrap
>   recommendation is to use 32-bit.
> 
> Did you pass ABI=32 somehow, but forgot to show it above?  Using the
> --build argument in the hope that it will restrict the ABI choices is
> not supported.
> 
> I have no idea if that is related to the present problem.

I was not aware I needed to be explicit about the ABI.  It
was reported in the configure output, and I thought that was
sufficient.  I thought by choosing "sparc-sun-solaris2.10"
and not "sparc64-sun-solaris2.10," I was being explicit
about it, actually, but then I know that the Solaris Studio
compiler defaults to 32-bit.  I imagine you are more
familiar with GCC, and I wonder if it would default to
64-bit.  Anyway, the bug reporting guidelines did not
specify to include any of the configure output, but I
imagine this section is what you would find interesting:

using ABI="32"
      CC="cc -D_STDC_C99="
      CFLAGS=" -xO4 -xchip=generic"
      CPPFLAGS=""
      CXX="CC"
      CXXFLAGS=" -xO4 -xchip=generic"
      MPN_PATH=" sparc32 generic"

Now, configuring with:

CC=cc CXX=CC ./configure --enable-cxx --build=sparc-sun-solaris2.10 CFLAGS=-xO3 ABI=32 

It reports:

using ABI="32"
      CC="cc -D_STDC_C99="
      CFLAGS="-xO3"
      CPPFLAGS=""
      CXX="CC"
      CXXFLAGS="-xO3"
      MPN_PATH=" sparc32 generic"

>   I sort of assume this is exposing a subtle compiler bug, but need help working
>   around it or whatever.  Since all I want to do is bootstrap GCC with this (not
>   use it for any general computations), I suppose it's possible I can ignore this
>   particular failure, but I have no idea which parts of GMP get exercised in GCC
>   under what conditions.  Once I get GCC bootstrapped, I intend to rebuild GMP
>   using the bootstrapped GCC, because I have the impression that will generate a
>   64-bit version of GCC, which is what I want, ultimately.
> 
> This is what I'll do:
> 
> 1. Try to find an older gcc, use that.
> 2. Try "configure ABI=32 && make && make check" and see if that works
> 3. Pass explicit CFLAGS.  Start with the value GMP figures out (see
>    perhaps 30 lines down the "configure" output) and change them to see
>    if you can avoid the compiler bug.  Changing -O2 to -O1 might be an
>    initial attempt.

As noted above, it was defaulting to level 4 optimization.
I knocked it down to level 3, and, while it's still running,
it's past the t-tdiv check, which passed.

I started my career in the numerical computing world, where
optimization both matters for performance and has been known
to cause problems (such as this, apparently).  Sorry I
didn't think to crank down the optimization.  (I also have
no idea what the -xchip=generic option does, so for all I
know, removing that would have solved this too....)

Anyway, I'm past this problem.

Thanks!

BTW, to get here, I had to hack the configure script to make
it properly detect problems when it checked things.
Specifically, it fails to detect that __attribute__ ((mode
(XX))) does not work with the Solaris Studio compiler, and
this caused a warning in almost every compilation.  I don't
like warnings, so I fixed configure.  I will post that
change as a separate bug, after I've successfully
boot-strapped GCC.

Cheers,
Mark

> 4. Cross compile from a known-good compiler.
> 
> --
> Torbjörn
> Please encrypt, key id 0xC8601622


More information about the gmp-bugs mailing list