[PATCH] D37716: Runtime detection of android_set_abort_message.
Evgenii Stepanov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 11 15:30:07 PDT 2017
eugenis created this revision.
Herald added subscribers: kubamracek, srhines.
Use runtime detection (with a weak-undef symbol) of
android_set_abort_message availability. Android NDK provides a single
version of the ASan runtime library to be used for any target API
level, which makes compile-time feature detection impossible (the
library itself is built at API level 9).
https://reviews.llvm.org/D37716
Files:
compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cc
Index: compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cc
===================================================================
--- compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cc
+++ compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cc
@@ -44,11 +44,9 @@
}
#if defined(__ANDROID__)
-extern "C" void android_set_abort_message(const char *msg);
+extern "C" __attribute__((weak)) void android_set_abort_message(const char *);
static void abort_with_message(const char *msg) {
-#if __ANDROID_API__ >= 21
- android_set_abort_message(msg);
-#endif
+ if (&android_set_abort_message) android_set_abort_message(msg);
abort();
}
#else
Index: compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
===================================================================
--- compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
+++ compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
@@ -553,9 +553,11 @@
WriteToSyslog(str);
}
-#if SANITIZER_ANDROID && __ANDROID_API__ >= 21
-extern "C" void android_set_abort_message(const char *msg);
-void SetAbortMessage(const char *str) { android_set_abort_message(str); }
+#if SANITIZER_ANDROID
+extern "C" __attribute__((weak)) void android_set_abort_message(const char *);
+void SetAbortMessage(const char *str) {
+ if (&android_set_abort_message) android_set_abort_message(str);
+}
#else
void SetAbortMessage(const char *str) {}
#endif
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37716.114718.patch
Type: text/x-patch
Size: 1421 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170911/6e4d997f/attachment.bin>
More information about the llvm-commits
mailing list