mirror of https://gerrit.osmocom.org/libosmocore
52 lines
2.2 KiB
Plaintext
52 lines
2.2 KiB
Plaintext
# OS#4062 (https://osmocom.org/issues/4062)
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81142
|
|
# SYS#4628
|
|
|
|
# Check if We need to apply workaround for TLS bug on ARM platform for GCC < 7.3.0.
|
|
# TLS_GCC_ARM_BUG_CFLAGS is filled with required workaround bits if needed.
|
|
|
|
AC_DEFUN([CHECK_TLS_GCC_ARM_BUG], [
|
|
TLS_GCC_ARM_BUG_CFLAGS=""
|
|
AC_MSG_CHECKING([whether to workaround TLS bug in old gcc on ARM platforms])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
|
[[
|
|
#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
|
|
/* Check for ARM 32 bit and gcc smaller than 7.3.0 */
|
|
/* We need to explicitly exclude GNUC compatible compilers, since they also define GNUC related tokens */
|
|
#if __arm__ && \
|
|
!defined(__clang__) && !defined(__llvm__) && !defined(__INTEL_COMPILER) && \
|
|
defined(__GNUC__) && GCC_VERSION < 70300
|
|
#error TLS bug present!
|
|
#endif
|
|
]])],
|
|
[tls_bug_present=no],
|
|
[tls_bug_present=yes])
|
|
AS_IF([test "x$tls_bug_present" = "xyes"],[
|
|
TLS_GCC_ARM_BUG_CFLAGS="-mtls-dialect=gnu2"
|
|
])
|
|
AC_SUBST([TLS_GCC_ARM_BUG_CFLAGS])
|
|
AC_MSG_RESULT([$TLS_GCC_ARM_BUG_CFLAGS])
|
|
])
|
|
|
|
# Allow disabling the check in order to workaround bug by letting user pass
|
|
# CFLAGS="-O0" on toolchains that crash when "-mtls-dialect=gnu2" is used.
|
|
# CFLAGS is updated with workaround if detection is enabled and workaround is needed.
|
|
AC_DEFUN([ARG_ENABLE_DETECT_TLS_GCC_ARM_BUG], [
|
|
AC_ARG_ENABLE(detect_tls_gcc_arm_bug,
|
|
[AS_HELP_STRING(
|
|
[--disable-detect-tls-gcc-arm-bug],
|
|
[Disable detecting and applying workaround for TLS bug on ARM platform for GCC < 7.3.0]
|
|
)],
|
|
[detect_tls_gcc_arm_bug=$enableval], [detect_tls_gcc_arm_bug="yes"])
|
|
if test x"$detect_tls_gcc_arm_bug" = x"yes"; then
|
|
CHECK_TLS_GCC_ARM_BUG
|
|
if test "x$TLS_GCC_ARM_BUG_CFLAGS" != "x"; then
|
|
CFLAGS="$CFLAGS $TLS_GCC_ARM_BUG_CFLAGS"
|
|
AC_MSG_WARN([Applying workaround for TLS bug on ARM platform for GCC < 7.3.0
|
|
($TLS_GCC_ARM_BUG_CFLAGS). On some toolchain versions, ld may
|
|
crash. In that case you must build with CFLAGS='-O0' and run
|
|
./configure with --disable-detect-tls-gcc-arm-bug])
|
|
fi
|
|
fi
|
|
])
|