summaryrefslogtreecommitdiffstats
path: root/liblog/logd_write_kern.c
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2014-04-23 14:57:32 -0700
committerElliott Hughes <enh@google.com>2014-04-24 13:28:24 -0700
commitda6b2e2fd79c9aac12127b2c2f512e9555fdd06d (patch)
treee90e6904a0afcb745a1b58fdcbf2d36541176039 /liblog/logd_write_kern.c
parent07fa043341ad057ea79ca973089609965ba6c4f9 (diff)
downloadsystem_core-da6b2e2fd79c9aac12127b2c2f512e9555fdd06d.tar.gz
system_core-da6b2e2fd79c9aac12127b2c2f512e9555fdd06d.tar.bz2
system_core-da6b2e2fd79c9aac12127b2c2f512e9555fdd06d.zip
Improve liblog's fatal logging.
This makes LOG_ALWAYS_FATAL and LOG_ALWAYS_FATAL_IF as good as regular assert(3). Change-Id: I0666684d30cae7baf23c64b33d35c1e43f81acf0
Diffstat (limited to 'liblog/logd_write_kern.c')
-rw-r--r--liblog/logd_write_kern.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/liblog/logd_write_kern.c b/liblog/logd_write_kern.c
index c29c28f2d..8c707adfb 100644
--- a/liblog/logd_write_kern.c
+++ b/liblog/logd_write_kern.c
@@ -272,9 +272,15 @@ void __android_log_assert(const char *cond, const char *tag,
strcpy(buf, "Unspecified assertion failed");
}
+#if __BIONIC__
+ // Ensure debuggerd gets to see what went wrong by keeping the C library in the loop.
+ extern __noreturn void __android_fatal(const char* tag, const char* format, ...) __printflike(2, 3);
+ __android_fatal(tag ? tag : "", "%s", buf);
+#else
__android_log_write(ANDROID_LOG_FATAL, tag, buf);
-
__builtin_trap(); /* trap so we have a chance to debug the situation */
+#endif
+ /* NOTREACHED */
}
int __android_log_bwrite(int32_t tag, const void *payload, size_t len)