diff options
author | Kostya Serebryany <kcc@google.com> | 2015-08-06 17:52:54 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2015-08-06 17:52:54 +0000 |
commit | c3a591f46a126f8315cd66f21c7bbf795c276cb9 (patch) | |
tree | 3fd1132640760bddace8d02cba543e789931bc8d /lib/asan/asan_posix.cc | |
parent | 24e5eddb8939379e1dfc2bb56aab562b864d9705 (diff) | |
download | compiler-rt-c3a591f46a126f8315cd66f21c7bbf795c276cb9.tar.gz |
[sanitizer] 2-nd attempt. Add the flag handle_sigfpe that is default true to handle SIGFPE crashes same as SIGSEV crashes, patch by Karl Skomski. This time the test is enabled only on x86-64 (it broke on ARM)
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@244234 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/asan/asan_posix.cc')
-rw-r--r-- | lib/asan/asan_posix.cc | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/asan/asan_posix.cc b/lib/asan/asan_posix.cc index 2e857f6f6..cce56984e 100644 --- a/lib/asan/asan_posix.cc +++ b/lib/asan/asan_posix.cc @@ -33,11 +33,11 @@ namespace __asan { -void AsanOnSIGSEGV(int, void *siginfo, void *context) { +void AsanOnDeadlySignal(int signo, void *siginfo, void *context) { ScopedDeadlySignal signal_scope(GetCurrentThread()); int code = (int)((siginfo_t*)siginfo)->si_code; // Write the first message using the bullet-proof write. - if (13 != internal_write(2, "ASAN:SIGSEGV\n", 13)) Die(); + if (18 != internal_write(2, "ASAN:DEADLYSIGNAL\n", 18)) Die(); SignalContext sig = SignalContext::Create(siginfo, context); // Access at a reasonable offset above SP, or slightly below it (to account @@ -75,8 +75,10 @@ void AsanOnSIGSEGV(int, void *siginfo, void *context) { // unaligned memory access. if (IsStackAccess && (code == si_SEGV_MAPERR || code == si_SEGV_ACCERR)) ReportStackOverflow(sig); + else if (signo == SIGFPE) + ReportDeadlySignal("FPE", sig); else - ReportSIGSEGV("SEGV", sig); + ReportDeadlySignal("SEGV", sig); } // ---------------------- TSD ---------------- {{{1 |