[asan] Enable signal and sigaction interceptors on Android.
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Thu, 13 Feb 2014 14:33:24 +0000 (14:33 +0000)
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Thu, 13 Feb 2014 14:33:24 +0000 (14:33 +0000)
Fixes AddressSanitizer.SignalTest breakage.

llvm-svn: 201330

compiler-rt/lib/asan/asan_interceptors.cc
compiler-rt/lib/asan/asan_interceptors.h

index ce90f08..d58c4a6 100644 (file)
@@ -186,6 +186,16 @@ INTERCEPTOR(int, pthread_create, void *thread,
 #endif  // ASAN_INTERCEPT_PTHREAD_CREATE
 
 #if ASAN_INTERCEPT_SIGNAL_AND_SIGACTION
+
+#if SANITIZER_ANDROID
+INTERCEPTOR(void*, bsd_signal, int signum, void *handler) {
+  if (!AsanInterceptsSignal(signum) ||
+      common_flags()->allow_user_segv_handler) {
+    return REAL(bsd_signal)(signum, handler);
+  }
+  return 0;
+}
+#else
 INTERCEPTOR(void*, signal, int signum, void *handler) {
   if (!AsanInterceptsSignal(signum) ||
       common_flags()->allow_user_segv_handler) {
@@ -193,6 +203,7 @@ INTERCEPTOR(void*, signal, int signum, void *handler) {
   }
   return 0;
 }
+#endif
 
 INTERCEPTOR(int, sigaction, int signum, const struct sigaction *act,
                             struct sigaction *oldact) {
@@ -754,8 +765,12 @@ void InitializeAsanInterceptors() {
   ASAN_INTERCEPT_FUNC(longjmp);
 #if ASAN_INTERCEPT_SIGNAL_AND_SIGACTION
   ASAN_INTERCEPT_FUNC(sigaction);
+#if SANITIZER_ANDROID
+  ASAN_INTERCEPT_FUNC(bsd_signal);
+#else
   ASAN_INTERCEPT_FUNC(signal);
 #endif
+#endif
 #if ASAN_INTERCEPT_SWAPCONTEXT
   ASAN_INTERCEPT_FUNC(swapcontext);
 #endif
index 2a8c043..fc2e27c 100644 (file)
@@ -54,7 +54,7 @@
 # define ASAN_INTERCEPT_SWAPCONTEXT 0
 #endif
 
-#if !SANITIZER_ANDROID && !SANITIZER_WINDOWS
+#if !SANITIZER_WINDOWS
 # define ASAN_INTERCEPT_SIGNAL_AND_SIGACTION 1
 #else
 # define ASAN_INTERCEPT_SIGNAL_AND_SIGACTION 0