<div dir="ltr">This test case fails on Android: <a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/12591/steps/run%20asan%20lit%20tests%20%5BAndroid%5D/logs/stdio">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/12591/steps/run%20asan%20lit%20tests%20%5BAndroid%5D/logs/stdio</a></div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Sep 4, 2014 at 2:34 AM, Alexander Potapenko <span dir="ltr"><<a href="mailto:glider@google.com" target="_blank">glider@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: glider<br>
Date: Thu Sep  4 04:34:22 2014<br>
New Revision: 217137<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=217137&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=217137&view=rev</a><br>
Log:<br>
[ASan] allow deadly signals to be received in signal handlers<br>
(previously ASan would just crash upon the second SEGV)<br>
Other tools do not use this code yet.<br>
<br>
<br>
Added:<br>
    compiler-rt/trunk/test/asan/TestCases/zero_page_pc.cc<br>
Modified:<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc<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=217137&r1=217136&r2=217137&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix_libcdep.cc?rev=217137&r1=217136&r2=217137&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 Thu Sep  4 04:34:22 2014<br>
@@ -148,7 +148,9 @@ static void MaybeInstallSigaction(int si<br>
   struct sigaction sigact;<br>
   internal_memset(&sigact, 0, sizeof(sigact));<br>
   sigact.sa_sigaction = (sa_sigaction_t)handler;<br>
-  sigact.sa_flags = SA_SIGINFO;<br>
+  // Do not block the signal from being received in that signal's handler.<br>
+  // Clients are responsible for handling this correctly.<br>
+  sigact.sa_flags = SA_SIGINFO | SA_NODEFER;<br>
   if (common_flags()->use_sigaltstack) sigact.sa_flags |= SA_ONSTACK;<br>
   CHECK_EQ(0, internal_sigaction(signum, &sigact, 0));<br>
   VReport(1, "Installed the sigaction for signal %d\n", signum);<br>
<br>
Added: compiler-rt/trunk/test/asan/TestCases/zero_page_pc.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/zero_page_pc.cc?rev=217137&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/zero_page_pc.cc?rev=217137&view=auto</a><br>

==============================================================================<br>
--- compiler-rt/trunk/test/asan/TestCases/zero_page_pc.cc (added)<br>
+++ compiler-rt/trunk/test/asan/TestCases/zero_page_pc.cc Thu Sep  4 04:34:22 2014<br>
@@ -0,0 +1,11 @@<br>
+// Check that ASan correctly detects SEGV on the zero page.<br>
+// RUN: %clangxx_asan %s -o %t && not %run %t 2>&1 | FileCheck %s<br>
+<br>
+typedef void void_f();<br>
+int main() {<br>
+  void_f *func = (void_f *)0x7;<br>
+  func();<br>
+  // CHECK: {{AddressSanitizer: SEGV.*(pc.*0007)}}<br>
+  // CHECK: AddressSanitizer: while reporting a bug found another one. Ignoring.<br>
+  return 0;<br>
+}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">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><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div>
</div>