summaryrefslogtreecommitdiffstats
path: root/libcxxabi/src
diff options
context:
space:
mode:
authorDan Albert <danalbert@google.com>2014-08-19 16:30:07 +0000
committerDan Albert <danalbert@google.com>2014-08-19 16:30:07 +0000
commit07a78740ae57d753216d12e9c8c10998c7e0664b (patch)
tree1548f1689073dfbab767c6fd478c860a9e164cf6 /libcxxabi/src
parentdd69ef38dba72b08bee83f262fd443743940d2bc (diff)
downloadbcm5719-llvm-07a78740ae57d753216d12e9c8c10998c7e0664b.tar.gz
bcm5719-llvm-07a78740ae57d753216d12e9c8c10998c7e0664b.zip
Improve logging of aborts for Android.
In Android, stderr only goes to the console, and as such will only ever be seen by adb shell users. Since very few developers will ever actually see that, also send the abort message to logcat and the tombstone. llvm-svn: 215983
Diffstat (limited to 'libcxxabi/src')
-rw-r--r--libcxxabi/src/abort_message.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/libcxxabi/src/abort_message.cpp b/libcxxabi/src/abort_message.cpp
index 3da4ef67002..3158ada4982 100644
--- a/libcxxabi/src/abort_message.cpp
+++ b/libcxxabi/src/abort_message.cpp
@@ -12,9 +12,14 @@
#include <stdarg.h>
#include "abort_message.h"
+#ifdef __BIONIC__
+#include <android/set_abort_message.h>
+#include <syslog.h>
+#endif
+
#pragma GCC visibility push(hidden)
-#if __APPLE__
+#if __APPLE__
# if defined(__has_include) && __has_include(<CrashReporterClient.h>)
# define HAVE_CRASHREPORTERCLIENT_H 1
# include <CrashReporterClient.h>
@@ -33,7 +38,7 @@ void abort_message(const char* format, ...)
vfprintf(stderr, format, list);
va_end(list);
fprintf(stderr, "\n");
-
+
#if __APPLE__ && HAVE_CRASHREPORTERCLIENT_H
// record message in crash report
char* buffer;
@@ -42,6 +47,20 @@ void abort_message(const char* format, ...)
vasprintf(&buffer, format, list2);
va_end(list2);
CRSetCrashLogMessage(buffer);
+#elif __BIONIC__
+ char* buffer;
+ va_list list2;
+ va_start(list2, format);
+ vasprintf(&buffer, format, list2);
+ va_end(list2);
+
+ // Show error in tombstone.
+ android_set_abort_message(buffer);
+
+ // Show error in logcat.
+ openlog("libc++abi", 0, 0);
+ syslog(LOG_CRIT, "%s", buffer);
+ closelog();
#endif
abort();
OpenPOWER on IntegriCloud