[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