Re: [PATCH] D20910: [tsan] On OS X, optimize main thread’s ThreadState accesses

Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 6 09:34:20 PDT 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL271906: [tsan] On OS X, optimize main thread’s ThreadState accesses (authored by kuba.brecka).

Changed prior to commit:
  http://reviews.llvm.org/D20910?vs=59375&id=59739#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D20910

Files:
  compiler-rt/trunk/lib/tsan/rtl/tsan_platform_mac.cc

Index: compiler-rt/trunk/lib/tsan/rtl/tsan_platform_mac.cc
===================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_platform_mac.cc
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_platform_mac.cc
@@ -67,20 +67,18 @@
 // when TLVs are not accessible (early process startup, thread cleanup, ...).
 // The following provides a "poor man's TLV" implementation, where we use the
 // shadow memory of the pointer returned by pthread_self() to store a pointer to
-// the ThreadState object. The main thread's ThreadState pointer is stored
-// separately in a static variable, because we need to access it even before the
+// the ThreadState object. The main thread's ThreadState is stored separately
+// in a static variable, because we need to access it even before the
 // shadow memory is set up.
 static uptr main_thread_identity = 0;
-static ThreadState *main_thread_state = nullptr;
+ALIGNED(64) static char main_thread_state[sizeof(ThreadState)];
 
 ThreadState *cur_thread() {
-  ThreadState **fake_tls;
   uptr thread_identity = (uptr)pthread_self();
   if (thread_identity == main_thread_identity || main_thread_identity == 0) {
-    fake_tls = &main_thread_state;
-  } else {
-    fake_tls = (ThreadState **)MemToShadow(thread_identity);
+    return (ThreadState *)&main_thread_state;
   }
+  ThreadState **fake_tls = (ThreadState **)MemToShadow(thread_identity);
   ThreadState *thr = (ThreadState *)SignalSafeGetOrAllocate(
       (uptr *)fake_tls, sizeof(ThreadState));
   return thr;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D20910.59739.patch
Type: text/x-patch
Size: 1535 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160606/4d7b9dba/attachment.bin>


More information about the llvm-commits mailing list