forked from OSchip/llvm-project
[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:
parent
c113577d15
commit
d9d2a89e50
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue