<div dir="ltr">Yep, I found this myself too, and fixed. </div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 5, 2015 at 10:54 AM, Alexey Samsonov <span dir="ltr"><<a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Mon, May 4, 2015 at 6:37 PM, Kostya Serebryany <span dir="ltr"><<a href="mailto:kcc@google.com" target="_blank">kcc@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: kcc<br>
Date: Mon May  4 20:37:33 2015<br>
New Revision: 236474<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=236474&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=236474&view=rev</a><br>
Log:<br>
[asan] under handle_abort=1 option intercept SIGABRT in addition to SIGSEGV/SIGBUS. Among other things this will allow to set up a death callback for SIGABRT and thus properly handle assert() in lib/Fuzzer<br>
<br>
Added:<br>
    compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/assert.cc<br>
Modified:<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc?rev=236474&r1=236473&r2=236474&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc?rev=236474&r1=236473&r2=236474&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.inc Mon May  4 20:37:33 2015<br>
@@ -67,8 +67,9 @@ COMMON_FLAG(bool, print_summary, true,<br>
             "reports.")<br>
 COMMON_FLAG(bool, check_printf, true, "Check printf arguments.")<br>
 COMMON_FLAG(bool, handle_segv, SANITIZER_NEEDS_SEGV,<br>
-            "If set, registers the tool's custom SEGV handler (both SIGBUS and "<br>
-            "SIGSEGV on OSX).")<br>
+            "If set, registers the tool's custom SIGSEGV/SIGBUS handler.")<br>
+COMMON_FLAG(bool, handle_abort, false,<br>
+            "If set, registers the tool's custom SIGABRT handler.")<br>
 COMMON_FLAG(bool, allow_user_segv_handler, false,<br>
             "If set, allows user to register a SEGV handler even if the tool "<br>
             "registers one.")<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=236474&r1=236473&r2=236474&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=236474&r1=236473&r2=236474&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc Mon May  4 20:37:33 2015<br>
@@ -907,6 +907,8 @@ void GetExtraActivationFlags(char *buf,<br>
 #endif<br>
<br>
 bool IsDeadlySignal(int signum) {<br>
+  if (common_flags()->handle_abort)<br>
+    return signum == SIGABRT;<br>
   return (signum == SIGSEGV || signum == SIGBUS) && common_flags()->handle_segv;<br>
 }<br></blockquote><div><br></div></div></div><div>^^^</div><div>Huh? Don't you still need to treat SIGSEGV as deadly signal if both handle_segv and handle_abort are true?</div><div><div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc?rev=236474&r1=236473&r2=236474&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc?rev=236474&r1=236473&r2=236474&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc Mon May  4 20:37:33 2015<br>
@@ -178,6 +178,7 @@ void InstallDeadlySignalHandlers(SignalH<br>
   if (common_flags()->use_sigaltstack) SetAlternateSignalStack();<br>
   MaybeInstallSigaction(SIGSEGV, handler);<br>
   MaybeInstallSigaction(SIGBUS, handler);<br>
+  MaybeInstallSigaction(SIGABRT, handler);<br>
 }<br>
 #endif  // SANITIZER_GO<br>
<br>
<br>
Added: compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/assert.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/assert.cc?rev=236474&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/assert.cc?rev=236474&view=auto</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/assert.cc (added)<br>
+++ compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/assert.cc Mon May  4 20:37:33 2015<br>
@@ -0,0 +1,24 @@<br>
+// Test the handle_abort option.<br>
+// RUN: %clang %s -o %t<br>
+// RUN:                              not --crash %run %t 2>&1 | FileCheck --check-prefix=CHECK0 %s<br>
+// RUN: %tool_options=handle_abort=0 not --crash %run %t 2>&1 | FileCheck --check-prefix=CHECK0 %s<br>
+// RUN: %tool_options=handle_abort=1 not         %run %t 2>&1 | FileCheck --check-prefix=CHECK1 %s<br>
+// FIXME: implement in other sanitizers, not just asan.<br>
+// XFAIL: msan<br>
+// XFAIL: lsan<br>
+// XFAIL: tsan<br>
+#include <assert.h><br>
+#include <stdio.h><br>
+#include <sanitizer/asan_interface.h><br>
+<br>
+void death() {<br>
+  fprintf(stderr, "DEATH CALLBACK\n");<br>
+}<br>
+<br>
+int main(int argc, char **argv) {<br>
+  __sanitizer_set_death_callback(death);<br>
+  assert(argc == 100);<br>
+}<br>
+// CHECK1: ERROR: {{.*}}Sanitizer:<br>
+// CHECK1: DEATH CALLBACK<br>
+// CHECK0-NOT: Sanitizer<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div></div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div></div>
</font></span></div></div>
</blockquote></div><br></div>