This patch uses the libatomic IFUNC infrastructure so that aarch64
machines that support the LSE instructions can use them.  Note that
aarch64 still isn't enabling IFUNC support by default though I have
submitted a patch to do that.  You can enable IFUNC support by
configuring with --enable-gnu-indirect-function.

Glibc has an environment variable, LD_HWCAP_MASK, that can be used to
mask out some or all of the bits returned by getauxval(AT_HWCAP) and
ignore certain hardware capabilities.  I enabled this functionality
for libatomic by looking at the LD_HWCAP_MASK variable in the IFUNC
resolver function.  That way, if I had a system that supported LSE but
did not want to use it for some reason, I could set LD_HWCAP_MASK to
zero and then the IFUNC selector function would not enable the LSE
routines.  I could remove this functionality if we thought it was not
appropriate but I think it is useful, both for testing and for end
users.

Tested on aarch64, OK for checkin?

Steve Ellcey
sell...@cavium.com




2017-08-07  Steve Ellcey  <sell...@cavium.com>

        * Makefile.am (ARCH_AARCH64_LINUX_LSE): Add IFUNC_OPTIONS and
        libatomic_la_LIBADD.
        * config/linux/aarch64/host-config.h: New file.
        * config/linux/aarch64/init.c: New file.
        * configure.ac (AC_CHECK_HEADERS): Check for sys/auxv.h.
        (AC_CHECK_FUNCS): Check for getauxval.
        (ARCH_AARCH64_LINUX_LSE): New conditional for IFUNC builds.
        * configure.tgt (aarch64): Set AARCH and try_ifunc.
        (aarch64*-*-linux*) Update config_path.
        * Makefile.in: Regenerate.
        * auto-config.h.in: Regenerate.
        * configure: Regenerate.

Reply via email to