[libc++] Properly log crashes with the assertion handler on older Androids

This reintroduces the same workaround we have in libc++abi for older
Androids based on https://reviews.llvm.org/D130507#inline-1255914.

Differential Revision: https://reviews.llvm.org/D130708
This commit is contained in:
Louis Dionne 2022-07-28 10:25:30 -04:00
parent 9fe27bca71
commit 1422a9689d
1 changed files with 15 additions and 3 deletions

View File

@ -14,9 +14,13 @@
#ifdef __BIONIC__
# include <android/api-level.h>
# include <syslog.h>
# if __ANDROID_API__ >= 21
# include <syslog.h>
extern "C" void android_set_abort_message(const char* msg);
#endif
# else
# include <assert.h>
# endif // __ANDROID_API__ >= 21
#endif // __BIONIC__
#if defined(__APPLE__) && __has_include(<CrashReporterClient.h>)
# include <CrashReporterClient.h>
@ -48,14 +52,22 @@ void __libcpp_assertion_handler(char const* format, ...) {
vasprintf(&buffer, format, list);
CRSetCrashLogMessage(buffer);
#elif defined(__BIONIC__)
// Show error in tombstone.
vasprintf(&buffer, format, list);
# if __ANDROID_API__ >= 21
// Show error in tombstone.
android_set_abort_message(buffer);
// Show error in logcat.
openlog("libc++", 0, 0);
syslog(LOG_CRIT, "%s", buffer);
closelog();
# 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
va_end(list);