Disable usage of TLS unless available

Thread-local storage is supported since Mac OS X 10.7.  Enable TLS
only when the target version is enough.
This commit is contained in:
Nobuyoshi Nakada 2022-05-22 16:49:48 +09:00
parent e79983a448
commit 218e8bdcb0
No known key found for this signature in database
GPG Key ID: 7CD2805BFA3770C6
2 changed files with 8 additions and 3 deletions

View File

@ -340,16 +340,21 @@ AS_CASE(["$host_os:$build_os"],
AS_CASE(["$target_os"], AS_CASE(["$target_os"],
[darwin*], [ [darwin*], [
AC_MSG_CHECKING(if minimum required OS X version is supported) AC_MSG_CHECKING(if minimum required OS X version is supported)
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[@%:@include <AvailabilityMacros.h> AC_PREPROC_IFELSE([AC_LANG_SOURCE([[@%:@include <AvailabilityMacros.h>
@%:@if MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_5 @%:@if MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_5
@%:@error pre OS X 10.5 @%:@error pre OS X 10.5
[!<===== pre OS X 10.5 =====>] [!<===== pre OS X 10.5 =====>]
@%:@endif @%:@endif
int __thread conftest;
]])], ]])],
[AC_MSG_RESULT(yes)], [AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no) [AC_MSG_RESULT(no)
AC_MSG_ERROR([Unsupported OS X version is required])]) AC_MSG_ERROR([Unsupported OS X version is required])])
AC_CACHE_CHECK([if thread-local storage is supported], [rb_cv_tls_supported],
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[int __thread conftest;]])],
[rb_cv_tls_supported=yes],
[rb_cv_tls_supported=no])])
AS_IF([test x"$rb_cv_tls_supported" != xyes],
[AC_DEFINE(RB_THREAD_LOCAL_SPECIFIER_IS_UNSUPPORTED)])
]) ])
RUBY_MINGW32 RUBY_MINGW32

View File

@ -92,7 +92,7 @@ struct rb_thread_sched {
#if __STDC_VERSION__ >= 201112 #if __STDC_VERSION__ >= 201112
#define RB_THREAD_LOCAL_SPECIFIER _Thread_local #define RB_THREAD_LOCAL_SPECIFIER _Thread_local
#elif defined(__GNUC__) #elif defined(__GNUC__) && !defined(RB_THREAD_LOCAL_SPECIFIER_IS_UNSUPPORTED)
/* note that ICC (linux) and Clang are covered by __GNUC__ */ /* note that ICC (linux) and Clang are covered by __GNUC__ */
#define RB_THREAD_LOCAL_SPECIFIER __thread #define RB_THREAD_LOCAL_SPECIFIER __thread
#else #else