-
Notifications
You must be signed in to change notification settings - Fork 526
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Changes: https://github.com/android/ndk/wiki/Changelog-r27 NDK r27 has been released. The most important change affecting us is that we should start building all our native libraries with [16k page alignment](https://github.com/android/ndk/wiki/Changelog-r27#announcements), support for which is already in `main` and will be refined once #9075 is merged. Notable changes: * NDK switched to LLVM 18.0.1 as its toolchain * A RISC-V sysroot (AKA riscv64, or rv64) has been added. It is not supported. It is present to aid bringup for OS vendors, but it's not yet a supported Android ABI. It will not be built by default. * Added APP_SUPPORT_FLEXIBLE_PAGE_SIZES for ndk-build and ANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES for CMake. * The unsupported libclang, libclang-cpp, libLLVM, and libLTO libraries were removed to save space.
- Loading branch information
Showing
15 changed files
with
99 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// 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 <__config> | ||
#include <__verbose_abort> | ||
#include <cstdarg> | ||
#include <cstdio> | ||
#include <cstdlib> | ||
|
||
#ifdef __BIONIC__ | ||
# include <android/api-level.h> | ||
# if __ANDROID_API__ >= 21 | ||
# include <syslog.h> | ||
extern "C" void android_set_abort_message(const char* msg); | ||
# else | ||
# include <assert.h> | ||
# endif // __ANDROID_API__ >= 21 | ||
#endif // __BIONIC__ | ||
|
||
#if defined(__APPLE__) && __has_include(<CrashReporterClient.h>) | ||
# include <CrashReporterClient.h> | ||
#endif | ||
|
||
_LIBCPP_BEGIN_NAMESPACE_STD | ||
|
||
_LIBCPP_WEAK void __libcpp_verbose_abort(char const* format, ...) { | ||
// Write message to stderr. We do this before formatting into a | ||
// buffer so that we still get some information out if that fails. | ||
{ | ||
va_list list; | ||
va_start(list, format); | ||
std::vfprintf(stderr, format, list); | ||
va_end(list); | ||
} | ||
|
||
// Format the arguments into an allocated buffer for CrashReport & friends. | ||
// We leak the buffer on purpose, since we're about to abort() anyway. | ||
char* buffer; | ||
(void)buffer; | ||
va_list list; | ||
va_start(list, format); | ||
|
||
#if defined(__APPLE__) && __has_include(<CrashReporterClient.h>) | ||
// Note that we should technically synchronize accesses here (by e.g. taking a lock), | ||
// however concretely we're only setting a pointer, so the likelihood of a race here | ||
// is low. | ||
vasprintf(&buffer, format, list); | ||
CRSetCrashLogMessage(buffer); | ||
#elif defined(__BIONIC__) | ||
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); | ||
|
||
std::abort(); | ||
} | ||
|
||
_LIBCPP_END_NAMESPACE_STD |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters