diff options
author | Vitaly Buka <vitalybuka@google.com> | 2017-09-13 04:46:37 +0000 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2017-09-13 04:46:37 +0000 |
commit | 79b583e7f43a4d411a5b32f5da5eb3c50d1c735b (patch) | |
tree | b8bfdef16939fd48b429a125535d8f09c996e59d /lib/sanitizer_common | |
parent | 995eff5631725e6e6fceba4883d01a7151ee5962 (diff) |
[compiler-rt] Move *Sanitizer:DEADLYSIGNAL printing into common part
Summary: Part of https://github.com/google/sanitizers/issues/637
Reviewers: eugenis, alekseyshl
Subscribers: kubamracek, llvm-commits, dberris
Differential Revision: https://reviews.llvm.org/D37764
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@313115 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common')
-rw-r--r-- | lib/sanitizer_common/sanitizer_common.h | 4 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_posix_libcdep.cc | 8 |
2 files changed, 11 insertions, 1 deletions
diff --git a/lib/sanitizer_common/sanitizer_common.h b/lib/sanitizer_common/sanitizer_common.h index e5b53090e..483af36d7 100644 --- a/lib/sanitizer_common/sanitizer_common.h +++ b/lib/sanitizer_common/sanitizer_common.h @@ -308,9 +308,11 @@ void SetSoftRssLimitExceededCallback(void (*Callback)(bool exceeded)); // Functions related to signal handling. typedef void (*SignalHandlerType)(int, void *, void *); HandleSignalMode GetHandleSignalMode(int signum); -bool IsStackOverflow(int code, const SignalContext &sig); void InstallDeadlySignalHandlers(SignalHandlerType handler); const char *DescribeSignalOrException(int signo); +// Signal reporting. +void StartReportDeadlySignal(); +bool IsStackOverflow(int code, const SignalContext &sig); // Alternative signal stack (POSIX-only). void SetAlternateSignalStack(); void UnsetAlternateSignalStack(); diff --git a/lib/sanitizer_common/sanitizer_posix_libcdep.cc b/lib/sanitizer_common/sanitizer_posix_libcdep.cc index 5ff71b4e2..2250a0e42 100644 --- a/lib/sanitizer_common/sanitizer_posix_libcdep.cc +++ b/lib/sanitizer_common/sanitizer_posix_libcdep.cc @@ -260,6 +260,14 @@ bool IsStackOverflow(int code, const SignalContext &sig) { return IsStackAccess && (code == si_SEGV_MAPERR || code == si_SEGV_ACCERR); } +void StartReportDeadlySignal() { + // Write the first message using fd=2, just in case. + // It may actually fail to write in case stderr is closed. + internal_write(2, SanitizerToolName, internal_strlen(SanitizerToolName)); + static const char kDeadlySignal[] = ":DEADLYSIGNAL\n"; + internal_write(2, kDeadlySignal, sizeof(kDeadlySignal) - 1); +} + #endif // SANITIZER_GO bool IsAccessibleMemoryRange(uptr beg, uptr size) { |