Allow liblog to pass failure reasons to debuggerd.

assert(3) already does this, but LOG_ALWAYS_FATAL and LOG_ALWAYS_FATAL_IF
have been missing out.

Change-Id: I1d6214c4f792fa0d4ba3c14eded3fc9c332bd3c5
diff --git a/libc/bionic/libc_logging.cpp b/libc/bionic/libc_logging.cpp
index 8e62e40..c9c5d28 100644
--- a/libc/bionic/libc_logging.cpp
+++ b/libc/bionic/libc_logging.cpp
@@ -614,7 +614,7 @@
   __libc_fatal("FORTIFY_SOURCE: %s. Calling abort().", msg);
 }
 
-static void __libc_fatal(const char* format, va_list args) {
+static void __libc_fatal(const char* tag, const char* format, va_list args) {
   char msg[1024];
   BufferOutputStream os(msg, sizeof(msg));
   out_vformat(os, format, args);
@@ -622,7 +622,7 @@
   // TODO: log to stderr for the benefit of "adb shell" users.
 
   // Log to the log for the benefit of regular app developers (whose stdout and stderr are closed).
-  __libc_write_log(ANDROID_LOG_FATAL, "libc", msg);
+  __libc_write_log(ANDROID_LOG_FATAL, tag, msg);
 
   __libc_set_abort_message(msg);
 }
@@ -630,14 +630,23 @@
 void __libc_fatal_no_abort(const char* format, ...) {
   va_list args;
   va_start(args, format);
-  __libc_fatal(format, args);
+  __libc_fatal("libc", format, args);
   va_end(args);
 }
 
 void __libc_fatal(const char* format, ...) {
   va_list args;
   va_start(args, format);
-  __libc_fatal(format, args);
+  __libc_fatal("libc", format, args);
+  va_end(args);
+  abort();
+}
+
+// This is used by liblog to implement LOG_ALWAYS_FATAL and LOG_ALWAYS_FATAL_IF.
+void __android_fatal(const char* tag, const char* format, ...) {
+  va_list args;
+  va_start(args, format);
+  __libc_fatal(tag, format, args);
   va_end(args);
   abort();
 }
diff --git a/libc/private/libc_logging.h b/libc/private/libc_logging.h
index a187b37..54e050a 100644
--- a/libc/private/libc_logging.h
+++ b/libc/private/libc_logging.h
@@ -74,8 +74,8 @@
 // Formats a message to the log (priority 'fatal'), then aborts.
 //
 
-__LIBC_HIDDEN__ __noreturn void __libc_fatal(const char* format, ...)
-    __printflike(1, 2);
+__LIBC_HIDDEN__ __noreturn void __libc_fatal(const char* format, ...) __printflike(1, 2);
+__noreturn void __android_fatal(const char* tag, const char* format, ...) __printflike(2, 3);
 
 //
 // Formats a message to the log (priority 'fatal'), but doesn't abort.