Skip to content

Commit

Permalink
[tsan] Move emptyset/oldset to ThreadSignalContext.
Browse files Browse the repository at this point in the history
Summary:
Android doesn't support __thread keyword. So move emptyset/oldset
from THREADLOCAL to ThreadSignalContext.

Reviewers: kcc, eugenis, dvyukov

Subscribers: llvm-commits, tberghammer, danalbert

Differential Revision: http://reviews.llvm.org/D15299

llvm-svn: 255168
  • Loading branch information
yabinc committed Dec 9, 2015
1 parent 4ddbe85 commit 7f48808
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions compiler-rt/lib/tsan/rtl/tsan_interceptors.cc
Expand Up @@ -227,6 +227,9 @@ struct ThreadSignalContext {
atomic_uintptr_t in_blocking_func;
atomic_uintptr_t have_pending_signals;
SignalDesc pending_signals[kSigCount];
// emptyset and oldset are too big for stack.
__sanitizer_sigset_t emptyset;
__sanitizer_sigset_t oldset;
};

// The object is 64-byte aligned, because we want hot data to be located in
Expand Down Expand Up @@ -1962,10 +1965,8 @@ void ProcessPendingSignals(ThreadState *thr) {
return;
atomic_store(&sctx->have_pending_signals, 0, memory_order_relaxed);
atomic_fetch_add(&thr->in_signal_handler, 1, memory_order_relaxed);
// These are too big for stack.
static THREADLOCAL __sanitizer_sigset_t emptyset, oldset;
CHECK_EQ(0, REAL(sigfillset)(&emptyset));
CHECK_EQ(0, pthread_sigmask(SIG_SETMASK, &emptyset, &oldset));
CHECK_EQ(0, REAL(sigfillset)(&sctx->emptyset));
CHECK_EQ(0, pthread_sigmask(SIG_SETMASK, &sctx->emptyset, &sctx->oldset));
for (int sig = 0; sig < kSigCount; sig++) {
SignalDesc *signal = &sctx->pending_signals[sig];
if (signal->armed) {
Expand All @@ -1974,7 +1975,7 @@ void ProcessPendingSignals(ThreadState *thr) {
&signal->siginfo, &signal->ctx);
}
}
CHECK_EQ(0, pthread_sigmask(SIG_SETMASK, &oldset, 0));
CHECK_EQ(0, pthread_sigmask(SIG_SETMASK, &sctx->oldset, 0));
atomic_fetch_add(&thr->in_signal_handler, -1, memory_order_relaxed);
}

Expand Down

0 comments on commit 7f48808

Please sign in to comment.