Uninitialised memory detected by Valgrind after mpn_sec_tabselect on i686

Mike Crowe mac at mcrowe.com
Mon Jul 21 19:04:07 CEST 2025


I'm having some trouble with Valgrind reporting use of uninitialised memory
from code using gnutls on 32-bit x86 and I believe that I have narrowed the
problem down to the x86 asm version of mpn_sec_tabselect.

The problem goes away if I configure gmp with --disable-assembly.

If I insert VALGRIND_CHECK_MEM_IS_DEFINED(rp, n) immediately after the call
to mpn_sec_tabselect (rp, pp, n, 1 << windowsize, expbits) in mpn_sec_powm
(sec_powm.c:353) then I get:

==2458744== Uninitialised byte(s) found during client check request
==2458744==    at 0x56A86D7: __gmpn_sec_powm (sec_powm.c:353)
==2458744==    by 0x7AFDD07: rsa_sec_blind (rsa-sign-tr.c:201)
==2458744==    by 0x7AFDD07: _nettle_rsa_sec_compute_root_tr (rsa-sign-tr.c:336)
==2458744==    by 0x7AFE0DA: nettle_rsa_compute_root_tr (rsa-sign-tr.c:377)
==2458744==    by 0x7AFE70A: nettle_rsa_pkcs1_sign_tr (rsa-pkcs1-sign-tr.c:56)
==2458744==    by 0x5A35160: _wrap_nettle_pk_sign (pk.c:1616)
==2458744==    by 0x5998AB3: privkey_sign_and_hash_data (privkey.c:1344)
==2458744==    by 0x5998D96: gnutls_privkey_sign_data2 (privkey.c:1235)
==2458744==    by 0x59857DC: _gnutls_check_key_cert_match (cert-cred.c:1031)
==2458744==    by 0x5992476: gnutls_certificate_set_x509_key_mem2 (cert-cred-x509.c:678)
...
==2458744==  Address 0xa427374 is 4 bytes inside a block of size 512 alloc'd
==2458744==    at 0x4E11616: malloc (vg_replace_malloc.c:446)
==2458744==    by 0x56718EF: __gmp_default_allocate (memory.c:53)
==2458744==    by 0x7B02CEE: _nettle_gmp_alloc (gmp-glue.c:310)
==2458744==    by 0x7AFDB0A: _nettle_rsa_sec_compute_root_tr (rsa-sign-tr.c:332)
==2458744==    by 0x7AFE0DA: nettle_rsa_compute_root_tr (rsa-sign-tr.c:377)
==2458744==    by 0x7AFE70A: nettle_rsa_pkcs1_sign_tr (rsa-pkcs1-sign-tr.c:56)
==2458744==    by 0x5A35160: _wrap_nettle_pk_sign (pk.c:1616)
==2458744==    by 0x5998AB3: privkey_sign_and_hash_data (privkey.c:1344)
==2458744==    by 0x5998D96: gnutls_privkey_sign_data2 (privkey.c:1235)
==2458744==    by 0x59857DC: _gnutls_check_key_cert_match (cert-cred.c:1031)
==2458744==    by 0x5992476: gnutls_certificate_set_x509_key_mem2 (cert-cred-x509.c:678)
...
==2458744==  Uninitialised value was created by a heap allocation
==2458744==    at 0x4E11616: malloc (vg_replace_malloc.c:446)
==2458744==    by 0x56718EF: __gmp_default_allocate (memory.c:53)
==2458744==    by 0x7B02CEE: _nettle_gmp_alloc (gmp-glue.c:310)
==2458744==    by 0x7AFDB0A: _nettle_rsa_sec_compute_root_tr (rsa-sign-tr.c:332)
==2458744==    by 0x7AFE0DA: nettle_rsa_compute_root_tr (rsa-sign-tr.c:377)
==2458744==    by 0x7AFE70A: nettle_rsa_pkcs1_sign_tr (rsa-pkcs1-sign-tr.c:56)
==2458744==    by 0x5A35160: _wrap_nettle_pk_sign (pk.c:1616)
==2458744==    by 0x5998AB3: privkey_sign_and_hash_data (privkey.c:1344)
==2458744==    by 0x5998D96: gnutls_privkey_sign_data2 (privkey.c:1235)
==2458744==    by 0x59857DC: _gnutls_check_key_cert_match (cert-cred.c:1031)
==2458744==    by 0x5992476: gnutls_certificate_set_x509_key_mem2 (cert-cred-x509.c:678)

