#if defined(__clang__) && defined(__clang_major__)
# define GC_CLANG_PREREQ(major, minor) \
((__clang_major__ << 16) + __clang_minor__ >= ((major) << 16) + (minor))
+# define GC_CLANG_PREREQ_FULL(major, minor, patchlevel) \
+ (GC_CLANG_PREREQ(major, (minor) + 1) \
+ || (__clang_major__ == (major) && __clang_minor__ == (minor) \
+ && __clang_patchlevel__ >= (patchlevel)))
#else
# define GC_CLANG_PREREQ(major, minor) 0 /* FALSE */
+# define GC_CLANG_PREREQ_FULL(major, minor, patchlevel) 0
#endif
/* Machine dependent parameters. Some tuning parameters can be found */
# elif (defined(LINUX) && !defined(ARM32) && !defined(AVR32) \
&& GC_GNUC_PREREQ(3, 3) \
&& !(defined(__clang__) && defined(PLATFORM_ANDROID))) \
- || (defined(PLATFORM_ANDROID) && !defined(__clang__) \
- && defined(ARM32) && GC_GNUC_PREREQ(4, 6))
- /* As of Android NDK r10e, Clang cannot find __tls_get_addr. */
+ || (defined(PLATFORM_ANDROID) && defined(ARM32) \
+ && (GC_GNUC_PREREQ(4, 6) || GC_CLANG_PREREQ_FULL(3, 8, 256229)))
# define USE_COMPILER_TLS
# elif defined(GC_DGUX386_THREADS) || defined(GC_OSF1_THREADS) \
|| defined(GC_AIX_THREADS) || defined(GC_DARWIN_THREADS) \