fdsan: provide abort message in warning tombstones.
Bug: http://b/112770187
Test: debuggerd_test
Test: bionic-unit-tests
Test: crasher fdsan_file
Change-Id: I55e18eafaee8b0c35bacd2795b7830bcb9d59291
diff --git a/libc/bionic/fdsan.cpp b/libc/bionic/fdsan.cpp
index d877172..ad1ddee 100644
--- a/libc/bionic/fdsan.cpp
+++ b/libc/bionic/fdsan.cpp
@@ -176,12 +176,20 @@
return;
}
+ struct {
+ size_t size;
+ char buf[512];
+ } abort_message;
+
va_list va;
va_start(va, fmt);
if (error_level == ANDROID_FDSAN_ERROR_LEVEL_FATAL) {
async_safe_fatal_va_list("fdsan", fmt, va);
} else {
async_safe_format_log_va_list(ANDROID_LOG_ERROR, "fdsan", fmt, va);
+ size_t len =
+ async_safe_format_buffer_va_list(abort_message.buf, sizeof(abort_message.buf), fmt, va);
+ abort_message.size = len + sizeof(size_t);
}
va_end(va);
@@ -192,7 +200,9 @@
__BIONIC_FALLTHROUGH;
case ANDROID_FDSAN_ERROR_LEVEL_WARN_ALWAYS:
// DEBUGGER_SIGNAL
- raise(__SIGRTMIN + 3);
+ sigval abort_msg;
+ abort_msg.sival_ptr = &abort_message;
+ pthread_sigqueue(pthread_self(), __SIGRTMIN + 3, abort_msg);
break;
case ANDROID_FDSAN_ERROR_LEVEL_FATAL: