Compiling for ARMv8-A Using GCC 7.2.0 - Assertion error in gen-fac

Damm, Stephen Stephen_Damm at
Thu Dec 5 15:58:33 UTC 2019


I am trying to build GMP 6.1.2 for ARMv8-A Thunderx2t99 (AARCH64) CPU on RHEL7.4.

I can build BINUTILS 2.29.1, GMP 6.1.2, and CC 7.2.0 using the system GCC 4.8.5.  No errors, GMP passes its `make check` tests.  The gen-fac program works.

Next I use my GCC 7.2.0 to build everything again.  GMP fails with an assertion error before it gets very far into its build process.

During the GMP build process it builds a few programs, "gen-fac" being one of them.   This is the exact command the Makefile executes:
"custom_toolchain/bin/gcc -v `test -f 'gen-fac.c' || echo './'`gen-fac.c -o gen-fac"

It then tries to execute: "./gen-fac 64 0" which hits an assertion error if built using my GCC 7.2.0:
gen-fac: mini-gmp/mini-gmp.c:1207: mpn_limb_size_in_base_2: Assertion `u > 0' failed.
/bin/sh: line 1:  9766 Aborted                 (core dumped) ./gen-fac 64 0 > fac_table.h

It is dying due to an assertion in mpn_limb_size_in_base_2.  In this case `u` is exactly 0.

I was able to narrow down the cause.  In GC 7.2.0 the GMP_LLIMB_MASK is wrong:

=GCC 4.8.5=

=GCC 7.2.0=

>From my understanding this might be a difference in how GCC 7.2.0 handles unsigned longs vs GCC 4.8.5.  It also could be I am missing some vital compiler flag for GMP.

Any ideas?

Stephen Damm

More information about the gmp-bugs mailing list