svn commit: r203950 - head/lib/libc/stdlib

Marcel Moolenaar marcel at FreeBSD.org
Tue Feb 16 06:47:01 UTC 2010


Author: marcel
Date: Tue Feb 16 06:47:00 2010
New Revision: 203950
URL: http://svn.freebsd.org/changeset/base/203950

Log:
  Unbreak ia64: tls_model("initial-exec") is invalid, because it assumes
  the static TLS model, which is fundamentally different from the dynamic
  TLS model. The consequence was data corruption. Limit the attribute to
  i386 and amd64.

Modified:
  head/lib/libc/stdlib/malloc.c

Modified: head/lib/libc/stdlib/malloc.c
==============================================================================
--- head/lib/libc/stdlib/malloc.c	Tue Feb 16 06:34:44 2010	(r203949)
+++ head/lib/libc/stdlib/malloc.c	Tue Feb 16 06:47:00 2010	(r203950)
@@ -215,10 +215,12 @@ __FBSDID("$FreeBSD$");
 #  define LG_QUANTUM		4
 #  define LG_SIZEOF_PTR		2
 #  define CPU_SPINWAIT		__asm__ volatile("pause")
+#  define TLS_MODEL		__attribute__((tls_model("initial-exec")))
 #endif
 #ifdef __ia64__
 #  define LG_QUANTUM		4
 #  define LG_SIZEOF_PTR		3
+#  define TLS_MODEL		/* default */
 #endif
 #ifdef __alpha__
 #  define LG_QUANTUM		4
@@ -234,6 +236,7 @@ __FBSDID("$FreeBSD$");
 #  define LG_QUANTUM		4
 #  define LG_SIZEOF_PTR		3
 #  define CPU_SPINWAIT		__asm__ volatile("pause")
+#  define TLS_MODEL		__attribute__((tls_model("initial-exec")))
 #endif
 #ifdef __arm__
 #  define LG_QUANTUM		3
@@ -1090,14 +1093,12 @@ static pthread_mutex_t	arenas_lock; /* P
  * Map of _pthread_self() --> arenas[???], used for selecting an arena to use
  * for allocations.
  */
-static __thread arena_t		*arenas_map
-    __attribute__((tls_model("initial-exec")));
+static __thread arena_t		*arenas_map TLS_MODEL;
 #endif
 
 #ifdef MALLOC_TCACHE
 /* Map of thread-specific caches. */
-static __thread tcache_t	*tcache_tls
-    __attribute__((tls_model("initial-exec")));
+static __thread tcache_t	*tcache_tls TLS_MODEL;
 
 /*
  * Number of cache slots for each bin in the thread cache, or 0 if tcache is
@@ -1115,15 +1116,12 @@ unsigned			tcache_gc_incr;
  * since the state of mmap_unaligned only affects performance, rather than
  * correct function.
  */
-static
 #ifndef NO_TLS
-       __thread
-#endif
-       bool	mmap_unaligned
-#ifndef NO_TLS
-       __attribute__((tls_model("initial-exec")))
+static __thread bool	mmap_unaligned TLS_MODEL;
+#else
+static		bool	mmap_unaligned;
 #endif
-       ;
+
 #ifdef MALLOC_STATS
 static malloc_mutex_t	chunks_mtx;
 /* Chunk statistics. */


More information about the svn-src-head mailing list