summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2019-08-06 12:46:46 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2019-08-06 12:50:26 +0200
commitafce89dac1a3cdb975da72020acdba16940fd679 (patch)
treeb018fbf0d2d753179415bcb052c4a32c7dc21330
parente188b8cd98f599468fbb200c7d590de955daf761 (diff)
configure: Allow disabling workaround for TLS bug in old ARM gcc versions
Some toolchains (such as sysmobts 201705 one) containing the TLS bug on old ARM gcc versions (<7.3.0) also crash if the initial workaround found is aplied (CFLAGS="-mtls-dialect=gnu2"). In that scenario, let's provide a way to disable the workaround (to avoid "ld" crashing) and warn the user about requirement to build with -O0 to avoid runtime crashes. Related: OS#4062 Related: SYS#4628 Change-Id: I04ff8c702eabcf4f6e7b59e11aece2744267cefe
-rw-r--r--configure.ac3
-rw-r--r--m4/check_tls_gcc_arm_bug.m422
2 files changed, 23 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 3764e29e..7ad5908d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -123,8 +123,7 @@ AC_DEFUN([CHECK_TM_INCLUDES_TM_GMTOFF], [
CHECK_TM_INCLUDES_TM_GMTOFF
dnl Check if We need to apply workaround for TLS bug on ARM platform for GCC < 7.3.0:
-CHECK_TLS_GCC_ARM_BUG
-CFLAGS="$CFLAGS $TLS_GCC_ARM_BUG_CFLAGS"
+ARG_ENABLE_DETECT_TLS_GCC_ARM_BUG
dnl Generate the output
AC_CONFIG_HEADER(config.h)
diff --git a/m4/check_tls_gcc_arm_bug.m4 b/m4/check_tls_gcc_arm_bug.m4
index 73b3e957..cee20e65 100644
--- a/m4/check_tls_gcc_arm_bug.m4
+++ b/m4/check_tls_gcc_arm_bug.m4
@@ -27,3 +27,25 @@ AC_DEFUN([CHECK_TLS_GCC_ARM_BUG], [
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
+])