From 99e3a7a64ca9016b7ef807a27e5913481c3e509a Mon Sep 17 00:00:00 2001 From: wanzixuan Date: Tue, 2 Apr 2024 02:20:24 +0000 Subject: [PATCH] [libcxxabi] Uncaught C++ exception supports faultlog Description: Add uncaught C++ exception to faultlog Issue: https://gitee.com/openharmony/third_party_llvm-project/issues/I9DI1D Test: LLVM toolchain compilation Signed-off-by: wanzixuan Change-Id: Ic3c2f8253a3982fc0c0aa1b0fb6b14a1cfcb4b79 --- libcxxabi/src/abort_message.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/libcxxabi/src/abort_message.cpp b/libcxxabi/src/abort_message.cpp index 2264168e1ef0..428b45096690 100644 --- a/libcxxabi/src/abort_message.cpp +++ b/libcxxabi/src/abort_message.cpp @@ -26,6 +26,10 @@ # define _LIBCXXABI_USE_CRASHREPORTER_CLIENT #endif +#if defined(__OHOS__) + extern "C" __attribute__((weak)) void set_fatal_message(const char *msg); +#endif + void abort_message(const char* format, ...) { // Write message to stderr. We do this before formatting into a @@ -52,7 +56,19 @@ void abort_message(const char* format, ...) va_end(list); CRSetCrashLogMessage(buffer); -#elif defined(__BIONIC__) && !defined(__OHOS__) + +#elif defined(__OHOS__) + char* buffer; + va_list list; + va_start(list, format); + vasprintf(&buffer, format, list); + va_end(list); + + if (&set_fatal_message) { + set_fatal_message(buffer); + } + +#elif defined(__BIONIC__) char* buffer; va_list list; va_start(list, format); @@ -73,7 +89,7 @@ void abort_message(const char* format, ...) // (tombstone and/or logcat) in older releases. __assert2(__FILE__, __LINE__, __func__, buffer); # endif // __ANDROID_API__ >= 21 -#endif // __BIONIC__ +#endif // __BIONIC__ || __OHOS__ abort(); } -- Gitee