Merge "Add path separator in bionic-unit-tests program path."
diff --git a/libc/Android.mk b/libc/Android.mk
index fc4940a..afd586e 100644
--- a/libc/Android.mk
+++ b/libc/Android.mk
@@ -1221,7 +1221,8 @@
LOCAL_SYSTEM_SHARED_LIBRARIES :=
# Only need this for arm since libc++ uses its own unwind code that
# doesn't mix with the other default unwind code.
-LOCAL_STATIC_LIBRARIES_arm := libunwind_llvm libc++abi
+LOCAL_STATIC_LIBRARIES_arm := libunwind_llvm
+LOCAL_STATIC_LIBRARIES += libc++abi
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
# Don't install on release build
diff --git a/libc/bionic/debug_stacktrace.cpp b/libc/bionic/debug_stacktrace.cpp
index c6ce714..71e876b 100644
--- a/libc/bionic/debug_stacktrace.cpp
+++ b/libc/bionic/debug_stacktrace.cpp
@@ -47,34 +47,20 @@
typedef struct _Unwind_Context __unwind_context;
+extern "C" char* __cxa_demangle(const char*, char*, size_t*, int*);
+
static mapinfo_t* g_map_info = NULL;
-static void* g_demangler;
-typedef char* (*DemanglerFn)(const char*, char*, size_t*, int*);
-static DemanglerFn g_demangler_fn = NULL;
__LIBC_HIDDEN__ void backtrace_startup() {
ScopedDisableDebugCalls disable;
g_map_info = mapinfo_create(getpid());
- g_demangler = dlopen("libgccdemangle.so", RTLD_NOW);
- if (g_demangler != NULL) {
- void* sym = dlsym(g_demangler, "__cxa_demangle");
- g_demangler_fn = reinterpret_cast<DemanglerFn>(sym);
- }
}
__LIBC_HIDDEN__ void backtrace_shutdown() {
ScopedDisableDebugCalls disable;
mapinfo_destroy(g_map_info);
- dlclose(g_demangler);
-}
-
-static char* demangle(const char* symbol) {
- if (g_demangler_fn == NULL) {
- return NULL;
- }
- return (*g_demangler_fn)(symbol, NULL, NULL, NULL);
}
struct stack_crawl_state_t {
@@ -158,8 +144,7 @@
soname = "<unknown>";
}
if (symbol != NULL) {
- // TODO: we might need a flag to say whether it's safe to allocate (demangling allocates).
- char* demangled_symbol = demangle(symbol);
+ char* demangled_symbol = __cxa_demangle(symbol, NULL, NULL, NULL);
const char* best_name = (demangled_symbol != NULL) ? demangled_symbol : symbol;
__libc_format_log(ANDROID_LOG_ERROR, "libc",
diff --git a/libc/bionic/libc_logging.cpp b/libc/bionic/libc_logging.cpp
index 76bc46d..2eb9d68 100644
--- a/libc/bionic/libc_logging.cpp
+++ b/libc/bionic/libc_logging.cpp
@@ -513,9 +513,9 @@
vec[3].iov_base = &priority;
vec[3].iov_len = 1;
vec[4].iov_base = const_cast<char*>(tag);
- vec[4].iov_len = strlen(tag);
+ vec[4].iov_len = strlen(tag) + 1;
vec[5].iov_base = const_cast<char*>(msg);
- vec[5].iov_len = strlen(msg);
+ vec[5].iov_len = strlen(msg) + 1;
#else
int main_log_fd = TEMP_FAILURE_RETRY(open("/dev/log/main", O_CLOEXEC | O_WRONLY));
if (main_log_fd == -1) {
@@ -530,9 +530,9 @@
vec[0].iov_base = &priority;
vec[0].iov_len = 1;
vec[1].iov_base = const_cast<char*>(tag);
- vec[1].iov_len = strlen(tag);
+ vec[1].iov_len = strlen(tag) + 1;
vec[2].iov_base = const_cast<char*>(msg);
- vec[2].iov_len = strlen(msg);
+ vec[2].iov_len = strlen(msg) + 1;
#endif
int result = TEMP_FAILURE_RETRY(writev(main_log_fd, vec, sizeof(vec) / sizeof(vec[0])));