//===-- utilities_posix.cpp -------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include #include // IWYU pragma: keep (for __BIONIC__ macro) #include #include #include #ifdef __BIONIC__ #include "gwp_asan/definitions.h" #include extern "C" GWP_ASAN_WEAK void android_set_abort_message(const char *); #else // __BIONIC__ #include #endif namespace gwp_asan { void die(const char *Message) { #ifdef __BIONIC__ if (&android_set_abort_message != nullptr) android_set_abort_message(Message); abort(); #else // __BIONIC__ fprintf(stderr, "%s", Message); __builtin_trap(); #endif // __BIONIC__ } void dieWithErrorCode(const char *Message, int64_t ErrorCode) { #ifdef __BIONIC__ if (&android_set_abort_message == nullptr) abort(); size_t buffer_size = strlen(Message) + 48; char *buffer = static_cast(alloca(buffer_size)); snprintf(buffer, buffer_size, "%s (Error Code: %" PRId64 ")", Message, ErrorCode); android_set_abort_message(buffer); abort(); #else // __BIONIC__ fprintf(stderr, "%s (Error Code: %" PRId64 ")", Message, ErrorCode); __builtin_trap(); #endif // __BIONIC__ } } // namespace gwp_asan