diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2018-01-22 19:26:01 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2018-01-22 19:26:01 +0000 |
commit | 7c70d9d0be8a465974d45faa8e505acce7bb4075 (patch) | |
tree | c4b56100524a4ad8487121c939a572120e69c328 /compiler-rt | |
parent | 82c5878575a01bd17cb6b5e3f81703e01f8b0fd9 (diff) | |
download | bcm5719-llvm-7c70d9d0be8a465974d45faa8e505acce7bb4075.tar.gz bcm5719-llvm-7c70d9d0be8a465974d45faa8e505acce7bb4075.zip |
[ubsan] Disable signal handling on Android.
Summary: See rationale in the comments.
Reviewers: vitalybuka
Subscribers: srhines, llvm-commits, kubamracek
Differential Revision: https://reviews.llvm.org/D42329
llvm-svn: 323142
Diffstat (limited to 'compiler-rt')
-rw-r--r-- | compiler-rt/lib/ubsan/ubsan_signals_standalone.cc | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/compiler-rt/lib/ubsan/ubsan_signals_standalone.cc b/compiler-rt/lib/ubsan/ubsan_signals_standalone.cc index 4c6646dd8b0..5e77c60b1db 100644 --- a/compiler-rt/lib/ubsan/ubsan_signals_standalone.cc +++ b/compiler-rt/lib/ubsan/ubsan_signals_standalone.cc @@ -13,20 +13,34 @@ //===----------------------------------------------------------------------===// #include "ubsan_platform.h" +#include "sanitizer_common/sanitizer_platform.h" #if CAN_SANITIZE_UB #include "interception/interception.h" #include "sanitizer_common/sanitizer_stacktrace.h" #include "ubsan_diag.h" #include "ubsan_init.h" +// Interception of signals breaks too many things on Android. +// * It requires that ubsan is the first dependency of the main executable for +// the interceptors to work correctly. This complicates deployment, as it +// prevents us from enabling ubsan on random platform modules independently. +// * For this to work with ART VM, ubsan signal handler has to be set after the +// debuggerd handler, but before the ART handler. +// * Interceptors don't work at all when ubsan runtime is loaded late, ex. when +// it is part of an APK that does not use wrap.sh method. +#if SANITIZER_FUCHSIA || SANITIZER_ANDROID + +namespace __ubsan { +void InitializeDeadlySignals() {} +} + +#else + #define COMMON_INTERCEPT_FUNCTION(name) INTERCEPT_FUNCTION(name) #include "sanitizer_common/sanitizer_signal_interceptors.inc" namespace __ubsan { -#if SANITIZER_FUCHSIA -void InitializeDeadlySignals() {} -#else static void OnStackUnwind(const SignalContext &sig, const void *, BufferedStackTrace *stack) { GetStackTrace(stack, kStackTraceMax, sig.pc, sig.bp, sig.context, @@ -46,8 +60,9 @@ void InitializeDeadlySignals() { InitializeSignalInterceptors(); InstallDeadlySignalHandlers(&UBsanOnDeadlySignal); } -#endif } // namespace __ubsan +#endif + #endif // CAN_SANITIZE_UB |