Add tls_model configuration.
The tls_model attribute isn't supporte by clang (yet?), so add a
configure test that defines JEMALLOC_TLS_MODEL appropriately.
diff --git a/configure.ac b/configure.ac
index c1b46dc..e704d2d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -285,6 +285,21 @@
JE_CFLAGS_APPEND([-fvisibility=hidden])
fi
fi
+dnl Check for tls_model attribute support (clang 3.0 still lacks support).
+SAVED_CFLAGS="${CFLAGS}"
+JE_CFLAGS_APPEND([-Werror])
+JE_COMPILABLE([tls_model attribute], [],
+ [static __thread int
+ __attribute__((tls_model("initial-exec"))) foo;
+ foo = 0;],
+ [je_cv_tls_model])
+CFLAGS="${SAVED_CFLAGS}"
+if test "x${je_cv_tls_model}" = "xyes" ; then
+ AC_DEFINE([JEMALLOC_TLS_MODEL],
+ [__attribute__((tls_model("initial-exec")))])
+else
+ AC_DEFINE([JEMALLOC_TLS_MODEL], [ ])
+fi
JE_COMPILABLE([mremap(...MREMAP_FIXED...)], [
#define _GNU_SOURCE
@@ -719,7 +734,7 @@
return 1;
}
fprintf(f, "%u\n", ffs((int)result) - 1);
- close(f);
+ fclose(f);
return 0;
]])],
diff --git a/include/jemalloc/internal/tsd.h b/include/jemalloc/internal/tsd.h
index 60aaa42..35ae5e3 100644
--- a/include/jemalloc/internal/tsd.h
+++ b/include/jemalloc/internal/tsd.h
@@ -87,14 +87,14 @@
/* malloc_tsd_data(). */
#ifdef JEMALLOC_MALLOC_THREAD_CLEANUP
#define malloc_tsd_data(a_attr, a_name, a_type, a_initializer) \
-a_attr __thread a_type JEMALLOC_ATTR(tls_model("initial-exec")) \
+a_attr __thread a_type JEMALLOC_TLS_MODEL \
a_name##_tls = a_initializer; \
-a_attr __thread bool JEMALLOC_ATTR(tls_model("initial-exec")) \
+a_attr __thread bool JEMALLOC_TLS_MODEL \
a_name##_initialized = false; \
a_attr bool a_name##_booted = false;
#elif (defined(JEMALLOC_TLS))
#define malloc_tsd_data(a_attr, a_name, a_type, a_initializer) \
-a_attr __thread a_type JEMALLOC_ATTR(tls_model("initial-exec")) \
+a_attr __thread a_type JEMALLOC_TLS_MODEL \
a_name##_tls = a_initializer; \
a_attr pthread_key_t a_name##_tsd; \
a_attr bool a_name##_booted = false;
diff --git a/include/jemalloc/jemalloc_defs.h.in b/include/jemalloc/jemalloc_defs.h.in
index e4bfa04..040753a 100644
--- a/include/jemalloc/jemalloc_defs.h.in
+++ b/include/jemalloc/jemalloc_defs.h.in
@@ -108,6 +108,9 @@
# define JEMALLOC_ATTR(s) JEMALLOC_CATTR(s,)
#endif
+/* Non-empty if the tls_model attribute is supported. */
+#undef JEMALLOC_TLS_MODEL
+
/* JEMALLOC_CC_SILENCE enables code that silences unuseful compiler warnings. */
#undef JEMALLOC_CC_SILENCE