diff options
author | Vitaly Buka <vitalybuka@google.com> | 2017-09-18 06:56:57 +0000 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2017-09-18 06:56:57 +0000 |
commit | fabb9da5777dcbf106a0aa2b6895bbe31521ed5b (patch) | |
tree | 6c4cd93dacf909f852c3e00b949514b547a7c26f | |
parent | 7c29ef848de951da429abe7438a85c678ea3e6f6 (diff) |
[asan] Remove ScopedDeadlySignal
This is used only to make fast = true in GetStackTraceWithPcBpAndContext
on SANITIZER_FREEBSD and SANITIZER_NETBSD and can be done explicitly.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@313517 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/asan/asan_errors.cc | 10 | ||||
-rw-r--r-- | lib/asan/asan_posix.cc | 1 | ||||
-rw-r--r-- | lib/asan/asan_stack.h | 6 | ||||
-rw-r--r-- | lib/asan/asan_thread.h | 19 |
4 files changed, 8 insertions, 28 deletions
diff --git a/lib/asan/asan_errors.cc b/lib/asan/asan_errors.cc index f2870d48e..d42a86850 100644 --- a/lib/asan/asan_errors.cc +++ b/lib/asan/asan_errors.cc @@ -25,14 +25,20 @@ namespace __asan { static void OnStackUnwind(const SignalContext &sig, const void *callback_context, BufferedStackTrace *stack) { + bool fast = common_flags()->fast_unwind_on_fatal; +#if SANITIZER_FREEBSD || SANITIZER_NETBSD + // On FreeBSD the slow unwinding that leverages _Unwind_Backtrace() + // yields the call stack of the signal's handler and not of the code + // that raised the signal (as it does on Linux). + fast = true; +#endif // Tests and maybe some users expect that scariness is going to be printed // just before the stack. As only asan has scariness score we have no // corresponding code in the sanitizer_common and we use this callback to // print it. static_cast<const ScarinessScoreBase *>(callback_context)->Print(); GetStackTraceWithPcBpAndContext(stack, kStackTraceMax, sig.pc, sig.bp, - sig.context, - common_flags()->fast_unwind_on_fatal); + sig.context, fast); } void ErrorDeadlySignal::Print() { diff --git a/lib/asan/asan_posix.cc b/lib/asan/asan_posix.cc index 034ff58bb..38299e51c 100644 --- a/lib/asan/asan_posix.cc +++ b/lib/asan/asan_posix.cc @@ -34,7 +34,6 @@ namespace __asan { void AsanOnDeadlySignal(int signo, void *siginfo, void *context) { - ScopedDeadlySignal signal_scope(GetCurrentThread()); StartReportDeadlySignal(); SignalContext sig(siginfo, context); ReportDeadlySignal(sig); diff --git a/lib/asan/asan_stack.h b/lib/asan/asan_stack.h index 9f7b102c6..9ee7f5c0c 100644 --- a/lib/asan/asan_stack.h +++ b/lib/asan/asan_stack.h @@ -41,12 +41,6 @@ void GetStackTraceWithPcBpAndContext(BufferedStackTrace *stack, uptr max_depth, stack->size = 0; if (LIKELY(asan_inited)) { if ((t = GetCurrentThread()) && !t->isUnwinding()) { - // On FreeBSD the slow unwinding that leverages _Unwind_Backtrace() - // yields the call stack of the signal's handler and not of the code - // that raised the signal (as it does on Linux). -#if SANITIZER_FREEBSD || SANITIZER_NETBSD - if (t->isInDeadlySignal()) fast = true; -#endif uptr stack_top = t->stack_top(); uptr stack_bottom = t->stack_bottom(); ScopedUnwinding unwind_scope(t); diff --git a/lib/asan/asan_thread.h b/lib/asan/asan_thread.h index d34942492..1cd283a59 100644 --- a/lib/asan/asan_thread.h +++ b/lib/asan/asan_thread.h @@ -125,10 +125,6 @@ class AsanThread { bool isUnwinding() const { return unwinding_; } void setUnwinding(bool b) { unwinding_ = b; } - // True if we are in a deadly signal handler. - bool isInDeadlySignal() const { return in_deadly_signal_; } - void setInDeadlySignal(bool b) { in_deadly_signal_ = b; } - AsanThreadLocalMallocStorage &malloc_storage() { return malloc_storage_; } AsanStats &stats() { return stats_; } @@ -167,7 +163,6 @@ class AsanThread { AsanThreadLocalMallocStorage malloc_storage_; AsanStats stats_; bool unwinding_; - bool in_deadly_signal_; }; // ScopedUnwinding is a scope for stacktracing member of a context @@ -182,20 +177,6 @@ class ScopedUnwinding { AsanThread *thread; }; -// ScopedDeadlySignal is a scope for handling deadly signals. -class ScopedDeadlySignal { - public: - explicit ScopedDeadlySignal(AsanThread *t) : thread(t) { - if (thread) thread->setInDeadlySignal(true); - } - ~ScopedDeadlySignal() { - if (thread) thread->setInDeadlySignal(false); - } - - private: - AsanThread *thread; -}; - // Returns a single instance of registry. ThreadRegistry &asanThreadRegistry(); |