[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

llvm-svn: 313115
This commit is contained in:
Vitaly Buka 2017-09-13 04:46:37 +00:00
parent c113577d15
commit d9d2a89e50
3 changed files with 12 additions and 6 deletions

View File

@ -35,11 +35,7 @@ namespace __asan {
void AsanOnDeadlySignal(int signo, void *siginfo, void *context) {
ScopedDeadlySignal signal_scope(GetCurrentThread());
// 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);
StartReportDeadlySignal();
SignalContext sig = SignalContext::Create(siginfo, context);
if (IsStackOverflow(((siginfo_t *)siginfo)->si_code, sig))
ReportStackOverflow(sig);

View File

@ -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();

View File

@ -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) {