Add wxUSE_COMPILER_TLS to allow disabling compiler TLS support.

Compiler TLS support is broken under Win32/MSVC when used for a code which is
part of a dynamically loaded DLL, so allow disabling it.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71792 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-06-17 21:34:47 +00:00
parent 233f786e8e
commit b33e9f4031
14 changed files with 113 additions and 4 deletions

View File

@@ -92,6 +92,14 @@
# endif
#endif /* wxUSE_ANY */
#ifndef wxUSE_COMPILER_TLS
# ifdef wxABORT_ON_CONFIG_ERROR
# error "wxUSE_COMPILER_TLS must be defined, please read comment near the top of this file."
# else
# define wxUSE_COMPILER_TLS 0
# endif
#endif /* !defined(wxUSE_COMPILER_TLS) */
#ifndef wxUSE_CONSOLE_EVENTLOOP
# ifdef wxABORT_ON_CONFIG_ERROR
# error "wxUSE_CONSOLE_EVENTLOOP must be defined, please read comment near the top of this file."

View File

@@ -267,6 +267,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@@ -267,6 +267,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@@ -267,6 +267,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@@ -267,6 +267,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@@ -267,6 +267,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@@ -268,6 +268,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@@ -263,6 +263,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@@ -22,10 +22,13 @@
#if !wxUSE_THREADS
#define wxHAS_COMPILER_TLS
#define wxTHREAD_SPECIFIC_DECL
// otherwise try to find the compiler-specific way to handle TLS unless
// explicitly disabled by setting wxUSE_COMPILER_TLS to 0 (it is 1 by default).
#elif wxUSE_COMPILER_TLS
// __thread keyword is not supported correctly by MinGW, at least in some
// configurations, see http://sourceforge.net/support/tracker.php?aid=2837047
// and when in doubt we prefer to not use it at all.
#elif defined(HAVE___THREAD_KEYWORD) && !defined(__MINGW32__)
#if defined(HAVE___THREAD_KEYWORD) && !defined(__MINGW32__)
#define wxHAS_COMPILER_TLS
#define wxTHREAD_SPECIFIC_DECL __thread
// MSVC has its own version which might be supported by some other Windows
@@ -33,7 +36,8 @@
#elif wxCHECK_VISUALC_VERSION(7)
#define wxHAS_COMPILER_TLS
#define wxTHREAD_SPECIFIC_DECL __declspec(thread)
#endif
#endif // compilers
#endif // wxUSE_COMPILER_TLS
// ----------------------------------------------------------------------------
// define wxTLS_TYPE()

View File

@@ -266,6 +266,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.