diff options
Diffstat (limited to 'compiler-rt/lib/asan/asan_errors.h')
-rw-r--r-- | compiler-rt/lib/asan/asan_errors.h | 38 |
1 files changed, 9 insertions, 29 deletions
diff --git a/compiler-rt/lib/asan/asan_errors.h b/compiler-rt/lib/asan/asan_errors.h index 55b8360a3f7..b9944739bf1 100644 --- a/compiler-rt/lib/asan/asan_errors.h +++ b/compiler-rt/lib/asan/asan_errors.h @@ -28,19 +28,12 @@ struct ErrorBase { }; struct ErrorStackOverflow : ErrorBase { - uptr addr, pc, bp, sp; - // ErrorStackOverflow never owns the context. - void *context; + SignalContext signal; // VS2013 doesn't implement unrestricted unions, so we need a trivial default // constructor ErrorStackOverflow() = default; ErrorStackOverflow(u32 tid, const SignalContext &sig) - : ErrorBase(tid), - addr(sig.addr), - pc(sig.pc), - bp(sig.bp), - sp(sig.sp), - context(sig.context) { + : ErrorBase(tid), signal(sig) { scariness.Clear(); scariness.Scare(10, "stack-overflow"); } @@ -48,34 +41,21 @@ struct ErrorStackOverflow : ErrorBase { }; struct ErrorDeadlySignal : ErrorBase { - uptr addr, pc, bp, sp; - // ErrorDeadlySignal never owns the context. - void *context; - int signo; - SignalContext::WriteFlag write_flag; - bool is_memory_access; + SignalContext signal; // VS2013 doesn't implement unrestricted unions, so we need a trivial default // constructor ErrorDeadlySignal() = default; ErrorDeadlySignal(u32 tid, const SignalContext &sig) - : ErrorBase(tid), - addr(sig.addr), - pc(sig.pc), - bp(sig.bp), - sp(sig.sp), - context(sig.context), - signo(sig.GetType()), - write_flag(sig.write_flag), - is_memory_access(sig.is_memory_access) { + : ErrorBase(tid), signal(sig) { scariness.Clear(); - if (is_memory_access) { - if (addr < GetPageSizeCached()) { + if (signal.is_memory_access) { + if (signal.addr < GetPageSizeCached()) { scariness.Scare(10, "null-deref"); - } else if (addr == pc) { + } else if (signal.addr == signal.pc) { scariness.Scare(60, "wild-jump"); - } else if (write_flag == SignalContext::WRITE) { + } else if (signal.write_flag == SignalContext::WRITE) { scariness.Scare(30, "wild-addr-write"); - } else if (write_flag == SignalContext::READ) { + } else if (signal.write_flag == SignalContext::READ) { scariness.Scare(20, "wild-addr-read"); } else { scariness.Scare(25, "wild-addr"); |