diff options
Diffstat (limited to 'libc/bionic/android_set_abort_message.cpp')
-rw-r--r-- | libc/bionic/android_set_abort_message.cpp | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/libc/bionic/android_set_abort_message.cpp b/libc/bionic/android_set_abort_message.cpp index 53d75769d..05adf3e4c 100644 --- a/libc/bionic/android_set_abort_message.cpp +++ b/libc/bionic/android_set_abort_message.cpp @@ -29,7 +29,6 @@ #include <android/set_abort_message.h> #include <async_safe/log.h> -#include <bionic/set_abort_message_internal.h> #include <bits/stdatomic.h> #include <pthread.h> @@ -60,8 +59,6 @@ static_assert(offsetof(magic_abort_msg_t, msg) == 2 * sizeof(uint64_t), "The in-memory layout of magic_abort_msg_t is not consistent with what automated " "tools expect."); -static _Atomic(crash_detail_t*) free_head = nullptr; - [[clang::optnone]] static void fill_abort_message_magic(magic_abort_msg_t* new_magic_abort_message) { // 128-bit magic for the abort message. Chosen by fair dice roll. @@ -103,65 +100,3 @@ void android_set_abort_message(const char* msg) { strcpy(new_magic_abort_message->msg.msg, msg); __libc_shared_globals()->abort_msg = &new_magic_abort_message->msg; } - -__BIONIC_WEAK_FOR_NATIVE_BRIDGE -crash_detail_t* android_register_crash_detail(const void* name, size_t name_size, const void* data, - size_t data_size) { - auto populate_crash_detail = [&](crash_detail_t* result) { - result->name = reinterpret_cast<const char*>(name); - result->name_size = name_size; - result->data = reinterpret_cast<const char*>(data); - result->data_size = data_size; - }; - // This is a atomic fast-path for RAII use-cases where the app keeps creating and deleting - // crash details for short periods of time to capture detailed scopes. - if (crash_detail_t* head = atomic_load(&free_head)) { - while (head != nullptr && !atomic_compare_exchange_strong(&free_head, &head, head->prev_free)) { - // intentionally left blank. - } - if (head) { - head->prev_free = nullptr; - populate_crash_detail(head); - return head; - } - } - ScopedPthreadMutexLocker locker(&__libc_shared_globals()->crash_detail_page_lock); - struct crash_detail_page_t* prev = nullptr; - struct crash_detail_page_t* page = __libc_shared_globals()->crash_detail_page; - if (page != nullptr && page->used == kNumCrashDetails) { - prev = page; - page = nullptr; - } - if (page == nullptr) { - size_t size = sizeof(crash_detail_page_t); - void* map = mmap(nullptr, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); - if (map == MAP_FAILED) { - async_safe_format_log(ANDROID_LOG_ERROR, "libc", "failed to allocate crash_detail_page: %m"); - return nullptr; - } - prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, map, size, "crash details"); - page = reinterpret_cast<struct crash_detail_page_t*>(map); - page->prev = prev; - __libc_shared_globals()->crash_detail_page = page; - } - crash_detail_t* result = &page->crash_details[page->used]; - populate_crash_detail(result); - page->used++; - return result; -} - -__BIONIC_WEAK_FOR_NATIVE_BRIDGE -void android_unregister_crash_detail(crash_detail_t* crash_detail) { - if (crash_detail) { - if (crash_detail->prev_free) { - // removing already removed would mess up the free-list by creating a circle. - return; - } - crash_detail->data = nullptr; - crash_detail->name = nullptr; - crash_detail_t* prev = atomic_load(&free_head); - do { - crash_detail->prev_free = prev; - } while (!atomic_compare_exchange_strong(&free_head, &prev, crash_detail)); - } -} |