[dfsan] Dfsan version of D113328
authorVitaly Buka <vitalybuka@google.com>
Tue, 9 Nov 2021 03:22:24 +0000 (19:22 -0800)
committerVitaly Buka <vitalybuka@google.com>
Wed, 10 Nov 2021 02:23:55 +0000 (18:23 -0800)
Depends on D113328.

Differential Revision: https://reviews.llvm.org/D113454

compiler-rt/lib/dfsan/dfsan_custom.cpp
compiler-rt/lib/dfsan/dfsan_thread.h

index 2ecbc07033668959ccc8c320e3c352f9ccc23225..217bd35c1c541968ee188c320aa8c1ff5c905a92 100644 (file)
@@ -756,6 +756,7 @@ static void *DFsanThreadStartFunc(void *arg) {
   DFsanThread *t = (DFsanThread *)arg;
   SetCurrentThread(t);
   t->Init();
+  SetSigProcMask(&t->starting_sigset_, nullptr);
   return t->ThreadStart();
 }
 
@@ -776,6 +777,7 @@ static int dfsan_pthread_create(pthread_t *thread, const pthread_attr_t *attr,
   DFsanThread *t =
       DFsanThread::Create(start_routine_trampoline,
                           (thread_callback_t)start_routine, arg, track_origins);
+  ScopedBlockSignals block(&t->starting_sigset_);
   int res = pthread_create(thread, attr, DFsanThreadStartFunc, t);
 
   if (attr == &myattr)
index 6952963cfc48f1743538f80ee5c0dc542c61d6e1..1c33a18549972736c70e2943719195ac75dedc98 100644 (file)
@@ -15,6 +15,7 @@
 
 #include "dfsan_allocator.h"
 #include "sanitizer_common/sanitizer_common.h"
+#include "sanitizer_common/sanitizer_posix.h"
 
 namespace __dfsan {
 
@@ -45,6 +46,7 @@ class DFsanThread {
   DFsanThreadLocalMallocStorage &malloc_storage() { return malloc_storage_; }
 
   int destructor_iterations_;
+  __sanitizer_sigset_t starting_sigset_;
 
  private:
   void SetThreadStackAndTls();