From e87a18018741044322d6014ee9551de8f2cb05f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Wed, 19 Jun 2019 11:21:36 +0200 Subject: [PATCH] Enforce usage -zrelax=transtls when GNU C Compiler is used on Solaris When GNU C Compiler is used on Solaris (11), the Thread Local Storage is completely broken. The behaviour doesn't manifest when GNU ld is used. Thus, we need to enforce usage of GNU ld when GNU C Compiler is the compiler of choice. For more background for this change, see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90912 (cherry picked from commit d584223653e17930109f37f5203acecca4090ca6) --- configure | 17 +++++++++++++++++ configure.ac | 11 +++++++++++ 2 files changed, 28 insertions(+) diff --git a/configure b/configure index 028839fd88..7f7bc2026c 100755 --- a/configure +++ b/configure @@ -13126,6 +13126,23 @@ fi +# +# Using Solaris linker with gcc on Solaris breaks Thread Local Storage +# +case $host in #( + *-solaris*) : + + if test "$GCC" = "yes"; then : + LDFLAGS="$LDFLAGS -zrelax=transtls" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: When using GNU C Compiler on Solaris, -zrelax=transtls linker flag is used to fix bug in Thread Local Storage" >&5 +$as_echo "$as_me: WARNING: When using GNU C Compiler on Solaris, -zrelax=transtls linker flag is used to fix bug in Thread Local Storage" >&2;} + +fi + ;; #( + *) : + ;; +esac + # # CCNOOPT defaults to -O0 on gcc and disables optimization when is last # diff --git a/configure.ac b/configure.ac index 858d9a0529..e20cca72cf 100644 --- a/configure.ac +++ b/configure.ac @@ -355,6 +355,17 @@ esac AC_PROG_CC AC_PROG_CC_C99 +# +# Using Solaris linker with gcc on Solaris breaks Thread Local Storage +# +AS_CASE([$host], + [*-solaris*],[ + AS_IF([test "$GCC" = "yes"], + [LDFLAGS="$LDFLAGS -zrelax=transtls" + AC_MSG_WARN([When using GNU C Compiler on Solaris, -zrelax=transtls linker flag is used to fix bug in Thread Local Storage]) + ]) + ]) + # # CCNOOPT defaults to -O0 on gcc and disables optimization when is last #