- AC_LINK_IFELSE([__thread int a; int b; int main() { return a = b; }],
- [have_tls=yes], [have_tls=no])
+ AC_LINK_IFELSE([AC_LANG_SOURCE([__thread int a; int b; int main() { return a = b; }])],
+ [chktls_save_LDFLAGS="$LDFLAGS"
+ dnl Shared library options may depend on the host; this check
+ dnl is only known to be needed for GNU/Linux.
+ case $host in
+ *-*-linux* | -*-uclinuxfdpic*)
+ LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS"
+ ;;
+ esac
+ chktls_save_CFLAGS="$CFLAGS"
+ CFLAGS="-fPIC $CFLAGS"
+ dnl If -shared works, test if TLS works in a shared library.
+ AC_LINK_IFELSE([AC_LANG_SOURCE([int f() { return 0; }])],
+ [AC_LINK_IFELSE([AC_LANG_SOURCE([__thread int a; int b; int f() { return a = b; }])],
+ [gcc_cv_have_tls=yes],
+ [gcc_cv_have_tls=no])],
+ [gcc_cv_have_tls=yes])
+ CFLAGS="$chktls_save_CFLAGS"
+ LDFLAGS="$chktls_save_LDFLAGS"], [gcc_cv_have_tls=no])