Base: Add AbortFunction for logging

Add a hook to modify FATAL behavior. Add a test.

Bug: 31338270
Test: m
Test: mmma system/core/base && $ANDROID_HOST_OUT/nativetest64/libbase_test/libbase_test64
Change-Id: I966da319cda613738b3f2ccdac8c21900d6a5c72
diff --git a/base/logging_test.cpp b/base/logging_test.cpp
index 3fde302..02a9198 100644
--- a/base/logging_test.cpp
+++ b/base/logging_test.cpp
@@ -330,3 +330,23 @@
   UNIMPLEMENTED(ERROR);
   CheckMessage(cap, android::base::ERROR, expected.c_str());
 }
+
+static void NoopAborter(const char* msg ATTRIBUTE_UNUSED) {
+  LOG(ERROR) << "called noop";
+}
+
+TEST(logging, LOG_FATAL_NOOP_ABORTER) {
+  {
+    android::base::SetAborter(NoopAborter);
+
+    android::base::ScopedLogSeverity sls(android::base::ERROR);
+    CapturedStderr cap;
+    LOG(FATAL) << "foobar";
+    CheckMessage(cap, android::base::FATAL, "foobar");
+    CheckMessage(cap, android::base::ERROR, "called noop");
+
+    android::base::SetAborter(android::base::DefaultAborter);
+  }
+
+  ASSERT_DEATH({SuppressAbortUI(); LOG(FATAL) << "foobar";}, "foobar");
+}