| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include <stdlib.h> |
| | #include <stdio.h> |
| | #include <stdarg.h> |
| | #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 |
| | #endif |
| |
|
| | #if defined(__APPLE__) && __has_include(<CrashReporterClient.h>) |
| | # include <CrashReporterClient.h> |
| | # define _LIBCXXABI_USE_CRASHREPORTER_CLIENT |
| | #endif |
| |
|
| | void abort_message(const char* format, ...) |
| | { |
| | |
| | |
| | |
| | #if !defined(NDEBUG) || !defined(LIBCXXABI_BAREMETAL) |
| | { |
| | fprintf(stderr, "libc++abi: "); |
| | va_list list; |
| | va_start(list, format); |
| | vfprintf(stderr, format, list); |
| | va_end(list); |
| | fprintf(stderr, "\n"); |
| | } |
| | #endif |
| |
|
| | |
| | |
| | #if defined(_LIBCXXABI_USE_CRASHREPORTER_CLIENT) |
| | char* buffer; |
| | va_list list; |
| | va_start(list, format); |
| | vasprintf(&buffer, format, list); |
| | va_end(list); |
| |
|
| | CRSetCrashLogMessage(buffer); |
| | #elif defined(__BIONIC__) |
| | char* buffer; |
| | va_list list; |
| | va_start(list, format); |
| | vasprintf(&buffer, format, list); |
| | va_end(list); |
| |
|
| | # if __ANDROID_API__ >= 21 |
| | |
| | android_set_abort_message(buffer); |
| |
|
| | |
| | openlog("libc++abi", 0, 0); |
| | syslog(LOG_CRIT, "%s", buffer); |
| | closelog(); |
| | # else |
| | |
| | |
| | |
| | __assert2(__FILE__, __LINE__, __func__, buffer); |
| | # endif |
| | #endif |
| |
|
| | abort(); |
| | } |
| |
|