diff --git a/.travis.yml b/.travis.yml index a269c4e..64ab75c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -163,6 +163,10 @@ matrix: packages: - clang-4.0 + # Link time optimization + - env: SANITIZER=1 COMPILE_LTO=1 BUILDOPTIONS='--with-cc=gcc-5 --with-m64 --with-travis-valgrind' + - env: SANITIZER=1 COMPILE_LTO=1 BUILDOPTIONS='--with-cc=clang-7 --with-m64 --with-travis-valgrind' + # GCC for the x86-64 architecture with restricted limb sizes # formerly started with the option "--with-low-mp" to testme.sh # but testing all three in one run took to long and timed out. diff --git a/demo/shared.c b/demo/shared.c index 5ada460..7ef4756 100644 --- a/demo/shared.c +++ b/demo/shared.c @@ -3,7 +3,7 @@ void ndraw(const mp_int *a, const char *name) { char *buf; - size_t size; + size_t size = 0; mp_err err; if ((err = mp_radix_size(a, 10, &size)) != MP_OKAY) { diff --git a/makefile b/makefile index 4045390..a04cd4d 100644 --- a/makefile +++ b/makefile @@ -77,7 +77,7 @@ profiled_single: pre_gen rm -f *.o timing $(CC) $(LTM_CFLAGS) -fbranch-probabilities -c pre_gen/tommath_amalgam.c -o tommath_amalgam.o $(AR) $(ARFLAGS) $(LIBNAME) tommath_amalgam.o - ranlib $(LIBNAME) + $(RANLIB) $(LIBNAME) install: $(LIBNAME) install -d $(DESTDIR)$(LIBPATH) diff --git a/makefile_include.mk b/makefile_include.mk index 4b5961c..aebbc8f 100644 --- a/makefile_include.mk +++ b/makefile_include.mk @@ -86,6 +86,12 @@ LTM_CFLAGS += -O3 -funroll-loops LTM_CFLAGS += -fomit-frame-pointer endif +ifdef COMPILE_LTO +LTM_CFLAGS += -flto +AR = $(subst clang,llvm-ar,$(subst gcc,gcc-ar,$(CC))) +RANLIB = $(subst clang,llvm-ranlib,$(subst gcc,gcc-ranlib,$(CC))) +endif + endif # COMPILE_SIZE ifneq ($(findstring clang,$(CC)),) diff --git a/testme.sh b/testme.sh index 6c71ac4..1a03f55 100755 --- a/testme.sh +++ b/testme.sh @@ -107,7 +107,7 @@ _make() { echo -ne " Compile $1 $2" suffix=$(echo ${1}${2} | tr ' ' '_') - CC="$1" CFLAGS="$2 $TEST_CFLAGS" make -j$MAKE_JOBS $3 $MAKE_OPTIONS > /dev/null 2>gcc_errors_${suffix}.log + CC="$1" CFLAGS="$2 $TEST_CFLAGS" make -j$MAKE_JOBS $3 $MAKE_OPTIONS 2>gcc_errors_${suffix}.log errcnt=$(wc -l < gcc_errors_${suffix}.log) if [[ ${errcnt} -gt 1 ]]; then echo " failed" @@ -354,7 +354,7 @@ _banner if [[ "$TEST_VS_MTEST" != "" ]] then make clean > /dev/null - _make "${compilers[0]} ${archflags[0]}" "$CFLAGS" "mtest_opponent" + _make "${compilers[0]}" "${archflags[0]} $CFLAGS" "mtest_opponent" echo _make "gcc" "$MTEST_RAND" "mtest" echo @@ -394,15 +394,15 @@ do fi if [[ "$VALGRIND_BIN" != "" ]] then - _runvalgrind "$i $a" "$CFLAGS" + _runvalgrind "$i" "$a $CFLAGS" [ "$WITH_LOW_MP" != "1" ] && continue - _runvalgrind "$i $a" "-DMP_16BIT $CFLAGS" - _runvalgrind "$i $a" "-DMP_32BIT $CFLAGS" + _runvalgrind "$i" "$a -DMP_16BIT $CFLAGS" + _runvalgrind "$i" "$a -DMP_32BIT $CFLAGS" else - _runtest "$i $a" "$CFLAGS" + _runtest "$i" "$a $CFLAGS" [ "$WITH_LOW_MP" != "1" ] && continue - _runtest "$i $a" "-DMP_16BIT $CFLAGS" - _runtest "$i $a" "-DMP_32BIT $CFLAGS" + _runtest "$i" "$a -DMP_16BIT $CFLAGS" + _runtest "$i" "$a -DMP_32BIT $CFLAGS" fi done done