diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-02-13 14:33:24 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-02-13 14:33:24 +0000 |
commit | f79669a32365144e60cb85f13674973acc982bff (patch) | |
tree | c9e1363337202e41d19b1e704f5209c5b41faede /compiler-rt | |
parent | a238b17e764289def75d0410e85b40405507f42f (diff) | |
download | bcm5719-llvm-f79669a32365144e60cb85f13674973acc982bff.tar.gz bcm5719-llvm-f79669a32365144e60cb85f13674973acc982bff.zip |
[asan] Enable signal and sigaction interceptors on Android.
Fixes AddressSanitizer.SignalTest breakage.
llvm-svn: 201330
Diffstat (limited to 'compiler-rt')
-rw-r--r-- | compiler-rt/lib/asan/asan_interceptors.cc | 15 | ||||
-rw-r--r-- | compiler-rt/lib/asan/asan_interceptors.h | 2 |
2 files changed, 16 insertions, 1 deletions
diff --git a/compiler-rt/lib/asan/asan_interceptors.cc b/compiler-rt/lib/asan/asan_interceptors.cc index ce90f089509..d58c4a61386 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cc +++ b/compiler-rt/lib/asan/asan_interceptors.cc @@ -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 diff --git a/compiler-rt/lib/asan/asan_interceptors.h b/compiler-rt/lib/asan/asan_interceptors.h index 2a8c04366c9..fc2e27cdd95 100644 --- a/compiler-rt/lib/asan/asan_interceptors.h +++ b/compiler-rt/lib/asan/asan_interceptors.h @@ -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 |