summaryrefslogtreecommitdiffstats
path: root/m4/check_tls_gcc_arm_bug.m4
blob: 73b3e9575a53496afe7d76d4809ca786862284ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 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])
])