[libcxx-commits] [libcxxabi] b68904d - [libc++abi] NFCI: Minor refactoring of abort_message()

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Thu Jun 25 11:48:37 PDT 2020


Author: Louis Dionne
Date: 2020-06-25T14:48:26-04:00
New Revision: b68904d954b79e0382bdfa852758adcbd5350748

URL: https://github.com/llvm/llvm-project/commit/b68904d954b79e0382bdfa852758adcbd5350748
DIFF: https://github.com/llvm/llvm-project/commit/b68904d954b79e0382bdfa852758adcbd5350748.diff

LOG: [libc++abi] NFCI: Minor refactoring of abort_message()

Remove small code duplication and add comments explaining why we do things
in a given order.

Added: 
    

Modified: 
    libcxxabi/src/abort_message.cpp

Removed: 
    


################################################################################
diff  --git a/libcxxabi/src/abort_message.cpp b/libcxxabi/src/abort_message.cpp
index d556af1c9037..c5abbe2838a5 100644
--- a/libcxxabi/src/abort_message.cpp
+++ b/libcxxabi/src/abort_message.cpp
@@ -12,52 +12,48 @@
 #include "abort_message.h"
 
 #ifdef __BIONIC__
-#include <android/api-level.h>
-#if __ANDROID_API__ >= 21
-#include <syslog.h>
-extern "C" void android_set_abort_message(const char* msg);
-#else
-#include <assert.h>
-#endif // __ANDROID_API__ >= 21
+#   include <android/api-level.h>
+#   if __ANDROID_API__ >= 21
+#       include <syslog.h>
+        extern "C" void android_set_abort_message(const char* msg);
+#   else
+#       include <assert.h>
+#   endif // __ANDROID_API__ >= 21
 #endif // __BIONIC__
 
-#ifdef __APPLE__
-#   if defined(__has_include) && __has_include(<CrashReporterClient.h>)
-#       define HAVE_CRASHREPORTERCLIENT_H
-#       include <CrashReporterClient.h>
-#   endif
+#if defined(__APPLE__) && __has_include(<CrashReporterClient.h>)
+#   include <CrashReporterClient.h>
+#   define _LIBCXXABI_USE_CRASHREPORTER_CLIENT
 #endif
 
 void abort_message(const char* format, ...)
 {
-    // write message to stderr
+    // Write message to stderr. We do this before formatting into a
+    // variable-size buffer so that we still get some information if
+    // formatting into the variable-sized buffer fails.
 #if !defined(NDEBUG) || !defined(LIBCXXABI_BAREMETAL)
-#ifdef __APPLE__
-    fprintf(stderr, "libc++abi.dylib: ");
+    {
+        fprintf(stderr, "libc++abi: ");
+        va_list list;
+        va_start(list, format);
+        vfprintf(stderr, format, list);
+        va_end(list);
+        fprintf(stderr, "\n");
+    }
 #endif
+
+    // Format the arguments into an allocated buffer. We leak the buffer on
+    // purpose, since we're about to abort() anyway.
+    char* buffer;
     va_list list;
     va_start(list, format);
-    vfprintf(stderr, format, list);
+    vasprintf(&buffer, format, list);
     va_end(list);
-    fprintf(stderr, "\n");
-#endif
 
-#if defined(__APPLE__) && defined(HAVE_CRASHREPORTERCLIENT_H)
-    // record message in crash report
-    char* buffer;
-    va_list list2;
-    va_start(list2, format);
-    vasprintf(&buffer, format, list2);
-    va_end(list2);
+#if defined(_LIBCXXABI_USE_CRASHREPORTER_CLIENT)
     CRSetCrashLogMessage(buffer);
 #elif defined(__BIONIC__)
-    char* buffer;
-    va_list list2;
-    va_start(list2, format);
-    vasprintf(&buffer, format, list2);
-    va_end(list2);
-
-#if __ANDROID_API__ >= 21
+#   if __ANDROID_API__ >= 21
     // Show error in tombstone.
     android_set_abort_message(buffer);
 
@@ -65,12 +61,12 @@ void abort_message(const char* format, ...)
     openlog("libc++abi", 0, 0);
     syslog(LOG_CRIT, "%s", buffer);
     closelog();
-#else
+#   else
     // The good error reporting wasn't available in Android until L. Since we're
     // about to abort anyway, just call __assert2, which will log _somewhere_
     // (tombstone and/or logcat) in older releases.
     __assert2(__FILE__, __LINE__, __func__, buffer);
-#endif // __ANDROID_API__ >= 21
+#   endif // __ANDROID_API__ >= 21
 #endif // __BIONIC__
 
     abort();


        


More information about the libcxx-commits mailing list