summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2018-01-22 19:26:01 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2018-01-22 19:26:01 +0000
commit7c70d9d0be8a465974d45faa8e505acce7bb4075 (patch)
treec4b56100524a4ad8487121c939a572120e69c328
parent82c5878575a01bd17cb6b5e3f81703e01f8b0fd9 (diff)
downloadbcm5719-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
-rw-r--r--compiler-rt/lib/ubsan/ubsan_signals_standalone.cc23
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
OpenPOWER on IntegriCloud