From afce89dac1a3cdb975da72020acdba16940fd679 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Tue, 6 Aug 2019 12:46:46 +0200 Subject: 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 --- configure.ac | 3 +-- m4/check_tls_gcc_arm_bug.m4 | 22 ++++++++++++++++++++++ 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 +]) -- cgit v1.2.3