James, Here is a patch that will turn off the use of IFUNC and the LSE instructions in libatomic if the compiler/assembler toolchain do not understand the '-march=armv8-a+lse' option (changed from -march=armv8.1-a). Rather than check the assembler directly, I used the existing ACX_PROG_CC_WARNING_OPTS macro to test this. This will cause the GCC being built to send the option in question to the assembler and if the assembler complains that is enough to cause us to not set enable_aarch64_lse, and thus not set try_ifunc.
Steve Ellcey sell...@cavium.com 2017-12-07 Steve Ellcey <sell...@cavium.com> * Makefile.am (IFUNC_OPTIONS): Change aarch64 option from -march=armv8.1-a to -march=armv8-a+lse. * configure.ac (*aarch64*): Check to see if compiler understands -march=armv8-a+lse option. * configure.tgt (*aarch64*): Only set try_ifunc if compiler understands -march=armv8-a+lse option. * Makefile.in: Regenerate. * configure: Regenerate. * aclocal.m4: Regenerate.
diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am index ec36c8e..21fd1be 100644 --- a/libatomic/Makefile.am +++ b/libatomic/Makefile.am @@ -123,7 +123,7 @@ libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix _$(s)_.lo,$(SIZEOBJS))) ## On a target-specific basis, include alternates to be selected by IFUNC. if HAVE_IFUNC if ARCH_AARCH64_LINUX -IFUNC_OPTIONS = -march=armv8.1-a +IFUNC_OPTIONS = -march=armv8-a+lse libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS))) endif if ARCH_ARM_LINUX diff --git a/libatomic/configure.ac b/libatomic/configure.ac index 6b11f21..cee0198 100644 --- a/libatomic/configure.ac +++ b/libatomic/configure.ac @@ -157,6 +157,12 @@ AC_MSG_CHECKING([for thread model used by GCC]) target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'` AC_MSG_RESULT([$target_thread_file]) +case "$target" in + *aarch64*) + ACX_PROG_CC_WARNING_OPTS([-march=armv8-a+lse],[enable_aarch64_lse]) + ;; +esac + # Get target configury. . ${srcdir}/configure.tgt if test -n "$UNSUPPORTED"; then diff --git a/libatomic/configure.tgt b/libatomic/configure.tgt index 388ae95..2f3bcc9 100644 --- a/libatomic/configure.tgt +++ b/libatomic/configure.tgt @@ -44,7 +44,9 @@ case "${target_cpu}" in ARCH=aarch64 case "${target}" in aarch64*-*-linux*) - try_ifunc=yes + if test -n "$enable_aarch64_lse"; then + try_ifunc=yes + fi ;; esac ;;