diff options
| author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2015-09-02 21:32:46 +0000 |
|---|---|---|
| committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2015-09-02 21:32:46 +0000 |
| commit | b865f61ff9cd6a113427d4c3621d72d91e492fdb (patch) | |
| tree | 342883721f3da53b494ee4bdf448b29881e5dafa | |
| parent | 1a050c8aca8df0686f6e82c2370dd6aba55e562f (diff) | |
| download | bcm5719-llvm-b865f61ff9cd6a113427d4c3621d72d91e492fdb.tar.gz bcm5719-llvm-b865f61ff9cd6a113427d4c3621d72d91e492fdb.zip | |
[asan] Fix signal interception on Android.
All supported version of Android provide both "signal" and
"bsd_signal" libc exports. Binaries built for API level <21 call
bsd_signal; newer binaries call signal.
Simply intercept both.
Fixes AddressSanitizer.SignalTest on Android/x86.
llvm-svn: 246716
| -rw-r--r-- | compiler-rt/lib/asan/asan_interceptors.cc | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/compiler-rt/lib/asan/asan_interceptors.cc b/compiler-rt/lib/asan/asan_interceptors.cc index f842c80f725..0ed175ac3db 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cc +++ b/compiler-rt/lib/asan/asan_interceptors.cc @@ -263,21 +263,21 @@ DEFINE_REAL_PTHREAD_FUNCTIONS #if ASAN_INTERCEPT_SIGNAL_AND_SIGACTION -#if SANITIZER_ANDROID && !defined(_LP64) +#if SANITIZER_ANDROID INTERCEPTOR(void*, bsd_signal, int signum, void *handler) { if (!IsDeadlySignal(signum) || common_flags()->allow_user_segv_handler) { return REAL(bsd_signal)(signum, handler); } return 0; } -#else +#endif + INTERCEPTOR(void*, signal, int signum, void *handler) { if (!IsDeadlySignal(signum) || common_flags()->allow_user_segv_handler) { return REAL(signal)(signum, handler); } return 0; } -#endif INTERCEPTOR(int, sigaction, int signum, const struct sigaction *act, struct sigaction *oldact) { @@ -769,11 +769,10 @@ void InitializeAsanInterceptors() { ASAN_INTERCEPT_FUNC(longjmp); #if ASAN_INTERCEPT_SIGNAL_AND_SIGACTION ASAN_INTERCEPT_FUNC(sigaction); -#if SANITIZER_ANDROID && !defined(_LP64) +#if SANITIZER_ANDROID ASAN_INTERCEPT_FUNC(bsd_signal); -#else - ASAN_INTERCEPT_FUNC(signal); #endif + ASAN_INTERCEPT_FUNC(signal); #endif #if ASAN_INTERCEPT_SWAPCONTEXT ASAN_INTERCEPT_FUNC(swapcontext); |

