[compiler-rt] r341441 - [hwasan] revert r341435 as it breaks the bot on aarch64

Kostya Serebryany via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 4 18:29:08 PDT 2018


Author: kcc
Date: Tue Sep  4 18:29:08 2018
New Revision: 341441

URL: http://llvm.org/viewvc/llvm-project?rev=341441&view=rev
Log:
[hwasan] revert r341435 as it breaks the bot on aarch64

Modified:
    compiler-rt/trunk/lib/hwasan/hwasan_linux.cc

Modified: compiler-rt/trunk/lib/hwasan/hwasan_linux.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/hwasan_linux.cc?rev=341441&r1=341440&r2=341441&view=diff
==============================================================================
--- compiler-rt/trunk/lib/hwasan/hwasan_linux.cc (original)
+++ compiler-rt/trunk/lib/hwasan/hwasan_linux.cc Tue Sep  4 18:29:08 2018
@@ -221,25 +221,23 @@ extern "C" void __hwasan_thread_exit() {
   Thread *t = GetCurrentThread();
   // Make sure that signal handler can not see a stale current thread pointer.
   atomic_signal_fence(memory_order_seq_cst);
-  CHECK(t);
-  t->Destroy();
+  if (t)
+    t->Destroy();
 }
 
 #if HWASAN_WITH_INTERCEPTORS
 static pthread_key_t tsd_key;
 static bool tsd_key_inited = false;
 
-static THREADLOCAL Thread *current_thread;
-
 void HwasanTSDDtor(void *tsd) {
-  Thread *t = current_thread;
+  Thread *t = (Thread*)tsd;
   if (t->destructor_iterations_ > 1) {
     t->destructor_iterations_--;
-    CHECK_EQ(0, pthread_setspecific(tsd_key, (void*)1));
+    CHECK_EQ(0, pthread_setspecific(tsd_key, tsd));
     return;
   }
+  t->Destroy();
   __hwasan_thread_exit();
-  current_thread = nullptr;
 }
 
 void HwasanTSDInit() {
@@ -249,17 +247,15 @@ void HwasanTSDInit() {
 }
 
 Thread *GetCurrentThread() {
-  return current_thread;
+  return (Thread *)pthread_getspecific(tsd_key);
 }
 
 void SetCurrentThread(Thread *t) {
   // Make sure that HwasanTSDDtor gets called at the end.
   CHECK(tsd_key_inited);
   // Make sure we do not reset the current Thread.
-  CHECK_EQ(current_thread, nullptr);
-  current_thread = t;
   CHECK_EQ(0, pthread_getspecific(tsd_key));
-  CHECK_EQ(0, pthread_setspecific(tsd_key, (void *)1));
+  pthread_setspecific(tsd_key, (void *)t);
 }
 #elif SANITIZER_ANDROID
 void HwasanTSDInit() {}




More information about the llvm-commits mailing list