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. */
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to