On 7/28/19 6:44 AM, Vincent Lefevre wrote: > On 2019-07-28 06:12:06 -0400, Dennis Clarke wrote: >> configure:6813: ./a.out || ./b.out || ./a.exe || ./a_out.exe || ./conftest >> Abort trap (core dumped) > > I don't know in your case, but I fear that this program is buggy. > > [...] >> void >> lshift_com (rp, up, n, cnt) >> unsigned long *rp; >> unsigned long *up; >> long n; >> unsigned cnt; > > It uses the old pre-ANSI K&R function definition, and AFAIK, in > this case, there is no notion of prototype, i.e. it is expected > that the caller passes compatible types as the compiler will not > be able to do type conversion. Note that the 4th parameter, cnt, > is of type unsigned int. > >> { >> unsigned long high_limb, low_limb; >> unsigned tnc; >> long i; >> up += n; >> rp += n; >> tnc = 8 * sizeof (unsigned long) - cnt; >> low_limb = *--up; >> high_limb = low_limb << cnt; >> for (i = n - 1; i != 0; i--) >> { >> low_limb = *--up; >> *--rp = ~(high_limb | (low_limb >> tnc)); >> high_limb = low_limb << cnt; >> } >> *--rp = ~high_limb; >> } >> int >> main () >> { >> unsigned long *r, *r2; >> unsigned long a[88 + 1]; >> long i; >> for (i = 0; i < 88 + 1; i++) >> a[i] = ~0L; >> r = malloc (10000 * sizeof (unsigned long)); >> r2 = r; >> for (i = 0; i < 528; i += 23) >> { >> lshift_com (r2, a, >> i / (8 * sizeof (unsigned long)) + 1, >> i % (8 * sizeof (unsigned long))); > > Here the 4th argument is of type >= long since i is of type long. > With calling via registers, this may not be an issue (here, the > value would be correct), but if the data are passed on the stack, > this will probably not work. > >> r2 += 88 + 1; >> } >> if (r[2048] != 0 || r[2049] != 0 || r[2050] != 0 || r[2051] != 0 || >> r[2052] != 0 || r[2053] != 0 || r[2054] != 0) >> abort (); >> free (r); >> return 0; >> } > [...] > > If you want an example about K&R function definition issues, > consider > > foo (a) > { > } > > main () > { > foo (1, 2); > return 0; > } > > With GCC, this builds without any error. >
I have to figure out how libgmp was built by the ports process on FreeBSD for this system because : hydra$ hydra$ echo $CC /usr/bin/gcc hydra$ echo $CPPFLAGS -D_TS_ERRNO -D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE hydra$ hydra$ CFLAGS='-m64 -g -fno-builtin -O0 -mcpu=970 -mno-altivec -mfull-toc -mregnames -fno-unsafe-math-optimizations' ; export CFLAGS hydra$ hydra$ $CC $CFLAGS $CPPFLAGS -I/usr/local/include -c -o f.o f.c hydra$ $CC $CFLAGS $CPPFLAGS -Wl,-rpath=/usr/local/lib -L/usr/local/lib -o f f.o -lgmp -lm hydra$ hydra$ file f f: ELF 64-bit MSB executable, 64-bit PowerPC or cisco 7500, Unspecified or Power ELF V1 ABI, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, FreeBSD-style, for FreeBSD 13.0 (1300036), with debug_info, not stripped hydra$ hydra$ ldd f f: libgmp.so.10 => /usr/local/lib/libgmp.so.10 (0x810066000) libm.so.5 => /lib/libm.so.5 (0x810102000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x810148000) libc.so.7 => /lib/libc.so.7 (0x81016c000) hydra$ hydra$ hydra$ ./f 4 ------------------------------------------------------------- system name = FreeBSD node name = hydra release = 13.0-CURRENT version = FreeBSD 13.0-CURRENT r350103 GENERIC machine = powerpc ------------------------------------------------------------- n approx time in nanosecs ---------+---------------------------- 10000 29219391 nsec 20000 114556192 nsec 30000 265402902 nsec 40000 484338149 nsec -------------------------------------- hydra$ hydra$ hydra$ $CC $CFLAGS $CPPFLAGS -I/usr/local/include -c -o mpfr_gmp_version.o mpfr_gmp_version.c hydra$ $CC $CFLAGS $CPPFLAGS -Wl,-rpath=/usr/local/lib -L/usr/local/lib -o mpfr_gmp_version mpfr_gmp_version.o -lgmp -lmpfr hydra$ hydra$ ldd mpfr_gmp_version mpfr_gmp_version: libgmp.so.10 => /usr/local/lib/libgmp.so.10 (0x810066000) libmpfr.so.6 => /usr/local/lib/libmpfr.so.6 (0x810102000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x81019f000) libc.so.7 => /lib/libc.so.7 (0x8101c3000) hydra$ hydra$ ./mpfr_gmp_version Compiler: GCC 4.2.1 20070831 patched [FreeBSD] C/C++: __STDC__ = 1, __STDC_VERSION__ = undef GNU compatibility: __GNUC__ = 4, __GNUC_MINOR__ = 2 GMP ..... Library: 6.1.2 Header: 6.1.2 MPFR .... Library: 4.0.2 Header: 4.0.2 (based on 4.0.2) MPFR features: TLS = yes, float128 = no, decimal = no, GMP internals = no MPFR tuning: src/powerpc32/mparam.h MPFR patches: [none] __GMP_CC = "cc -std=gnu99" __GMP_CFLAGS = "-O2 -pipe -fstack-protector-strong -fno-strict-aliasing " GMP_LIMB_BITS = 64 GMP_NAIL_BITS = 0 GMP_NUMB_BITS = 64 mp_bits_per_limb = 64 sizeof(mp_limb_t) = 8 The GMP library expects 64 bits in a mp_limb_t. sizeof(mpfr_prec_t) = 8 (signed type) sizeof(mpfr_exp_t) = 8 (signed type) _MPFR_PREC_FORMAT = 3 MPFR_PREC_MIN = 1 (signed) MPFR_PREC_MAX = 9223372036854775551 (signed) _MPFR_EXP_FORMAT = 3 sizeof(mpfr_t) = 32 sizeof(mpfr_ptr) = 8 hydra$ So this machine built the ports release package of libgmp just fine and it works with those CFLAGS and that compiler. hydra$ hydra$ pwd /opt/bw/build/gmp-6.1.2_FreeBSD_13.0-CURRENT_r350103_ppc64.001 hydra$ ./configure ABI=mode64 --enable-cxx --prefix=/opt/bw 2>&1 | tee ../gmp-6.1.2_FreeBSD_13.0-CURRENT_r350103_ppc64.001.config.log2 checking build system type... powerpc64-unknown-freebsd13.0 checking host system type... powerpc64-unknown-freebsd13.0 checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... ./install-sh -c -d 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=mode64 checking compiler /usr/bin/gcc -m64 -g -fno-builtin -O0 -mcpu=970 -mno-altivec -mfull-toc -mregnames -fno-unsafe-math-optimizations -D_TS_ERRNO -D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE... no, mpn_lshift_com optimization 2, program does not run configure: error: could not find a working compiler, see config.log for details hydra$ hydra$ /usr/bin/gcc --version gcc (GCC) 4.2.1 20070831 patched [FreeBSD] Copyright (C) 2007 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. hydra$ So I will dig around and see what is going on as I like to have debug versions of these libs around so I can single step if desired. -- Dennis Clarke RISC-V/SPARC/PPC/ARM/CISC UNIX and Linux spoken GreyBeard and suspenders optional _______________________________________________ gmp-bugs mailing list gmp-bugs@gmplib.org https://gmplib.org/mailman/listinfo/gmp-bugs