I believe that the following simple program, when built and run against gmp
6.3.0 or r18486:f1c983debf6c on Debian 12 configured with
--host=i686-my-linux might show the same problem:

--8<--
#include <gmp.h>
#include <stdio.h>

int main()
{
    mpz_t rop, base, exp, mod;
    mpz_init(rop);
    mpz_init(base);
    mpz_init(exp);
    mpz_init(mod);
    mpz_set_si(base, 10);
    mpz_set_si(exp, 63);
    mpz_set_si(mod, 65537);
    mpz_powm_sec(rop, base, exp, mod);
    mpz_out_str(stdout, 10, rop);
    putchar('\n');
    return 0;
}
-->8--
Makefile:
--8<--
GMP_INSTALL=$(HOME)/gmptest/
GMP_INCLUDE=$(GMP_INSTALL)include
GMP_LIB=$(GMP_INSTALL)lib

VALGRIND_OPTIONS:=\
        --tool=memcheck \
        --error-exitcode=42 \
        --track-fds=yes \

.PHONY: run
run: reproduce
        LD_LIBRARY_PATH=$(GMP_LIB) valgrind $(VALGRIND_OPTIONS) ./reproduce

reproduce: reproduce.c Makefile
        gcc -g -O2 -I$(GMP_INCLUDE) -L$(GMP_LIB) -o reproduce reproduce.c -lgmp

.PHONY: clean
clean:
        rm -f reproduce
-->8--

The valgrind 3.25.1 output from this program is:

==43680== Conditional jump or move depends on uninitialised value(s)
==43680==    at 0x487707B: __gmpz_powm_sec (powm_sec.c:88)
==43680==    by 0x4001124: main (reproduce.c:14)
==43680==
==43680== Conditional jump or move depends on uninitialised value(s)
==43680==    at 0x4887B6F: mpn_bc_get_str (get_str.c:239)
==43680==    by 0x4887F8B: __gmpn_get_str (get_str.c:430)
==43680==    by 0x4876300: __gmpz_out_str (out_str.c:93)
==43680==    by 0x4001137: main (reproduce.c:15)
==43680==
==43680== Conditional jump or move depends on uninitialised value(s)
==43680==    at 0x4887B9C: mpn_bc_get_str (get_str.c:239)
==43680==    by 0x4887F8B: __gmpn_get_str (get_str.c:430)
==43680==    by 0x4876300: __gmpz_out_str (out_str.c:93)
==43680==    by 0x4001137: main (reproduce.c:15)
==43680==
==43680== Use of uninitialised value of size 4
==43680==    at 0x487631E: __gmpz_out_str (out_str.c:97)
==43680==    by 0x4001137: main (reproduce.c:15)
==43680==

Debian 12's valgrind 3.19 also reports the same. If I insert the
same VALGRIND_CHECK_MEM_IS_DEFINED(rp, n) call immediately after the call
to mpn_sec_tabselect (rp, pp, n, 1 << windowsize, expbits) in mpn_sec_powm
(sec_powm.c:350) then I it fires:

==50688== Uninitialised byte(s) found during client check request
==50688==    at 0x48AB003: __gmpn_sec_powm (sec_powm.c:350)

I do not see this problem when using Debian 12's gmp-6.2.1.

GMP version number: gmp 6.3.0 or r18486:f1c983debf6c but not Debian gmp-6.2.1

Configure: CFLAGS="-O2 -g" STRIP= ./configure --host=i686-my-linux --prefix=/home/mac/gmptest
Build: make -j4 install STRIP=

Configure output:
--8<--
checking build system type... ivybridgenoavx-pc-linux-gnu
checking host system type... i686-my-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for i686-my-linux-strip... no
checking for strip... strip
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking ABI=32
checking compiler i686-my-linux-gcc -O2 -g ... no
checking compiler gcc -O2 -g ... yes
checking compiler gcc -O2 -g has sizeof(long)==4... yes
checking for i686-my-linux-gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed
checking whether gcc understands -c and -o together... yes
checking how to run the C preprocessor... gcc -E
checking build system compiler gcc... yes
checking for build system preprocessor... gcc -E
checking for build system executable suffix...
checking whether build system compiler is ANSI... yes
checking for build system compiler math library... -lm
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
using ABI="32"
      CC="gcc"
      CFLAGS="-O2 -g"
      CPPFLAGS=""
      MPN_PATH=" x86/p6 x86 generic"
checking whether assembler supports --noexecstack option... yes
checking for a sed that does not truncate output... /usr/bin/sed
checking for i686-my-linux-ar... no
checking for ar... ar
checking for BSD- or MS-compatible name lister (nm)... no
checking for i686-my-linux-dumpbin... no
checking for i686-my-linux-link... no
checking for dumpbin... no
checking for link... link -dump
checking the name lister (nm) interface... BSD nm
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... (cached) BSD nm
checking how to print strings... printf
checking for a sed that does not truncate output... (cached) /usr/bin/sed
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert ivybridgenoavx-pc-linux-gnu file names to i686-my-linux-gnu format... func_convert_file_noop
checking how to convert ivybridgenoavx-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for i686-my-linux-file... no
checking for file... file
checking for i686-my-linux-objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for i686-my-linux-dlltool... dlltool
checking how to associate runtime and link libraries... printf %s\n
checking for i686-my-linux-ar... ar
checking for archiver @FILE support... @
checking for i686-my-linux-strip... strip
checking for i686-my-linux-ranlib... no
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for i686-my-linux-mt... no
checking for mt... mt
checking if mt is a manifest tool... no
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking for fcntl.h... yes
checking for float.h... yes
checking for invent.h... no
checking for langinfo.h... yes
checking for locale.h... yes
checking for nl_types.h... yes
checking for sys/attributes.h... no
checking for sys/iograph.h... no
checking for sys/mman.h... yes
checking for sys/param.h... yes
checking for sys/processor.h... no
checking for sys/pstat.h... no
checking for sys/sysinfo.h... yes
checking for sys/syssgi.h... no
checking for sys/systemcfg.h... no
checking for sys/time.h... yes
checking for sys/times.h... yes
checking for sys/resource.h... yes
checking for sys/sysctl.h... no
checking for machine/hal_sysinfo.h... no
checking for gcc options needed to detect all undeclared functions... none needed
checking whether fgetc is declared... yes
checking whether fscanf is declared... yes
checking whether optarg is declared... yes
checking whether ungetc is declared... yes
checking whether vfprintf is declared... yes
checking whether sys_errlist is declared... no
checking whether sys_nerr is declared... no
checking for intmax_t... yes
checking for long double... yes
checking for long long... yes
checking for ptrdiff_t... yes
checking for quad_t... yes
checking for uint_least32_t... yes
checking for intptr_t... yes
checking for working volatile... yes
checking for C/C++ restrict keyword... __restrict__
checking whether gcc __attribute__ ((const)) works... yes
checking whether gcc __attribute__ ((malloc)) works... yes
checking whether gcc __attribute__ ((mode (XX))) works... yes
checking whether gcc __attribute__ ((noreturn)) works... yes
checking whether gcc hidden aliases work... yes
checking for inline... inline
checking for cos in -lm... yes
checking for working alloca.h... yes
checking for alloca (via gmp-impl.h)... yes
checking how to allocate temporary memory... alloca
checking whether byte ordering is bigendian... no
checking format of `double' floating point... IEEE little endian
checking for alarm... yes
checking for attr_get... no
checking for clock... yes
checking for cputime... no
checking for getpagesize... yes
checking for getrusage... yes
checking for gettimeofday... yes
checking for getsysinfo... no
checking for localeconv... yes
checking for memset... yes
checking for mmap... yes
checking for mprotect... yes
checking for nl_langinfo... yes
checking for obstack_vprintf... yes
checking for popen... yes
checking for processor_info... no
checking for pstat_getprocessor... no
checking for raise... yes
checking for read_real_time... no
checking for sigaction... yes
checking for sigaltstack... yes
checking for sigstack... yes
checking for syssgi... no
checking for strchr... yes
checking for strerror... yes
checking for strnlen... yes
checking for strtol... yes
checking for strtoul... yes
checking for sysconf... yes
checking for sysctl... no
checking for sysctlbyname... no
checking for times... yes
checking for library containing clock_gettime... none required
checking for vsnprintf... yes
checking whether vsnprintf works... yes
checking whether sscanf needs writable input... no
checking for struct pst_processor.psp_iticksperclktick... no
checking for suitable m4... m4
checking if m4wrap produces spurious output... no
checking how to switch to text section... .text
checking how to switch to data section... .data
checking for assembler label suffix... :
checking for assembler global directive... .globl
checking for assembler global directive attribute...
checking if globals are prefixed by underscore... no
checking how to switch to read-only data section... 	.section	.rodata
checking for assembler .type directive... .type	$1,@$2
checking for assembler .size directive... .size	$1,$2
checking for assembler local label prefix... .L
checking for assembler byte directive... .byte
checking how to define a 32-bit word... .long
checking if .align assembly directive is logarithmic... no
checking if the .align directive accepts an 0x90 fill in .text... yes
checking for assembler COFF type directives... no
checking if _GLOBAL_OFFSET_TABLE_ is prefixed by underscore... no
checking if the assembler takes cl with shldl... yes
checking size of void *... 4
checking size of unsigned short... 2
checking size of unsigned... 4
checking size of unsigned long... 4
checking size of mp_limb_t... 4
checking for stack_t... yes
checking for tputs in -lncurses... no
checking for tputs in -lcurses... no
checking for readline in -lreadline... no
checking readline detected... no
checking for bison... bison -y
checking for flex... flex
checking for lex output file root... lex.yy
checking for lex library... none needed
checking for library containing yywrap... -ll
checking whether yytext is a pointer... yes
creating config.m4
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating demos/pexpr-config.h
config.status: creating demos/calc/calc-config.h
config.status: creating Makefile
config.status: creating mpf/Makefile
config.status: creating mpn/Makefile
config.status: creating mpq/Makefile
config.status: creating mpz/Makefile
config.status: creating printf/Makefile
config.status: creating scanf/Makefile
config.status: creating rand/Makefile
config.status: creating cxx/Makefile
config.status: creating tests/Makefile
config.status: creating tests/devel/Makefile
config.status: creating tests/mpf/Makefile
config.status: creating tests/mpn/Makefile
config.status: creating tests/mpq/Makefile
config.status: creating tests/mpz/Makefile
config.status: creating tests/rand/Makefile
config.status: creating tests/misc/Makefile
config.status: creating tests/cxx/Makefile
config.status: creating doc/Makefile
config.status: creating tune/Makefile
config.status: creating demos/Makefile
config.status: creating demos/calc/Makefile
config.status: creating demos/expr/Makefile
config.status: creating gmp.h
config.status: creating gmp.pc
config.status: creating gmpxx.pc
config.status: creating config.h
config.status: config.h is unchanged
config.status: linking mpn/generic/add.c to mpn/add.c
config.status: linking mpn/generic/add_1.c to mpn/add_1.c
config.status: linking mpn/x86/p6/aors_n.asm to mpn/add_n.asm
config.status: linking mpn/generic/sub.c to mpn/sub.c
config.status: linking mpn/generic/sub_1.c to mpn/sub_1.c
config.status: linking mpn/x86/p6/aors_n.asm to mpn/sub_n.asm
config.status: linking mpn/x86/cnd_aors_n.asm to mpn/cnd_add_n.asm
config.status: linking mpn/x86/cnd_aors_n.asm to mpn/cnd_sub_n.asm
config.status: linking mpn/generic/cnd_swap.c to mpn/cnd_swap.c
config.status: linking mpn/generic/neg.c to mpn/neg.c
config.status: linking mpn/generic/com.c to mpn/com.c
config.status: linking mpn/x86/mul_1.asm to mpn/mul_1.asm
config.status: linking mpn/x86/p6/aorsmul_1.asm to mpn/addmul_1.asm
config.status: linking mpn/x86/p6/aorsmul_1.asm to mpn/submul_1.asm
config.status: linking mpn/generic/add_err1_n.c to mpn/add_err1_n.c
config.status: linking mpn/generic/add_err2_n.c to mpn/add_err2_n.c
config.status: linking mpn/generic/add_err3_n.c to mpn/add_err3_n.c
config.status: linking mpn/generic/sub_err1_n.c to mpn/sub_err1_n.c
config.status: linking mpn/generic/sub_err2_n.c to mpn/sub_err2_n.c
config.status: linking mpn/generic/sub_err3_n.c to mpn/sub_err3_n.c
config.status: linking mpn/x86/lshift.asm to mpn/lshift.asm
config.status: linking mpn/x86/rshift.asm to mpn/rshift.asm
config.status: linking mpn/x86/p6/dive_1.asm to mpn/dive_1.asm
config.status: linking mpn/generic/diveby3.c to mpn/diveby3.c
config.status: linking mpn/generic/divis.c to mpn/divis.c
config.status: linking mpn/generic/divrem.c to mpn/divrem.c
config.status: linking mpn/x86/divrem_1.asm to mpn/divrem_1.asm
config.status: linking mpn/x86/divrem_2.asm to mpn/divrem_2.asm
config.status: linking mpn/generic/fib2_ui.c to mpn/fib2_ui.c
config.status: linking mpn/generic/fib2m.c to mpn/fib2m.c
config.status: linking mpn/generic/mod_1.c to mpn/mod_1.c
config.status: linking mpn/x86/p6/mod_34lsub1.asm to mpn/mod_34lsub1.asm
config.status: linking mpn/x86/p6/mode1o.asm to mpn/mode1o.asm
config.status: linking mpn/generic/pre_divrem_1.c to mpn/pre_divrem_1.c
config.status: linking mpn/generic/pre_mod_1.c to mpn/pre_mod_1.c
config.status: linking mpn/generic/dump.c to mpn/dump.c
config.status: linking mpn/generic/mod_1_1.c to mpn/mod_1_1.c
config.status: linking mpn/generic/mod_1_2.c to mpn/mod_1_2.c
config.status: linking mpn/generic/mod_1_3.c to mpn/mod_1_3.c
config.status: linking mpn/generic/mod_1_4.c to mpn/mod_1_4.c
config.status: linking mpn/generic/lshiftc.c to mpn/lshiftc.c
config.status: linking mpn/generic/mul.c to mpn/mul.c
config.status: linking mpn/generic/mul_fft.c to mpn/mul_fft.c
config.status: linking mpn/generic/mul_n.c to mpn/mul_n.c
config.status: linking mpn/generic/sqr.c to mpn/sqr.c
config.status: linking mpn/x86/p6/mul_basecase.asm to mpn/mul_basecase.asm
config.status: linking mpn/x86/p6/sqr_basecase.asm to mpn/sqr_basecase.asm
config.status: linking mpn/generic/nussbaumer_mul.c to mpn/nussbaumer_mul.c
config.status: linking mpn/generic/mulmid_basecase.c to mpn/mulmid_basecase.c
config.status: linking mpn/generic/toom42_mulmid.c to mpn/toom42_mulmid.c
config.status: linking mpn/generic/mulmid_n.c to mpn/mulmid_n.c
config.status: linking mpn/generic/mulmid.c to mpn/mulmid.c
config.status: linking mpn/generic/random.c to mpn/random.c
config.status: linking mpn/generic/random2.c to mpn/random2.c
config.status: linking mpn/generic/pow_1.c to mpn/pow_1.c
config.status: linking mpn/generic/rootrem.c to mpn/rootrem.c
config.status: linking mpn/generic/sqrtrem.c to mpn/sqrtrem.c
config.status: linking mpn/generic/sizeinbase.c to mpn/sizeinbase.c
config.status: linking mpn/generic/get_str.c to mpn/get_str.c
config.status: linking mpn/generic/set_str.c to mpn/set_str.c
config.status: linking mpn/generic/compute_powtab.c to mpn/compute_powtab.c
config.status: linking mpn/generic/scan0.c to mpn/scan0.c
config.status: linking mpn/generic/scan1.c to mpn/scan1.c
config.status: linking mpn/generic/popham.c to mpn/popcount.c
config.status: linking mpn/generic/popham.c to mpn/hamdist.c
config.status: linking mpn/generic/cmp.c to mpn/cmp.c
config.status: linking mpn/generic/zero_p.c to mpn/zero_p.c
config.status: linking mpn/generic/perfsqr.c to mpn/perfsqr.c
config.status: linking mpn/generic/perfpow.c to mpn/perfpow.c
config.status: linking mpn/generic/strongfibo.c to mpn/strongfibo.c
config.status: linking mpn/x86/p6/gcd_11.asm to mpn/gcd_11.asm
config.status: linking mpn/generic/gcd_22.c to mpn/gcd_22.c
config.status: linking mpn/generic/gcd_1.c to mpn/gcd_1.c
config.status: linking mpn/generic/gcd.c to mpn/gcd.c
config.status: linking mpn/generic/gcdext_1.c to mpn/gcdext_1.c
config.status: linking mpn/generic/gcdext.c to mpn/gcdext.c
config.status: linking mpn/generic/gcd_subdiv_step.c to mpn/gcd_subdiv_step.c
config.status: linking mpn/generic/gcdext_lehmer.c to mpn/gcdext_lehmer.c
config.status: linking mpn/generic/div_q.c to mpn/div_q.c
config.status: linking mpn/generic/tdiv_qr.c to mpn/tdiv_qr.c
config.status: linking mpn/generic/jacbase.c to mpn/jacbase.c
config.status: linking mpn/generic/jacobi_2.c to mpn/jacobi_2.c
config.status: linking mpn/generic/jacobi.c to mpn/jacobi.c
config.status: linking mpn/generic/get_d.c to mpn/get_d.c
config.status: linking mpn/generic/matrix22_mul.c to mpn/matrix22_mul.c
config.status: linking mpn/generic/matrix22_mul1_inverse_vector.c to mpn/matrix22_mul1_inverse_vector.c
config.status: linking mpn/generic/hgcd_matrix.c to mpn/hgcd_matrix.c
config.status: linking mpn/generic/hgcd2.c to mpn/hgcd2.c
config.status: linking mpn/generic/hgcd_step.c to mpn/hgcd_step.c
config.status: linking mpn/generic/hgcd_reduce.c to mpn/hgcd_reduce.c
config.status: linking mpn/generic/hgcd.c to mpn/hgcd.c
config.status: linking mpn/generic/hgcd_appr.c to mpn/hgcd_appr.c
config.status: linking mpn/generic/hgcd2_jacobi.c to mpn/hgcd2_jacobi.c
config.status: linking mpn/generic/hgcd_jacobi.c to mpn/hgcd_jacobi.c
config.status: linking mpn/generic/mullo_n.c to mpn/mullo_n.c
config.status: linking mpn/generic/mullo_basecase.c to mpn/mullo_basecase.c
config.status: linking mpn/generic/sqrlo.c to mpn/sqrlo.c
config.status: linking mpn/generic/sqrlo_basecase.c to mpn/sqrlo_basecase.c
config.status: linking mpn/generic/toom22_mul.c to mpn/toom22_mul.c
config.status: linking mpn/generic/toom32_mul.c to mpn/toom32_mul.c
config.status: linking mpn/generic/toom42_mul.c to mpn/toom42_mul.c
config.status: linking mpn/generic/toom52_mul.c to mpn/toom52_mul.c
config.status: linking mpn/generic/toom62_mul.c to mpn/toom62_mul.c
config.status: linking mpn/generic/toom33_mul.c to mpn/toom33_mul.c
config.status: linking mpn/generic/toom43_mul.c to mpn/toom43_mul.c
config.status: linking mpn/generic/toom53_mul.c to mpn/toom53_mul.c
config.status: linking mpn/generic/toom54_mul.c to mpn/toom54_mul.c
config.status: linking mpn/generic/toom63_mul.c to mpn/toom63_mul.c
config.status: linking mpn/generic/toom44_mul.c to mpn/toom44_mul.c
config.status: linking mpn/generic/toom6h_mul.c to mpn/toom6h_mul.c
config.status: linking mpn/generic/toom6_sqr.c to mpn/toom6_sqr.c
config.status: linking mpn/generic/toom8h_mul.c to mpn/toom8h_mul.c
config.status: linking mpn/generic/toom8_sqr.c to mpn/toom8_sqr.c
config.status: linking mpn/generic/toom_couple_handling.c to mpn/toom_couple_handling.c
config.status: linking mpn/generic/toom2_sqr.c to mpn/toom2_sqr.c
config.status: linking mpn/generic/toom3_sqr.c to mpn/toom3_sqr.c
config.status: linking mpn/generic/toom4_sqr.c to mpn/toom4_sqr.c
config.status: linking mpn/generic/toom_eval_dgr3_pm1.c to mpn/toom_eval_dgr3_pm1.c
config.status: linking mpn/generic/toom_eval_dgr3_pm2.c to mpn/toom_eval_dgr3_pm2.c
config.status: linking mpn/generic/toom_eval_pm1.c to mpn/toom_eval_pm1.c
config.status: linking mpn/generic/toom_eval_pm2.c to mpn/toom_eval_pm2.c
config.status: linking mpn/generic/toom_eval_pm2exp.c to mpn/toom_eval_pm2exp.c
config.status: linking mpn/generic/toom_eval_pm2rexp.c to mpn/toom_eval_pm2rexp.c
config.status: linking mpn/generic/toom_interpolate_5pts.c to mpn/toom_interpolate_5pts.c
config.status: linking mpn/generic/toom_interpolate_6pts.c to mpn/toom_interpolate_6pts.c
config.status: linking mpn/generic/toom_interpolate_7pts.c to mpn/toom_interpolate_7pts.c
config.status: linking mpn/generic/toom_interpolate_8pts.c to mpn/toom_interpolate_8pts.c
config.status: linking mpn/generic/toom_interpolate_12pts.c to mpn/toom_interpolate_12pts.c
config.status: linking mpn/generic/toom_interpolate_16pts.c to mpn/toom_interpolate_16pts.c
config.status: linking mpn/generic/invertappr.c to mpn/invertappr.c
config.status: linking mpn/generic/invert.c to mpn/invert.c
config.status: linking mpn/generic/binvert.c to mpn/binvert.c
config.status: linking mpn/generic/mulmod_bnm1.c to mpn/mulmod_bnm1.c
config.status: linking mpn/generic/sqrmod_bnm1.c to mpn/sqrmod_bnm1.c
config.status: linking mpn/generic/mulmod_bknp1.c to mpn/mulmod_bknp1.c
config.status: linking mpn/generic/div_qr_1.c to mpn/div_qr_1.c
config.status: linking mpn/generic/div_qr_1n_pi1.c to mpn/div_qr_1n_pi1.c
config.status: linking mpn/generic/div_qr_2.c to mpn/div_qr_2.c
config.status: linking mpn/generic/div_qr_2n_pi1.c to mpn/div_qr_2n_pi1.c
config.status: linking mpn/generic/div_qr_2u_pi1.c to mpn/div_qr_2u_pi1.c
config.status: linking mpn/generic/sbpi1_div_q.c to mpn/sbpi1_div_q.c
config.status: linking mpn/generic/sbpi1_div_qr.c to mpn/sbpi1_div_qr.c
config.status: linking mpn/generic/sbpi1_divappr_q.c to mpn/sbpi1_divappr_q.c
config.status: linking mpn/generic/dcpi1_div_q.c to mpn/dcpi1_div_q.c
config.status: linking mpn/generic/dcpi1_div_qr.c to mpn/dcpi1_div_qr.c
config.status: linking mpn/generic/dcpi1_divappr_q.c to mpn/dcpi1_divappr_q.c
config.status: linking mpn/generic/mu_div_qr.c to mpn/mu_div_qr.c
config.status: linking mpn/generic/mu_divappr_q.c to mpn/mu_divappr_q.c
config.status: linking mpn/generic/mu_div_q.c to mpn/mu_div_q.c
config.status: linking mpn/x86/p6/bdiv_q_1.asm to mpn/bdiv_q_1.asm
config.status: linking mpn/generic/sbpi1_bdiv_q.c to mpn/sbpi1_bdiv_q.c
config.status: linking mpn/generic/sbpi1_bdiv_qr.c to mpn/sbpi1_bdiv_qr.c
config.status: linking mpn/generic/sbpi1_bdiv_r.c to mpn/sbpi1_bdiv_r.c
config.status: linking mpn/generic/dcpi1_bdiv_q.c to mpn/dcpi1_bdiv_q.c
config.status: linking mpn/generic/dcpi1_bdiv_qr.c to mpn/dcpi1_bdiv_qr.c
config.status: linking mpn/generic/mu_bdiv_q.c to mpn/mu_bdiv_q.c
config.status: linking mpn/generic/mu_bdiv_qr.c to mpn/mu_bdiv_qr.c
config.status: linking mpn/generic/bdiv_q.c to mpn/bdiv_q.c
config.status: linking mpn/generic/bdiv_qr.c to mpn/bdiv_qr.c
config.status: linking mpn/generic/broot.c to mpn/broot.c
config.status: linking mpn/generic/brootinv.c to mpn/brootinv.c
config.status: linking mpn/generic/bsqrt.c to mpn/bsqrt.c
config.status: linking mpn/generic/bsqrtinv.c to mpn/bsqrtinv.c
config.status: linking mpn/generic/divexact.c to mpn/divexact.c
config.status: linking mpn/x86/bdiv_dbm1c.asm to mpn/bdiv_dbm1c.asm
config.status: linking mpn/generic/redc_1.c to mpn/redc_1.c
config.status: linking mpn/generic/redc_2.c to mpn/redc_2.c
config.status: linking mpn/generic/redc_n.c to mpn/redc_n.c
config.status: linking mpn/generic/powm.c to mpn/powm.c
config.status: linking mpn/generic/powlo.c to mpn/powlo.c
config.status: linking mpn/generic/sec_powm.c to mpn/sec_powm.c
config.status: linking mpn/generic/sec_mul.c to mpn/sec_mul.c
config.status: linking mpn/generic/sec_sqr.c to mpn/sec_sqr.c
config.status: linking mpn/generic/sec_div.c to mpn/sec_div_qr.c
config.status: linking mpn/generic/sec_div.c to mpn/sec_div_r.c
config.status: linking mpn/generic/sec_pi1_div.c to mpn/sec_pi1_div_qr.c
config.status: linking mpn/generic/sec_pi1_div.c to mpn/sec_pi1_div_r.c
config.status: linking mpn/generic/sec_aors_1.c to mpn/sec_add_1.c
config.status: linking mpn/generic/sec_aors_1.c to mpn/sec_sub_1.c
config.status: linking mpn/generic/sec_invert.c to mpn/sec_invert.c
config.status: linking mpn/generic/trialdiv.c to mpn/trialdiv.c
config.status: linking mpn/generic/remove.c to mpn/remove.c
config.status: linking mpn/generic/logops_n.c to mpn/and_n.c
config.status: linking mpn/generic/logops_n.c to mpn/andn_n.c
config.status: linking mpn/generic/logops_n.c to mpn/nand_n.c
config.status: linking mpn/generic/logops_n.c to mpn/ior_n.c
config.status: linking mpn/generic/logops_n.c to mpn/iorn_n.c
config.status: linking mpn/generic/logops_n.c to mpn/nior_n.c
config.status: linking mpn/generic/logops_n.c to mpn/xor_n.c
config.status: linking mpn/generic/logops_n.c to mpn/xnor_n.c
config.status: linking mpn/x86/copyi.asm to mpn/copyi.asm
config.status: linking mpn/x86/p6/copyd.asm to mpn/copyd.asm
config.status: linking mpn/generic/zero.c to mpn/zero.c
config.status: linking mpn/x86/sec_tabselect.asm to mpn/sec_tabselect.asm
config.status: linking mpn/generic/comb_tables.c to mpn/comb_tables.c
config.status: linking mpn/x86/umul.asm to mpn/umul.asm
config.status: linking mpn/x86/udiv.asm to mpn/udiv.asm
config.status: linking mpn/generic/add_n_sub_n.c to mpn/add_n_sub_n.c
config.status: linking mpn/x86/p6/gmp-mparam.h to gmp-mparam.h
config.status: executing libtool commands
configure: summary of build options:

  Version:           GNU MP 6.3.0
  Host type:         i686-my-linux-gnu
  ABI:               32
  Install prefix:    /home/mac/gmptest
  Compiler:          gcc
  Static libraries:  yes
  Shared libraries:  yes
-->8--

gcc -v:
--8<--
Using built-in specs.
COLLECT_GCC=/usr/bin/gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/12/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 12.2.0-14+deb12u1' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12 --program-prefix=i686-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-targets=all --enable-multiarch --disable-werror --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.2.0 (Debian 12.2.0-14+deb12u1)
-->8--

uname -a: Linux repton 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 GNU/Linux
./config.guess: ivybridgenoavx-pc-linux-gnu
./configfsf.guess: i686-pc-linux-gnu

Thanks.

Mike.


More information about the gmp-bugs mailing list